如何即时将值插入现有 PDF?

How to insert values into an existing PDF on the fly?

有一个 PDF,其中包含一些字段以接受来自用户的值(例如:"bio data" 表单)。我的问题是如何将用户输入插入现有 PDF 的正确字段并生成填充的 PDF? 如果我使用 iTextSharp,那么如何选择坐标来打印值?

是否有任何设计工具可以设计矩形字段来接受值? 因为我的 PDF 模板有很多字段可以从用户端获取值。 副词中的 tnx。

有两种可能:

您的原始 PDF 是一个表格:

您可以通过检查 PDF 是否包含此处说明的任何字段来检查这一点:convert pdf editable fields into text using java programming

您需要将 Java 代码调整为 C# 代码,或者您可以使用 RUPS,如我对问题 How to get specific types from AcroFields? Like PushButtonField, RadioCheckField, etc

的回答所示

在这种情况下,填写表格很容易:

PdfStamper pdfStamper = new PdfStamper(new PdfReader(templateFile), new FileStream(fileName, FileMode.Create));
AcroFields acroFields = pdfStamper.AcroFields;

acroFields.SetField(key, value);

pdfStamper.FormFlattening = true;
pdfStamper.Close();

您可以根据需要添加任意多行 SetField()。在这些行中 key 是原始表单中定义的字段名称; value 是您要在该字段的位置添加的值。

带有 pdfStamper.FormFlattening 的行是可选的。如果将该值设置为 true,所有交互性都将被删除:表单将不再是表单。如果您删除该行或将该值设置为 false,则该表单仍将是一个表单。您将能够更改字段的内容并提取字段的值。

您的原始 PDF 不是表格:

PDF 在人眼中可能看起来像一个表单,但如果它没有 AcroForm 字段(也没有 XFA),那么机器就不会将其视为表单。在这种情况下,您必须了解所有内容都固定在页面上的固定坐标处。可以在绝对位置添加内容,但原内容不会移动

向现有 PDF 添加内容的方法有多种,它们都涉及 PdfStamper。从 PdfStamper 获得 PdfContentByte 对象后,您可以按照文档中的说明添加文本。阅读章节 Manipulating existing PDFs and Absolute positioning of text or take a look at the content tagged with the keyword PdfStamper. The watermark examples 应该也很有趣。

我建议不要使用第二种方法,因为很难找到要使用的确切坐标。如果您的 PDF 不是表单,请使用 Adob​​e Acrobat 将其转换为表单并使用第一种方法。第一种方法更适合未来:如果您必须更改表单中的某些内容,则无需更改代码即可更改该表单(前提是您保留原始字段名称)。

ItextSharp 提供你做同样的事情,使用 ItextSharp 的 pdfStamper class。 仅供参考。

//create pdfreader instance and read content of existing PDF file into it, by providing it's path
PdfReader pdfReader = new PdfReader(FILE_PATH);

// create stamper instance to edit the exiting file
PdfStamper pdfStamper = new PdfStamper(pdfReader, Response.OutputStream);

// perform your edit operation here.....
    .
    .
    .
// close pdfStamper instance
stamper.Close();