2012-10-08 62 views
0

我想替換PDF文檔中的特定文本。我目前使用itextSharp庫來播放PDF文檔。使用itextSharp替換pdf文檔中的文本

我已經從pdfdocument中提取字節,然後替換該字節,然後用字節再次寫入文檔,但它不起作用。在下面的例子中,我試圖用5678替換字符串1234

任何有關如何執行此操作的建議都會有所幫助。

PdfReader reader = new PdfReader(opf.FileNames[i]); 
byte[] pdfbytes = reader.GetPageContent(1); 

PdfString oldstring = new PdfString("1234"); 
PdfString newstring = new PdfString("5678"); 
byte[] byte1022 = oldstring.GetOriginalBytes(); 
byte[] byte1067 = newstring.GetOriginalBytes(); 
int position = 0; 
for (int j = 0; j <pdfbytes.Length ; j++) 
{ 
    if (pdfbytes[j] == byte1022[0]) 
    { 
     if (pdfbytes[j+1] == byte1022[1]) 
     { 
      if (pdfbytes[j+2] == byte1022[2]) 
      { 
       if (pdfbytes[j+3] == byte1022[3]) 
       { 
        position = j; 
        break; 
       } 
      } 
     } 

    } 

} 

pdfbytes[position] = byte1067[0]; 
pdfbytes[position + 1] = byte1067[1]; 
pdfbytes[position + 2] = byte1067[2]; 
pdfbytes[position + 3] = byte1067[3]; 
File.WriteAllBytes(opf.FileNames[i].Replace(".pdf","j.pdf"), pdfbytes); 

回答

2

是什麼讓你覺得1234是頁面內容流的一部分,而不是表單XObject?如果不解析頁面的所有資源,那麼您的代碼通常不會工作。

另外:我看到GetPageContent(),但我沒有看到你在任何地方使用SetPageContent()。如何將變化存儲在PdfReader對象中?

此外,我沒有看到您使用PdfStamper將已更改的PdfReader內容寫入文件。

最後:我很害羞引用Adobe的PDF Architect的Leonard Rosenthol的話,但問他,他會親自告訴你,你不應該做你想做的事。 PDF不是一種編輯格式。閱讀我在iText上撰寫的書的第6章的介紹:http://www.manning.com/lowagie2/samplechapter6.pdf