2013-01-22 46 views
-1

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

任何信息,你可以给我将不胜感激。

现在我正在使用以下代码,但是当我打开它时,我的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); 
     } 
+0

Jim有很多关于如何在Web上做这个的例子做Google搜索[如何枚举PDF文档中的所有字段](http://stackoverflow.com/questions/3041883/how-do-i -enumerate-所有的字段-IN-A-PDF文件功能于iTextSharp的) – MethodMan

回答

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创建的表单),并且存在XFA表单(使用Adobe Designer创建),该 将必须等到第8章,因为我们还有一组 PDF操作类可供选择。“

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

在继续之前,您必须回答的第一个问题是:我有AcroForm还是XFA表单?如果您有XFA表单,则需要Adobe LiveCycle ES或XFA Worker来填充和平铺此表单。两者都是封闭的来源产品。我不知道任何支持XFA展平的免费/开源库。 PS:如果通过“损坏”,你的意思是你收到一条消息,说This document enabled extended features...,那么你打破了阅读器启用。您应该阅读“iText in Action - 第二版”的第8章,以了解如何避免此消息。