2010-02-18 37 views
15

Dưới đây là các yêu cầu, người dùng cần có thể xem các tệp PDF đã tải lên trong trình duyệt. Họ cần có khả năng thêm ghi chú vào tệp PDF và lưu tệp PDF được cập nhật vào máy chủ mà không phải lưu tệp đó vào máy của họ và mở nó ra ngoài trình duyệt. Cách chỉnh sửa pdf trong trình duyệt và lưu nó vào máy chủ

Bất kỳ ý tưởng nào về cách đạt được điều này đều được hoan nghênh.

bằng cách tôi đang làm việc với trang web asp.net (trong C#).


Tôi không kiểm soát được định dạng pdf. Nó được tải lên phía máy khách, sau đó người dùng khác cần xem và ghi chú ở đầu pdf.

Giải pháp mà tôi đang suy nghĩ là kết xuất PDF thành jpeg và sử dụng javascript để vẽ tọa độ của vị trí cần lưu ý.

đây là một ví dụ nhanh của html và javascript tạo json chú ý

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     * 
     { 
      margin:0; 
      padding:0; 
     } 
     #PDF 
     { 
      position:absolute; 
      top:0; 
      bottom:0; 
      width:600px; 
      height:800px; 
      background:url(assets/images/gray.png) repeat; 
      float:left; 
     } 
     #results 
     { 
      float:right; 
     } 
     .comment 
     { 
      position:absolute; 
      border:none; 
      background-color:Transparent; 
      height:300px; 
      width:100px; 
      overflow:auto; 
      float:left; 
      top:0; 
      right:0; 
      font-family: Arial; 
      font-size:12px; 

     } 
     div.comment 
     { 
      padding-top:-20px; 
     } 
     .comment a.button 
     { 
      display:block; 
      padding-top:-20px; 
     } 
    </style> 
</head> 
<body> 
    <div> 
     <div id="PDF"></div> 

     <div id="results"> 

     </div> 
    </div> 
</body> 
</html> 

<script type="text/javascript" src="script/jquery.js"></script> 
<script type="text/javascript"> 
    var points = []; 
    $("#PDF").click(function(e) { 
     if ($("textarea.comment").length == 0) { 
      var that = this; 
      var txt = $("<textarea class='comment'></textarea>").css({ top: e.pageY, left: e.pageX }).blur(function() { $(this).remove(); }).keypress(function(e2) { 
       if (e2.keyCode == 13 && !e.shiftKey) { 
        var that2 = this; 
        $("#PDF").append($("<div class='comment'>").html(that2.value.replace(/\r/gi, "<br>")).css({ top: e.pageY, left: e.pageX })); 
        $(this).remove(); 
        points.push({ "x": e.pageX, "y": e.pageY, "text": that2.value }) 
        $("#results").append('{ "x": ' + e.pageX + ', "y": ' + e.pageY + ', "text": "' + that2.value + '" }<br/>'); 
       } 
      }); 
      $(this).append(txt); 
      txt.each(function() { this.focus(); }) 
     } 
    }); 
</script> 

Vì vậy, bây giờ tôi cần phải tìm ra cách (sử dụng jQuery.):

  1. Hiển thị pdf thành jpeg.
  2. Tạo lại PDF đặt chú thích lên trên nó.

Trả lời

6

Bạn có thể sử dụng GhostScript để render một PDF sang JPEG.
dòng lệnh ví dụ:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=output.jpg input.pdf 

Bạn cần phải gọi GhostScript qua các phiên bản dòng lệnh (như trên) hoặc sử dụng một wrapper. Một tìm kiếm Google bật lên bài đăng blog:

Đối với việc tạo ra một file PDF mới bạn có hai lựa chọn thay thế chính:

  • Sửa đổi JPEG và chuyển đổi JPEG sang định dạng PDF (bạn có thể sử dụng GhsotScript để chuyển đổi)
  • Sử dụng thư viện PDF nhập tệp PDF gốc của bạn và thêm dữ liệu ở trên đó

Đối với thư viện PDF thấy điều này SO câu hỏi:

+0

bạn có thể lấy mã mới nhất cho gói GhostscriptSharp Ghostscript tại http://github.com/mephraim/ghostscriptsharp –

2

Chúng tôi thực hiện việc này bằng lowagie trên nền tảng Spring/Java.

Người dùng được trình bày với tờ khai thuế bán hàng được tạo trước và có thể thêm một số điều chỉnh thủ công nhất định trong một vài trường. Sau đó chúng tôi tính toán lại các trường tổng số dựa trên đầu vào thủ công của chúng và lưu toàn bộ nội dung trở lại DB của chúng tôi.

+1

Tôi tin rằng anh ấy đang đề cập đến http://itextpdf.com/ (thường được gọi là lowagie). – cmptrgeekken

5

Công ty của tôi, Atalasoft, cung cấp các thành phần cho phép bạn xem hình ảnh tài liệu, bao gồm PDF và chú thích chúng và lưu chú thích trở lại PDF. Trong bộ sản phẩm của chúng tôi, bạn sẽ cần hình ảnh tài liệu dotImage và phần bổ trợ PDF Reader. Bạn sẽ sử dụng dotAnnotate thông qua các điều khiển web AJAX của chúng tôi. Dưới đây là link to our online demo - tài liệu được hiển thị là TIFF, nhưng bạn cũng có thể sử dụng tệp PDF.

+0

Liên kết demo trực tuyến không hoạt động nữa. Nó vẫn còn ở đâu đó? – Sky

+0

Tôi không còn ở Atalasoft nữa. Tôi sẽ liên hệ với bộ phận bán hàng hoặc hỗ trợ để tìm hiểu nơi nó đã đi. – plinth

2

Bạn có thể sử dụng PDFSharp hoặc itextsharp để tạo chú thích. Chưa thử chú thích PDFSharp nhưng iTextSharp không hoạt động. Bạn sẽ phải xử lý việc chỉnh sửa ở phía máy chủ. có thể sao chép tệp vào thư mục tạm thời chỉnh sửa và lưu lại.

Bạn sẽ tìm thấy iTextSharp tại http://itextsharp.sourceforge.net, ví dụ chú thích: đáy tại trang http://itextsharp.sourceforge.net/tutorial/ch03.html

PDFSharp: http://www.pdfsharp.net

3

Tôi không nghĩ rằng bạn sẽ có thể có một người dùng tải một pdf trong trình duyệt của họ , chỉnh sửa nó, sau đó lưu nó vào máy chủ mà không cần lưu nó vào máy của họ và sau đó tải nó lên máy chủ.

Điều bạn có thể làm là thiết lập biểu mẫu web với phần phụ cơ sở dữ liệu có thể đại diện cho pdf và khi họ chỉnh sửa, bạn có thể tạo lại tệp PDF bằng itextsharp và tải thông tin từ cơ sở dữ liệu, theo cách đó khi người dùng quay lại chỉnh sửa PDF, bạn có thể chuẩn bị sẵn biểu mẫu với những gì đã tồn tại.

itextsharp là cực kỳ dễ sử dụng, đây là một ví dụ:

string sourceFile = "path/to/pdfTemplate.pdf"; 
PdfReader reader = new PdfReader(sourceFile); 
PdfStamper stamper = new PdfStamper(reader, new FileStream("path/to/store/pdf/filename.pdf", FileMode.Create)); 
AcroFields fields = stamper.AcroFields; 

//now assign fields in the form to values from your form 

fields.SetField("input1", input1.Text); 
fields.SetField("input2", input2.Text); 

//close the pdf after filling out fields 

stamper.SetFullCompression(); 
stamper.FormFlattening = true; 
stamper.Close(); 

sau đó nếu bạn muốn hiển thị PDF thực tế bạn có thể dễ dàng

Response.Redirect("path/to/store/pdf/filename.pdf"); 
+0

Có thể. Nhìn vào câu trả lời của tôi – citronas

0

Bạn không nói rõ những gì hạn chế công nghệ mà bạn có. Nếu bạn có thể xem xét giải pháp Silverlight và bạn có các máy khách hỗ trợ Silverlight, bạn có thể dễ dàng thực hiện việc này.

Hãy xem cách Microsoft Sketchflow hoạt động, nó cho phép người dùng chú thích tài liệu trong trình duyệt web và các chú thích được lưu lại máy chủ.

Đây là công ty có một số commercial control để chú thích PDF (và các định dạng khác).

Microsoft thực hiện việc này trong trình phát Sketchflow của họ. Đây là video. Tất nhiên bạn sẽ không sử dụng sketchflow nhưng thay vì implimenting một cái gì đó tương tự mà đáp ứng nhu cầu của bạn. Silverlight 4 hỗ trợ clipboard cũng như kéo và thả để người dùng cuối có thể dán một thứ gì đó lên PDF immage cũng như kéo bất kỳ tập tin nào lên nó, sau đó bạn có thể tải lên máy chủ của mình.

2

Nếu bạn có thể mua thư viện của bên thứ ba, tôi rất muốn giới thiệu TxTextControl.http://www.textcontrol.com/en_US/

Với điều khiển này bạn có thể viết trình chỉnh sửa, cho phép bạn sử dụng pdf làm mẫu và cho phép người dùng thực hiện thay đổi và lưu chúng. Tất cả trong phạm vi trình duyệt, mà không cần phải chọn thủ công tempfile trên máy tính. Acessing khá giống với việc sử dụng TextProperty của một TextBox bình thường.

+0

Giải pháp là tốt đẹp nhưng chi phí cấp phép là một vấn đề cho các dự án nhỏ. –

Các vấn đề liên quan