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

Add annotations to PDF with PDFTron's PDFNet SDK that chrome pdf viewer can view

当我将 FDFMerge() 注释放入 PDF 并保存时,在 google chrome 的 pdf 查看器中打开 PDF 时,注释不可见。直接从 Acrobat 打开同一文件或在 PDFTron 的 WebViewer 中打开时,注释是可见的。

如果我打开一个已经过 FDFMerge()d 但无法在 chrome 查看器中工作的 PDF,我可以在 acrobat 中打开并保存该文件,此时问题就会消失。

在 FDFMerge() 之后我需要做些什么来使这些注释的行为与 Acrobat 解决方法完全相同吗?是不是有些图层没有完全创建?

PDF 中的注释可以有所谓的外观流,这是对其外观的明确描述。如果它丢失了,那么在查看时,大多数 PDF 阅读器将根据注释的属性生成一个新的外观流。

但是,Chrome不会生成这些外观流,它只会读取现有的。如果缺少,注释将不会出现。

另一方面,Safari 会忽略外观流,并始终根据注释属性生成自己的外观流。

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();
        }
    }
}

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