有一些带有一些字段的PDF可以接受用户的值(例如:a"生物数据"表格)。我的问题是,如何将用户输入插入现有PDF的正确字段并生成填充的PDF? 如果我使用iTextSharp,那么我如何选择坐标来打印值?
是否有任何设计工具可以设计矩形字段来接受值? 因为我的PDF模板有很多字段可以从用户端获取值。 tnx in adv。
答案 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 PDFs和Absolute 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();