PDF 中的注释可以具有所谓的外观流,这是对其外观的明确描述。如果它丢失,那么在查看时,大多数 PDF 阅读器将根据注释的属性生成一个新的外观流。
但是,Chrome 不会生成这些外观流,它只会读取现有的。如果它们丢失,注释将根本不会出现。
另一方面,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();
}
}
}
这将确保每个注释都有一个外观流,但避免覆盖现有的。