在C#中使用iTextSharp编辑时如何避免双引号加起来作者元数据字段

时间:2015-01-31 13:12:09

标签: c#-4.0 itextsharp

如何在C#中使用iTextSharp编辑时避免使用双引号添加到作者元数据字段?

e.g。我正在将author1; author2传递给iTextSharp,但在编辑完成后。 PDF元数据显示“author1; author2”

1 个答案:

答案 0 :(得分:1)

<强>更新

我已将此问题发送给Adobe,我几乎立即收到了答案:

  

报价是一个长期存在的问题,但100%正确并且有一个原因。他们将“Lowagie,Bruno”作为单一条目与Lowagie区别开来,Bruno作为两位独立作者出现。

既然我理解了添加引号的原因,我已经做了一些进一步的调查,我用这个答案与Adobe分享我的发现:

改编答案:

目前,iTextSharp实现了您的请求:

  • (Author 1; Author 2)作为/Author条目添加到信息词典中。
  • 在XMP元数据流中添加<dc:creator><rdf:Seq><rdf:li>Author 1, Author 2</rdf:li></rdf:Seq></dc:creator>

因此,Adobe Acrobat / Reader会显示如下元数据:

"Author 1; Author 2"

换句话说:Adobe添加双引号。这可以在此处查看:no_distinction_between_authors.pdf

这种方法有两个缺点:

  1. Adob​​e Acrobat / Reader添加双引号。
  2. 好像只有一位作者。如果要添加双引号,可以预期&#34;作者1&#34 ;; &#34;作者2&#34;。
  3. 为什么你认为这是一个iTextSharp错误:

    可以预期iText会像这样添加作者的姓名:

    • (Author 1; Author 2)作为/Author条目添加到信息词典中。
    • 在XMP元数据流中添加<dc:creator><rdf:Seq><rdf:li>Author 1</rdf:li><rdf:li>Author 2</rdf:li></rdf:Seq></dc:creator>

    这当然看起来比以前更正确,因为你现在有两个作者的两个列表项而不是两个作者的单个列表项。

    不幸的是,Adobe Acrobat / Reader现在会显示作者的姓名:

    "Author 1; Author 2"; Author 2
    

    这看起来完全错了,但如果你看一下PDF(引擎盖下),所有数据都是正确的。这在此处得到证明:display_not_OK_pdfa_broken.pdf

    这种方法有两个缺点:

    1. “文档属性”对话框中作者的显示是奇数。
    2. 此方法打破了PDF / A.
    3. 如何解决此问题以使Adobe Acrobat / Reader感到满意:

      可以让Adobe Acrobat / Reader正确显示作者:

      • (Author 1)作为/Author条目添加到信息词典中。
      • 在XMP元数据流中添加<dc:creator><rdf:Seq><rdf:li>Author 1</rdf:li><rdf:li>Author 2</rdf:li></rdf:Seq></dc:creator>

      现在,当您查看Adobe Acrobat / Reader中的元数据时,您会看到:

      Author 1; Author 2
      

      这实际上是Adobe Acrobat在您手动添加几个作者时所执行的操作,以分号分隔。报价已经消失,外面看起来一切都很好。

      这在以下证明:

      这种方法的一个主要缺点是,在使用此方法时,您无法满足PDF / A合规性。如果您查看我们已更改的内容,您会看到我们从信息词典中删除了作者2,而我们将作者2保留在XMP元数据中。

      不仅删除信息(实际上,因为XMP优先于信息字典而不是那么糟糕),但在PDF / A的上下文中也不允许这样:信息字典中的元数据需要与XMP流中的元数据相同,或者Adobe Acrobat中的PDF / A验证失败。

      在我看来,Acrobat做错了。

      我对Adobe的建议:

      看看correct_but_display_not_OK_pdfa_broken.pdf

      当我查看PDF时,数据似乎反映了人们对现实世界的期望:

      • 信息词典中的作者条目如下所示:"Author 1"; "Author 2"。即使作者姓名中有标点符号,不同作者之间的区别也是正确的。这符合我从Adobe收到的解释。
      • 在XMP元数据中,我们有<dc:creator><rdf:Seq><rdf:li>Author 1</rdf:li><rdf:li>Author 2</rdf:li></rdf:Seq></dc:creator>,这正是我们想要的:两个不同作者的两个不同列表项。

      不幸的是,尽管作者现在以明确的方式存储在PDF中,无论是在信息字典还是XMP流中,Adobe Acrobat / Reader都以一种相当尴尬的方式将它们可视化:

      """Author 1""; ""Author 2"""; Author 2
      

      这不是人们所期望的,因此:

      您有两种选择:

      1. 您应用可以找到的修补程序here。在这种情况下,您决定Adobe Acrobat / Reader显示元数据的方式比元数据存储在PDF中的方式更重要。因此,您无法支持PDF / A.
      2. 您认为PDF的内部结构比Adobe Acrobat / Reader显示作者的方式更重要,您可以容忍Adobe在元数据对话框中显示元数据时添加的双引号。
      3. 在任何情况下:iText(夏普)都不会添加引号。当您查看PDF内部时,没有双引号。引号由PDF查看器添加,由PDF生成器添加。