使用 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();
}
}
}
这将确保每个注释都有外观流,但避免覆盖现有注释。
当我将 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();
}
}
}
这将确保每个注释都有外观流,但避免覆盖现有注释。