2017-08-01 171 views
1

我正在爲我的問題尋找解決方案。在特定位置刪除或覆蓋PDF上的文本

我試圖修改一個文本,使用itextsharp出現在PDF文檔的特定位置。

有人可以幫忙嗎?

SOLUTION:

我已經解決了寫這篇:

public bool StampOnPDF(string _PathPDF, string _text, string _Total) 
    { 
     string _fileName = Path.GetFileName(_PathPDF); 

     string oldFile = _PathPDF; 
     string BackupPDF = _PathPDF.Replace(".pdf", "_old.pdf"); 

     File.Copy(oldFile, BackupPDF); 

     iTextSharp.text.Rectangle Zone1 = new iTextSharp.text.Rectangle(495, 157, 540, 148); 
     iTextSharp.text.Rectangle Zone2 = new iTextSharp.text.Rectangle(495, 130, 540, 105); 

     using (PdfReader reader = new PdfReader(BackupPDF)) 
     using (PdfStamper stamper = new PdfStamper(reader, new FileStream(oldFile, FileMode.Create))) 
     {     
      PdfContentByte pbover = stamper.GetOverContent(1); 
      Zone1.BackgroundColor = BaseColor.WHITE; 
      pbover.Rectangle(Zone1); 
      Zone2.BackgroundColor = BaseColor.WHITE; 
      pbover.Rectangle(Zone2);    

      // select the font properties 
      var normalFont = FontFactory.GetFont(FontFactory.HELVETICA, 12); 
      var boldFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12); 

      normalFont.Size = 8; 
      boldFont.Size = 8; 

      string text = _testo;     
      ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, normalFont), 300, 180, 0); 

      text = _Total; 
      ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, boldFont), 523, 115, 0); 
      ColumnText.ShowTextAligned(pbover, Element.ALIGN_CENTER, new Phrase(text, normalFont), 523, 150, 0); 

     }  
     return true;         
    }    
+0

你有什麼嘗試?請與我們分享您的代碼,我們將爲您提供幫助:) – Ben

+1

**(A)**如何「刪除特定位置的文本」---您是否看過「PdfCleanUpProcessor」,例如討論[這裏](http://developers.itextpdf.com/question/how-remove-text-pdf)? **(B)**如何*在特定位置覆蓋文本* ---使用PdfCleanUpProcessor清除區域後,您現在可以繪製任何適合該區域的文本。 **(C)**如何「修改出現在特定位置的文本」 - 「修改」這個詞可能意味着您希望周圍的文本按照某種期望的格式重新排列。如果你確實希望,你很可能會失望。 – mkl

+0

如果您想針對您的問題發佈解決方案,請不要將其編輯爲問題,而是將其作爲答案。另一方面,如果您還不滿足於「解決方案」,只要您指出您不滿足哪些方面,就可以將其添加到問題中。有人說,你的解決方案確實有一個缺點:舊文本可能不再可見,但它仍然存在。因此,如果您從文檔中複製並粘貼(在頁面上嘗試CTRL-A CTRL-C,在某個編輯器中嘗試CTRL-V),舊文本將會在那裏! – mkl

回答

3

這個問題不是一個簡單的一個。 爲了理解原因,我們來看一下PDF文檔。

[a, -28.7356, p, 27.2652, p, 27.2652, e, -27.2652, a, -28.7356, r, 64.6889, a, -28.7356, n, 27.2652, c, -38.7594, e, 444] TJ 
/R10 10.44 Tf 
68.16 0.24 Td 
[", 17.1965, P, -18.7118, i, -9.35592, l, -9.35592, o, -17.2414, t, -9.35636, ", 17.1965, , 250] TJ 

這段代碼告訴查看器呈現單詞「外觀」。 你在這裏看到的是每個單獨的字母被渲染。 語法是<字距信息> <字母> TJ(=文本渲染指令)。

這應該讓你知道用別的東西代替一段文字會有多困難。 如果您縮短現有單詞,則需要再次移動所有其他字母。這個問題被稱爲「迴流」文本。迴流,是不是可以用pdf文件輕鬆完成的東西。要實現迴流,您需要高級別信息(例如哪些單詞屬於哪個段落)。這個級別的信息通常不在pdf文檔中。

正如@mkl所示,如果您只是想刪除文本(也許用黑色框表示它已被刪除),iText肯定可以幫助您。

如果你想覆蓋文本,這是(一般)不可能的。如果您要替換的單詞具有相同的字母,並且您不關心佈局,則可以完成此操作。 (因爲像「iText」這樣的詞可能不會佔用與「Jazzy」相同的空間)。