iText文档

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

2 years ago

我是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操作类需要覆盖 . “

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

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

PS:如果通过"damaged"你的意思是你得到一条消息说This document enabled extended features...那么你打破了读取器启用 . 您应该阅读"iText in Action - Second Edition"的第8章,了解如何避免此消息 .