【问题标题】:Write XMP data to an existing PDF in C#在 C# 中将 XMP 数据写入现有 PDF
【发布时间】:2018-01-17 16:21:25
【问题描述】:

我在使用 iTextSharp 库将 XMP 元数据写入 c# 中的现有 pdf 文件时遇到问题。这是我所拥有的,但它不起作用。任何建议

string src = @"C:\test\Test Artifact Document.pdf";

PdfReader reader = new PdfReader(src);


using (MemoryStream ms = new MemoryStream())
{
    using (PdfStamper stamper = new PdfStamper(reader, ms))
    {
         Dictionary<String, String> info = reader.Info;
         using (MemoryStream msXmp = new MemoryStream())
         {
               XmpWriter xmp = new XmpWriter(msXmp, info);
               xmp.SetProperty(XmpConstants.NsDC, "Firm", "FBI");

               xmp.Close();
               stamper.XmpMetadata = msXmp.ToArray();
         }
     }            
}

提前致谢!

【问题讨论】:

  • 有什么问题?结果与您的预期有何不同?
  • 它不工作。当我执行时,文件没有被修改。

标签: c# pdf itext xmp


【解决方案1】:

我认为问题在于代码没有保存更改。 Stamper 会将更改写入 MemoryStream 中,如果您不将其保存到文件中,则表示您没有保存它们。

        string src = @"C:\test\Test Artifact Document.pdf";

        PdfReader reader = new PdfReader(src);


        using (MemoryStream ms = new MemoryStream())
        {
            using (PdfStamper stamper = new PdfStamper(reader, ms))
            {
                Dictionary<String, String> info = reader.Info;
                using (MemoryStream msXmp = new MemoryStream())
                {
                    XmpWriter xmp = new XmpWriter(msXmp, info);
                    xmp.SetProperty(XmpConstants.NsDC, "Firm", "FBI");

                    xmp.Close();
                    stamper.XmpMetadata = msXmp.ToArray();
                }
                stamper.Close();
            }
            File.WriteAllBytes(@"C:\test\Test Artifact Document (1).pdf", ms.ToArray());
        }

免责声明:这是我第一次在这里回答等等等等……不要太苛刻。我只是回答它,因为 google 把我带到这里几次,我不能忍受看到它没有回答了。

【讨论】:

    【解决方案2】:

    我没有足够的代表发表评论。

    在此处查看此答案: Read/Modify PDF Metadata using iTextSharp without showing any data to user on pdf properties

    我会首先尝试立即从您的元数据字段中读取值,然后看看您会得到什么。可能是您已经更新了内存流中的 pdf,但有些东西阻止了它被保存。

    【讨论】:

    • 谢谢,这是我开始时的帖子,但已根据我的需要进行了修改。那是行不通的哈哈
    • 要明确...您的外部内存流 (ms) 更新了吗?如果是这样,您需要在它关闭和处理之前把它放在某个地方。这个答案解决了一个不同的问题,但说他可以用他的代码编辑和打印。如果您的内存流没有更新,您是否会收到任何类型的错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多