【问题标题】:itextSharp: Mistake in Loading XMP in PDF with C#itextSharp:使用 C# 在 PDF 中加载 XMP 的错误
【发布时间】:2014-06-30 15:42:43
【问题描述】:

我正在使用 iTextSharp 在 PDF 文件中加载 XMP

参考:Is it possible to load XMP file in PDF using iTextSharp?

根据上面的说明,我在 PDF 文件中加载了 XMP 数据,但是有一个问题

在关键字部分"; " 分号和单个空格默认添加在前缀中,如下图所示。

PDF 属性窗口:

我用来加载的 XMP 示例:

我使用源代码来解决这个问题,但我不能,我仍然只是在搜索。在我想让你知道 iTextSharp 作者之前,所以只发布这个问题。

注意:

如果我通过

设置关键字字典
Dictionary<String, String> info = reader.Info;
info.Add("Keywords", ",key1; key2");

它工作正常。

【问题讨论】:

  • 您使用的是哪个版本的 iText?
  • 我是最初的 iText 开发人员,我能够通过创建一个不完整的 XMP 文件来重现您的问题。使用 iText 5.5.0 之前的 iText 版本创建的 XMP 文件也会出现此问题。从 iText 5.5.0 开始,这个问题就解决了。
  • 我在 v-5.4.3.0 和 v-5.5.1.0 中试用过
  • 是的,但问题不是由 iText 引起的。这是由您创建 XMP 的方式造成的。
  • 好吧,布鲁诺,但我有一些建议,请参阅下面的回答评论

标签: itextsharp itext


【解决方案1】:

问题可能是由您添加的 XMP 文件引起的。 Adobe Reader 正在根据pdf:Keywords 属性中存在或缺失的内容,为您在&lt;dc:subject&gt; 中定义的关键字添加额外内容。

请看一下这个例子:xmp_metadata_added.pdf

XMP 文件如下所示:

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.0-jc003">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about=""
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
        xmlns:xmp="http://ns.adobe.com/xap/1.0/"
      dc:format="application/pdf"
      pdf:Keywords="Metadata, iText, PDF"
      pdf:Producer="iText® 5.5.1 ©2000-2014 iText Group NV (AGPL-version); modified using iText® 5.5.1 ©2000-2014 iText Group NV (AGPL-version)"
      xmp:CreateDate="2014-05-16T17:04:59+01:00"
      xmp:CreatorTool="My program using iText"
      xmp:ModifyDate="2014-05-16T17:04:59+01:00"
      xmp:MetadataDate="2014-05-16T17:04:59+01:00">
      <dc:description>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">This example shows how to add metadata</rdf:li>
        </rdf:Alt>
      </dc:description>
      <dc:creator>
        <rdf:Seq>
          <rdf:li>Bruno Lowagie</rdf:li>
        </rdf:Seq>
      </dc:creator>
      <dc:subject>
        <rdf:Bag>
          <rdf:li>Metadata</rdf:li>
          <rdf:li>iText</rdf:li>
          <rdf:li>PDF</rdf:li>
        </rdf:Bag>
      </dc:subject>
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">Hello World example</rdf:li>
        </rdf:Alt>
      </dc:title>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>

你认出:

<dc:subject>
    <rdf:Bag>
        <rdf:li>Metadata</rdf:li>
        <rdf:li>iText</rdf:li>
        <rdf:li>PDF</rdf:li>
    </rdf:Bag>
</dc:subject>

但是你看到了吗:

pdf:Keywords="Metadata, iText, PDF"

你也需要那个部分。

这是该部分的屏幕截图:

当我删除pdf:Keywords="Metadata, iText, PDF"时,我可以重现你的问题:

这证明您的问题是由您的 XMP 文件引起的,不是由 iText 引起的。

【讨论】:

  • 好吧,没问题,这是我自己的建议,为什么我们不能在分配给具有默认分隔符的相应字段之前修剪字符串内容,例如 value = value.TrimStart(';');value = value.TrimEnd(';');value = value.Trim();
  • 没有 ; 是由 iText 添加的。 PDF 中没有 ;; 由 Adob​​e Reader 在查看文档时添加。因此,我假设(或建议)您不会将此评论指向 iText,而是指向 Adob​​e。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多