使用PDF pdf查看器可以查看的PDFTron的PDFNet SDK向PDF添加注释

时间:2016-05-03 15:31:12

标签: google-chrome annotations pdftron pdfnet

当我将PDF注释到FDFMerge()并保存时,在Google Chrome浏览器的pdf查看器中打开PDF时,注释是不可见的。直接从acrobat打开相同文件或在PDFTron的WebViewer中打开时,注释是可见的。

如果我打开一个已经使用FDFMerge()但不能在chrome viewer中工作的PDF,我可以打开并在acrobat中保存文件,此时问题就会消失。

在FDFMerge()之后我需要做些什么才能使这些注释的行为与acrobat的解决方法完全相同?某些图层是否未完全创建?

1 个答案:

答案 0 :(得分:2)

PDF中的注释可以具有所谓的外观流,这是对其外观的明确描述。如果缺少,则在查看时,大多数PDF阅读器将根据注释的属性生成新的外观流。

但是,Chrome不会生成这些Appearance Streams,它只会读取现有的Streams Streams。如果它们丢失,则注释根本不会出现。

另一方面,Safari会忽略Appearance Stream,并始终根据Annotation属性生成自己的。

Acrobat检测到没有外观流,并添加它,这就是在使用Acrobat保存后Chrome中的注释显示的原因。

要回答您的实际问题,请在FDFMerge之后添加以下代码。

PageIterator itr = doc.GetPageIterator();
for (; itr.HasNext(); itr.Next())
{
    System.Console.WriteLine("Page {0:d}: ", itr.GetPageNumber());

    Page page = itr.Current();
    int num_annots = page.GetNumAnnots();
    for (int i=0; i<num_annots; ++i)
    {
        Annot annot = page.GetAnnot(i);
        if (annot.IsValid() == false) continue;
        if (annot.GetAppearance() == null)
        {
           // generate missing appearance
           annot.RefreshAppearance();
        }
    }
}

这将确保每个注释都有一个外观流,但避免覆盖现有注释。