如何用C#替换PDF中的文本?

Dat*_*ase 7 c# pdf

我在这里看到了很多解决方案,但没有一个是明确或好的答案.

这是我的简单问题,希望得到一个简单的答案.

我有一个PDF文件(模板),其创建的文本如下:

{FIRSTNAME} {LASTNAME} {ADDRESS} {PHONENUMBER}

是否可以使用C#代码用我选择的文本替换这些模板?

没有领域,没有其他复杂的东西.

有没有任何开源库帮助我实现这一目标?

alb*_*985 8

该线程已死,但是我正在发布我的解决方案,以解决其他将来可能会遇到此问题的迷路者。不幸的是,我的公司不允许在线发布代码,因此我将介绍解决方案:)。

因此,基本上您需要做的是使用PdfSharp并修改此示例以替换流中的文本,但是您必须考虑到文本可能会分成许多括号(将流转换为字符串以查看格式)。

然后,使用与该示例相似的代码逐页遍历源pdf,并通过在PdfReference项目内搜索PdfContent项目并替换内容流中的文本来修改当前页面。


Fra*_*Rem 5

PDF 文档的“问题”在于它们本质上不适合编辑。尤其是没有字段的。最好的办法是回过头来看看你的过程,看看是否有办法在生成 PDF 之前替换文本。显然,您可能并不总是拥有这种自由。

如果您能够替换文本,那么您应该知道替换文本之后的文本不会自动重排。鉴于您对此感到满意,那么很少有解决方案可以让您替换文本。

我知道您正在寻找开源解决方案,所以我不愿意为您提供商业解决方案。我们提供一种称为 PDFKit.NET 的产品。它允许您将页面上的所有内容提取为所谓的形状(文本、图像、曲线等)。请参阅类型参考中的 Page.CreateShapes 方法。然后,您可以以编程方式导航和编辑此形状结构,然后再次将其写回 PDF。

这是:http : //www.tallcomponents.com/pdfkit

披露:我是 TallComponents 的创始人,该组件的供应商


小智 5

对于简单的文本替换,请使用iTextSharp库。将一个字符串替换为另一个字符串的代码如下。请注意,这只会替换简单的文本,并且可能不适用于所有情况。

    //using iTextSharp.text.pdf;
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText)
    {
        using (PdfReader reader = new PdfReader(OrigFile))
        {
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                byte[] contentBytes = reader.GetPageContent(i);
                string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING);
                contentString = contentString.Replace(origText, replaceText);
                reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING));
            }
            new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,即使对于非常简单的 PDF,该解决方案也不起作用。我检查了“contentString”,它根本不包含 PDF 中的任何文本。也许你有更新的版本?我正在使用的 PDF 非常简单,而且搜索的文本也很独特。 (2认同)

Mad*_*Boy 3

正如类似线程中所述,这实际上并不是一种简单的方法。更简单的方法似乎是获取 DocX 文件并使用DocX库,该库允许轻松进行单词交换,然后将 DocX 转换为 PDF(使用 PDF Creator 打印机等)。

或者使用pdf Sharp/migradoc创建新文档。