如何用c#替换PDF中的文本

本文关键字:文本 PDF 替换 何用 | 更新日期: 2023-09-27 18:06:13

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

这是我的一个简单的问题,希望有一个直接的答案。

我有一个PDF文件(一个模板),它创建的文本是这样的:

{名}{姓}{地址}{电话号码}

是否有可能用我选择的文本替换这些模板的c#代码?

没有字段,没有其他复杂的东西。

有任何开源库帮助我实现这一点吗?

如何用c#替换PDF中的文本

这个线程是死的,但是我发布了我的解决方案,为其他迷失的灵魂,可能面临这个问题在未来。不幸的是,我的公司不允许在线发布代码,所以我将描述解决方案:)。

所以基本上你要做的就是使用PdfSharp并修改这个示例来替换流中的文本,但是你必须考虑到文本可能被分割成许多括号(将流转换为字符串以查看格式是什么)。

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

PDF文档的"问题"在于它们天生不适合编辑。尤其是那些没有字段的。最好的方法是后退一步,查看您的流程,看看是否有办法在生成PDF之前替换文本。显然,您可能并不总是拥有这种自由。

如果您将能够替换文本,那么您应该意识到,在被替换的文本之后不会自动回流文本。如果你对此很满意,那么很少有解决方案允许你替换文本。

我知道你在寻找一个开源的解决方案,所以我不愿意给你一个商业的解决方案。我们提供了一个PDFKit.NET。它允许您将页面上的所有内容提取为所谓的形状(文本,图像,曲线等)。参见方法Page。在类型引用中创建eshapes。然后,您可以通过编程方式导航和编辑此形状结构,然后再次将其写回PDF。

如下:http://www.tallcomponents.com/pdfkit

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

对于简单的文本替换使用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();
        }
    }

正如在类似的线程中所述,这不是一个真正可能的简单方法。更简单的方法似乎是获取DocX文件并使用DocX库,该库允许简单的文字交换,然后将DocX转换为PDF(使用PDF Creator打印机或其他)。

或使用pdf sharp/migradoc创建新文档

更新PDF是困难和肮脏的。所以可能是在现有的基础上添加内容也会为你工作,因为它对我有用。如果是这样,这里是我的原始的,但工作的解决方案,涵盖了很多情况("覆盖",确实):

https://github.com/astef/PatchPdfText