【问题标题】:Modify PDF Form Template with dynamic controls使用动态控件修改 PDF 表单模板
【发布时间】:2017-04-09 20:39:27
【问题描述】:

我在这里尝试创建一段代码,该代码将打开带有空控件的现有 PDF 表单(以前使用 Open Office 创建)并使用 iTextSharp () 设置值。我还在测试 iTextSharp,看看它是否能做我需要做的事情,到目前为止答案是否定的。

请根据我在网上找到的,看看我在下面做了什么:

string fileNameExisting = @"PdfTemplate.pdf";
string fileNameNew = @"new.pdf";

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
     // Open existing PDF
     var pdfReader = new PdfReader(existingFileStream);

     // PdfStamper, which will create
     var stamper = new PdfStamper(pdfReader, newFileStream);

     var form = stamper.AcroFields;
     var fieldKeys = form.Fields.Keys;

    foreach (string fieldKey in fieldKeys)
    {
         bool result = form.SetField(fieldKey, "A lot of text here.");
    }

    stamper.Close();
    pdfReader.Close();
}

问题 1

iTextSharp 仅识别 Open Office 中的“控件”元素(例如文本框)。我尝试将表格添加到 PDF 模板,但它没有出现在字段中。这意味着我在使用方面真的很有限。

问题 2

当我在字段中设置文本时,文本没有换行,控件的大小不是动态的,这意味着如果文本太长,它不会全部出现。我不能使用滚动条,因为 PDF 是要打印的。

我试过了

对于第一个问题,我使用 Word 而不是 Open Office Writer 创建了一个 PDF 表单。但是,iTextSharp 无法识别 Word 中的任何控件,我的字段集合是空的..

对于第二个问题,我尝试修改Open Office中控件的每个属性,上网查看是否有人有解决方案。但据我了解,大小是固定的,因为它是 AcroFields,所以我无法使控件动态化,之后也无法使用 iTextSharp 更改大小。

我希望有人经历过同样的情况,并且能够使用 iTextSharp 或其他库来指导我,无论是否免费。虽然我在经营自己的企业,但我买不起 2000 英镑的许可证,但我愿意接受建议,因为我需要交付。 最后一个选项是用 iTextSharp 从头开始​​创建 PDF,但它不像修改那样快速和容易生成,这意味着对于 PDF 的每次更新,公司都需要我更改代码......我对那个解决方案不太满意。

【问题讨论】:

    标签: c# .net pdf itext


    【解决方案1】:

    问题 1:

    表格不是表单域。请阅读 PDF 规范,更具体地说是 ISO-32000-1:

    PDF 中没有 动态表格 这样的东西。这只能在 XFA(它是包装在 PDF 文件中的 XML)中实现,但 XFA 已被弃用。在 iText,我们将在 2017 年 2 月发布用于动态文档的(封闭源代码)产品。

    问题 2:

    仅当字段定义为多行文本字段时,文本才会换行。例如见https://developers.itextpdf.com/question/how-get-row-count-multiline-field

    如果您将字体大小设置为0,则字体大小仅适应字段的大小:Set AcroField Text Size to Auto

    总结:

    动态表单和 PDF 要么需要 XFA,在这种情况下您需要购买 Adob​​e LiveCycle ES(这远远超出您的预算),或者您需要等到 iText Group 发布其动态表单项目(但这也将更加昂贵超过 2000 英镑)。

    【讨论】:

    • 那么我想我将不得不从头开始创建 PDF。感谢您的回答布鲁诺。
    • 是的,有些人使用 HTML / CSS 和 iText 的 XML Worker 的组合来避免编写 PDF。
    • 如果我要购买 LiveCycle 设计器的许可证(不太贵)来制作我的模板,我可以用 iTextSharp 做我需要的事情吗?我使用的是 5.5.9 版
    • 并非如此:如果您想“扁平化”模板(从中制作常规 PDF),您仍然需要 iText 的 XFA Worker,它是 iText 之上的一个闭源插件。您可能想要展平填充的 XFA 模板,因为许多查看者不知道如何渲染 XFA。在这种情况下,您需要为 iTextSharp 和 XFA Worker 购买商业许可证。
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2011-07-08
    • 2017-02-19
    相关资源
    最近更新 更多