[英]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();
}
}
}
这将确保每个注释都具有外观流,但避免覆盖现有注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.