如何在运行中将值插入现有PDF?

时间:2015-12-29 09:21:18

标签: asp.net-mvc-4 pdf itextsharp

有一些带有一些字段的PDF可以接受用户的值(例如:a"生物数据"表格)。我的问题是,如何将用户输入插入现有PDF的正确字段并生成填充的PDF? 如果我使用iTextSharp,那么我如何选择坐标来打印值?

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

2 个答案:

答案 0 :(得分:0)

有两种可能性:

您的原始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。从此PdfContentByte获取PdfStamper对象后,您可以按文档中的说明添加文本。阅读Manipulating existing PDFsAbsolute positioning of text部分,或查看标有关键字PdfStamper的内容。 watermark examples也应该很有趣。

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

答案 1 :(得分:0)

ItextSharp使用ItextSharp的pdfStamper类为您提供相同的功能。 仅供参考。

//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();