当前位置: 首页 > 知识库问答 >
问题:

iText文档

王杰
2023-03-14

我有一个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);
        }

共有1个答案

宰子琪
2023-03-14

我是iText文档的作者。如果您有一个静态表单,那么您可以使用本章中描述的方法来填写您的表单:http://www.manning.com/lowagie2/samplechapter6.pdf

阅读第6.3.5节,了解如何填写使用Open Office创建的表单。但是,看起来您使用的是Adobe LiveCycle创建的表单(topmostsubform[0].page1[0].f1_01_0_[0]等字段名称是XFA表单的典型名称)。

第6.3.5节的结论如下:

“关于表单还有很多要说的,但是在我们讨论了注释之后,我们还不能深入讨论更多细节。另外,我还没有谈到PDF表单的不同类型:有基于AcroForm技术的表单(比如您使用Open Office创建的表单),也有XFA表单(使用Adobe Designer创建的表单)。这将不得不等到第8章,因为我们还有一组PDF操作类要讨论。”

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

在继续之前,您必须回答的第一个问题是:我有一个AcroForm还是一个XFA表单?如果您有一个XFA表单,您将需要Adobe LiveCycle ES或XFA Worker来填充和平整这样的表单。两者都是闭源产品。我不知道任何支持XFA扁平化的自由/开源库。

PS:如果“损坏”是指你收到一条消息,说这个文档启用了扩展功能...则您正在破坏读取器启用。您应该阅读“iText在行动--第二版”的第8章,了解如何避免这条消息。

 类似资料:
  • 我正在为一个项目评估itext,该项目将动态生成的HTML文档转换为pdf文档。XMLWorker完全符合要求。当我的HTML文档包含中文/韩文等字符时,我遇到了问题。 我听说在Itext中,我们可以使用字体而不嵌入它们。我看过FontSelector的例子,FontSelector使我们能够在不嵌入字体的情况下使用字体。生成的pdf提示从adobe网站下载语言包,这就是我想要的。 但我不确定这对

  • 问题内容: 我目前有一个PdfReader和一个PdfStamper,我正在用它们填充acrofields。现在,我必须将另一张pdf复制到我一直填写的表格的末尾,当我这样做时,我会在新表格上丢失acrofield。这是代码。 我创建原始文档的方式是这样的。 有没有一种方法可以使用第一段代码合并并将两个acrofield合并在一起? 问题答案: 根据您的确切需求,可能会出现不同的情况,但是无论如何

  • 问题内容: 在itext中,我有一个块/短语/段落(我不介意哪个),我想将页面上的其他位置放置在例如300 x 200的位置。我该怎么做? 问题答案: 最后,我编写了自己的方法。

  • 我在android和iText上遇到了一些问题,如果有人能帮忙的话。 android应用程序编写多个页面,每个页面包含不同的表。我没有允许一个表跨越一个页面,而是为每个页面添加一个表,并为下一个页面创建一个新表。这样我就可以控制页面总数、页眉和页脚。 我的问题是Android adobe pdf阅读器显示文档很好,正是我正在寻找的。但是,当我在PC上打开一个窗口以访问平板电脑上的 /mnt/sdc

  • 学习如何在Java编程中使用Itext。 以下是示例 - 如何使用Java在PDF中创建表。 如何使用Java为PDF中的表设置背景。 如何使用Java将图像添加到表中。 如何使用Java在PDF中添加列表。 如何使用Java格式化表中单元格的内容。 如何使用Java将嵌套表添加到PDF。 如何使用Java将文本作为段落添加到PDF文档中。 如何使用Java格式化PDF中的文本。 如何使用Java

  • iText 是一个非常著名的能够快速产生 PDF 文件的 Java 类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。 示例代码: // step 1Document document = new Document();// step 2PdfWriter.getInstance(document, new FileOutputStream(filename));// st