【问题标题】:How can I save the memory stream of a pdf annotation from PDFTron?如何从 PDFTron 保存 pdf 注释的内存流?
【发布时间】:2020-06-15 14:14:55
【问题描述】:

我已经阅读了一些关于 pdf 格式的文章,我想从 pdf 文档中读取注释并将其外观和数据保存到数据库中。

因此我发现,注释完全由它的“流”表示,我期望一个二进制数组,每个 pdf 查看器都将其转换为正确的外观。 但是如何使用 PDFTron 等 SDK 提取这些信息?

或者我应该为每个注释设计一个正确的模型来手动提取一个注释的最重要的值?

您好,感谢您的回答!

【问题讨论】:

  • “我希望是一个二进制数组” - 它更复杂。 pdf流不仅包含blob,还包含字典,其中的值又可以是复杂对象,特别是pdf流也可能具有复杂的字典值等。
  • 以下解决方案对您有用吗?

标签: c# pdf annotations appearance pdftron


【解决方案1】:

很好的问题。

注解完全由其“流”表示 外观流是的,但是注释有很多元数据,例如创建和上次修改日期、作者、位置+大小、标志和定义外观的属性。

幸运的是,PDF ISO 格式描述了一种在 PDF 格式之外交换注释的方法。这是通过 FDF 格式完成的,它只是一个只有注释信息(或表单域)的 PDF。

FDF 数据将包含包括外观流在内的所有注释信息。

使用 PDFNet,您可以使用 FDFExtract 以这种方式导出注释。

ArrayList annotations = new ArrayList();
annotations.Add(annot);
FDFDoc fdfdoc = pdfdoc.FDFExtract(annotations);
fdfdoc.Save(tempFileLocation);
byte[] data = System.IO.File.ReadAllBytes(tempFileLocation);

注意,目前你必须先写入磁盘,但为了方便可以添加一个直接返回字节[]的FDFDoc.Save() api。

然后您只需使用以下代码导入即可。

FDFDoc fdfdoc = new FDFDoc(data, data.Length);
pdfdoc.FDFMerge(fdfdoc);

有关 FDF 使用的更多示例,请参阅此示例。 https://www.pdftron.com/documentation/samples/cs/FDFTest

使用 FDF 存储注释的一个好处是您没有供应商锁定,格式是完全定义的。

【讨论】:

  • 嘿。感谢您的回答!我会在几个小时后试一试,然后告诉你我的结果!
  • 效果很好!从列表中提取每个注释有点复杂,但不是如何,只是它起作用了!非常感谢!
  • @penc 你介意将其标记为答案吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 2014-09-22
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多