使用itextSharp替换pdf文档中的文本

时间:2012-10-08 06:46:26

标签: 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);

1 个答案:

答案 0 :(得分:2)

是什么让你觉得1234是页面内容流的一部分,而不是XObject的形式?如果您不解析页面的所有资源,那么您的代码将永远无法正常工作。

另外:我看到GetPageContent(),但我没有看到你在任何地方使用SetPageContent()。如何将更改存储在PdfReader对象中?

此外,我没有看到您使用PdfStamper将更改的PdfReader内容写入文件。

最后:我不好意思引用Adobe的PDF架构师Leonard Rosenthol的话,但问他,他会亲自告诉你,你不应该做你想做的事情。 PDF不是编辑格式。阅读我在iText上写的书第6章的介绍:http://www.manning.com/lowagie2/samplechapter6.pdf