2010-02-18 107 views
15

以下是需求,用戶需要能夠在瀏覽器中查看上傳的PDF。他們需要能夠將註釋添加到PDF中,並將更新的PDF保存到服務器,而不必將其保存到他們的機器並在瀏覽器之外打開它。 如何在瀏覽器中編輯PDF並將其保存到服務器

有關如何實現此目的的任何想法都受到歡迎。

順便說一句,我正與一個asp.net網站(在C#中)。


我沒有對什麼PDF看起來像沒有控制。這是上傳的客戶端,然後其他用戶需要查看和pdf上的註釋。

我在想的解決方案是將PDF轉換爲JPEG格式,並使用JavaScript來繪製筆記所在位置的座標。

這裏是創建筆記的JSON的HTML和JavaScript的一個簡單的例子

<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> 

所以現在我需要弄清楚如何(使用jQuery):

  1. 將pdf呈現爲jpeg。
  2. 重新創建PDF,將註釋放在上面。

回答

6

您可以使用GhostScript渲染PDF到JPEG。
命令行例子:

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

你需要通過命令行版本(如上)來調用GhostScript的或使用的包裝。 谷歌搜索打開了這個博客帖子:

爲了創建一個新的PDF你有兩個主要備選方案:

  • 修改JPEG和JPEG轉換成PDF(您可以使用GhsotScript進行轉換)
  • 使用導入原始PDF的PDF庫,並在其上添加數據

對於PDF庫看到這個SO問題:

+0

你可以在http://github.com/mephraim/ghostscriptsharp獲得GhostscriptSharp Ghostscript包裝的最新代碼 –

2

我們做了春/ Java平臺上使用此lowagie。

向用戶顯示預先生成的銷售稅申報表,並可在幾個字段中添加某些手動調整。然後,我們根據手動輸入重新計算總計字段,並將整個事件保存回我們的數據庫。

+1

我相信他指的是http://itextpdf.com/(以前稱爲lowagie)。 – cmptrgeekken

5

我的公司Atalasoft提供的組件可讓您查看文檔圖像(包括PDF)並對其進行註釋並將註釋保存回PDF中。在我們的產品套件中,您需要dotImage文檔圖像和PDF閱讀器附件。您將通過我們的AJAX網頁控件使用dotAnnotate。這是一個link to our online demo - 顯示的文檔是TIFF,但也可以使用PDF。

+0

在線演示鏈接不再適用。它仍然可用嗎? – Sky

+0

我不再在Atalasoft。我會聯繫銷售或支持部門以瞭解它已經走到哪裏。 – plinth

3

我不認爲你將能夠有一個用戶在瀏覽器中加載PDF ,編輯它,然後將它保存到服務器,而不用將它們保存到他們的機器,然後將其上傳到服務器。

你可以做的是設置一個帶有數據庫後端的webform,它可以表示PDF,當他們編輯它時,你可以使用itextsharp重新生成PDF並從數據庫中加載信息,這樣當用戶返回時編輯PDF,你可以預先填充已經存在的表單。

itextsharp是非常容易使用,這裏有一個例子:

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(); 

然後如果你想顯示的實際PDF你可以很容易

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

這是可能的。看看我的回答 – citronas

0

你沒有指定你所擁有的技術限制。 如果您可以考慮使用Silverlight解決方案,並且您擁有支持Silverlight的客戶端計算機,則可以輕鬆執行此操作。

看看Microsoft Sketchflow是如何工作的,它允許用戶在Web瀏覽器中註釋文檔並將註釋保留回服務器。

這是一個使用commercial control來註釋PDF(以及其他格式)的公司。

Microsoft在Sketchflow播放器中執行此操作。這是一個video。當然,你不會使用sketchflow,而是會提供類似的東西來滿足你的需求。

作爲額外的好處Silverlight 4支持剪貼板以及拖放操作,以便最終用戶可以將某些東西粘貼到PDF immage上,並將任何文件拖動到它上面,然後您就可以將其上傳到服務器。

2

如果你能夠購買第三方庫,我幾乎建議TxTextControl。http://www.textcontrol.com/en_US/

有了這個控件,你可以編寫一個編輯器,讓你使用你的pdf作爲模板,並允許用戶進行更改並保存它們。所有內的瀏覽器,無需手動選擇計算機上的臨時文件。調用與使用普通TextBox的TextProperty非常相似。

+0

該解決方案很好,但許可成本是小項目的一個問題。 –

相關問題