iText文档

时间:2013-01-22 23:34:01

标签: c# 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 个答案:

答案 0 :(得分:0)

我是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工作人员:http://itextsupport.com/download/xfaworker.html

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

PS:如果受到损坏"你的意思是你收到一条消息说This document enabled extended features...然后你打破了阅读器启用。你应该阅读第34章" iText in Action - Second Edition"找出如何避免这个消息。