iTextSharp从现有PDF模板生成PDF

时间:2011-06-08 11:02:09

标签: c# pdf itextsharp

我正在研究使用C#和iTextSharp创建内容的可行性,它可以采用PDF模板并将各种占位符值替换为从数据库中检索的实际值。基本上是PDF邮件合并。我有iText的动作书,但它涵盖了很多我不需要的东西,我很难找到任何与我想做的事情有关的东西。我很乐意使用PDF字段作为占位符,只要合并/展平的表单看起来不像它有字段,输出文档应该看起来像邮件合并字母而不是已填写的表单。一个理想的世界我只想搜索PDF的文本内容,然后用正确的字段值替换文本占位符和邮件合并。

任何人都可以告诉我这方面的最佳方法,并指出我要使用的最有用的iTextSharp类的方向,或者如果你知道动作中的iText预订了一个指向我最有用的部分的指针。< / p>

1 个答案:

答案 0 :(得分:9)

  1. 在您选择的页面布局/文本编辑器中构建模板sans字段。
  2. 保存为PDF。
  3. 打开该PDF并向其添加字段。这在Acrobat Pro中很容易(如果需要,您可以下载试用版)。在iText中也可能更难。
  4. 在任何一种情况下,您都希望将表单字段设置为没有边框,并且没有背景......这样只会显示其内容,没有框可以使您的字段看起来像字段

    将字段数据合并到一个表单中是非常简单的iText(原谅我的Java,我对C#不太了解):

    void fillPDF( String filePath, Map<String, String> fieldVals ) {
      PdfReader reader = new PdfReader(myFilePath);
    
      PdfStamper stamper = new PdfStamper( reader, outputFileStream );
      stamper.setFormFlattening(true);
    
      AcroFields fields = stamper.getAcroFields();
    
      for (String fldName : fieldVals.keySet()) {
        fields.setField( fldName, fieldVals.get(fldName) );
      }
    
      stamper.close();
    }
    

    这会忽略具有多个选择(和例外)的列表框,但除此之外应该准备好了。鉴于你正在做一个邮件合并类型的事情,我不认为多个选择会成为一个问题。