2012-10-08 61 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