Asp.net mvc 4 如何在现有PDF中动态插入值?

Asp.net mvc 4 如何在现有PDF中动态插入值?,asp.net-mvc-4,pdf,itextsharp,Asp.net Mvc 4,Pdf,Itextsharp,有一个PDF,其中包含一些字段以接受用户提供的值(例如:“生物数据”表单)。我的问题是,如何将用户输入插入现有PDF的正确字段并生成填充的PDF? 如果我使用iTextSharp,那么如何选择坐标来打印值 是否有设计工具来设计矩形字段以接受值? 因为我的PDF模板有很多字段可以从用户端获取值。 广告中的tnx有两种可能性: 您的原始PDF是一个表单: 您可以通过检查PDF是否有如下所述的字段来检查: 您需要将Java代码改编为C代码,或者您可以使用RUP,如我对问题的回答所示 在这种情况下,填写

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

是否有设计工具来设计矩形字段以接受值? 因为我的PDF模板有很多字段可以从用户端获取值。
广告中的tnx有两种可能性:

您的原始PDF是一个表单:

您可以通过检查PDF是否有如下所述的字段来检查:

您需要将Java代码改编为C代码,或者您可以使用RUP,如我对问题的回答所示

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

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()
可以有任意多行。在这些行中,
是原始表单中定义的字段名<代码>值是要在该字段的位置添加的值

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

您的原始PDF不是表单:

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

向现有PDF添加内容的方法有很多种,它们都涉及到
PdfStamper
。从该
PdfStamper
获取
PdfContentByte
对象后,您可以按照文档中的说明添加文本。阅读这些章节,或者看一下用关键字标记的内容。这本书也应该很有趣


我建议不要使用第二种方法,因为很难找到要使用的精确坐标。如果您的PDF不是表单,请使用Adobe Acrobat将其转换为表单,然后使用第一种方法。第一种方法更适合未来:如果您需要更改表单中的某些内容,您可以在不必更改代码的情况下更改表单(前提是保留原始字段名)。

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