2013-05-30 81 views
1

基本上,我所拥有的是带有复制/粘贴(其中超过700个:/)创建的表单域的PDF。问题是,Acrobat让所有具有相同名称的字段具有相同的值。这是一个问题,我希望每个领域都有独特的价值。 (除了手动重命名所有700个字段外,Acrobat软件不提供任何解决方案)使用iTextSharp读取和重命名具有相同名称的多个字段

我搜索了一下,发现了一个C#库iTextSharp。我需要一些帮助使用它,谷歌的搜索没有回复太多的答案...

此代码只返回一个字段,这是我复制/粘贴字段...不是个别字段。

PdfReader reader = new PdfReader("p31.pdf"); 
     using (FileStream fs = new FileStream("Test Out.pdf", FileMode.Create)) { 
      PdfStamper stamper = new PdfStamper(reader, fs); 
      AcroFields fields = stamper.AcroFields; 

      foreach(KeyValuePair<string, AcroFields.Item> kpv in fields.Fields) 
      { 
       System.Console.WriteLine(kpv.Key); 
      } 

      stamper.Close(); 
     } 

如何获得每个字段然后重命名它们?谢谢

+1

如果他们有相同的名称,他们**是**相同的领域,只是它的不同可视化。这就是Adobe和itext处理它的原因。这就是说,尽管AcroFields只允许你将它们全部作为单个字段来处理,但更多的低级方法允许你通过直接的PDF对象操作来改变名称。 – mkl

+0

是的,迈克尔+1。这只能通过在最底层的操作来实现。这只能由PDF的人很好,所以请不要问“你能给我代码示例吗?”你必须聘请某人来做这件事,或者开始阅读ISO-32000-1。 –

回答

0
PdfReader reader = new PdfReader("OriginalPDF"); 
PdfCopyFields copier = new PdfCopyFields(new FileStream("NewPDF", FileMode.Create)); 
int doc = 0; 
foreach (var item in reader.AcroFields.Fields) 
    if (item.Key.IndexOf("NameField") != -1) 
    reader.AcroFields.RenameField(item.Key, "NameField" + (doc++)); 
copier.AddDocument(reader, "1"); 



//Now you have finalPDF wiith Namefield1,Namefield2,Namefield3.... 
+0

如果你更彻底地阅读了这个问题,你会发现OP想要完全不同的东西。他不希望阻止创建您的代码所做的重复字段名称。他有一个PDF格式,其中已经有很多重复名称的字段,他想在事实之后去除它们。 – mkl

相关问题