0

我有一个包含许多填写字段(文本和复选框)的 PDF 文档。你如何去引用这些对象,以便我可以操纵它的值,然后将更新后的 PDF 推送给用户,他们可以将其保存到他们想要的位置。我没有找到任何关于如何做到这一点的好文档。

您能给我的任何信息将不胜感激。

现在我正在使用以下代码,但是当我打开它时,我的 PDF 阅读器告诉我它已损坏或损坏。

            String srcPath = Server.MapPath("~/App_Data/w9.pdf");
        String dstPath = Server.MapPath("~/App_Data/w9_" + Session.SessionID + "_updated.pdf");

        if (File.Exists(dstPath)) {
            File.Delete(dstPath);
        }

        File.Copy(srcPath, dstPath);

        PdfReader reader = new PdfReader(dstPath);

        try
        {
            PdfStamper stamper = new PdfStamper(reader, Response.OutputStream);
            stamper.FormFlattening = true;
            stamper.AcroFields.SetField("topmostSubform[0].Page1[0].f1_01_0_[0]", "Homer J Simpson");

            Response.ContentType = "application/pdf";
            Response.BufferOutput = true;
            Response.AppendHeader("Content-Disposition", "attachment; filename=W9_" +Session.SessionID + "_Complete.pdf");

            Response.TransmitFile(dstPath);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
4

1 回答 1

0

我是 iText 文档的作者。如果你有静态表格,那么你可以使用本章介绍的方法来填写你的表格: http: //www.manning.com/lowagie2/samplechapter6.pdf

阅读第 6.3.5 节,了解如何填写使用 Open Office 创建的表单。但是,看起来好像您使用的是使用 Adob​​e LiveCycle 创建的表单(字段名topmostSubform[0].Page1[0].f1_01_0_[0]是 XFA 表单的典型名称)。

第 6.3.5 节以以下评论结束:

“关于表单还有很多要说的,但在我们讨论注释之前,我们无法进一步详细说明。此外,我还没有谈到不同类型的 PDF 表单:有基于 AcroForm 技术的表单(就像您使用 Open Office 创建的表单),还有 XFA 表单(使用 Adob​​e Designer 创建)。这将不得不等到第 8 章,因为我们还有一组 PDF 操作类要介绍。”

如果您的表单是动态 XFA 表单,内部没有任何 AcroForm 技术,则需要 XFA Worker 将其展平。您可以在此处下载 XFA Worker 的试用版:http: //itextsupport.com/download/xfaworker.html

在继续之前,您必须回答的第一个问题是:我有 AcroForm 还是 XFA 表格?如果您有 XFA 表单,则需要 Adob​​e LiveCycle ES 或 XFA Worker 来填写和展平此类表单。两者都是闭源产品。我不知道任何支持 XFA 扁平化的免费/开源库。

PS:如果“损坏”意味着您收到一条消息说此文档启用了扩展功能......那么您正在破坏阅读器启用。您应该阅读“iText in Action - Second Edition”的第 8 章,了解如何避免出现此消息。

于 2013-01-23T09:45:18.100 回答