我能够成功使用以下代码突出显示现有PDF中的文字:
private static void highlightDiff(PdfStamper stamper, Rectangle rectangle, int page)
{
float[] quadPoints = { rectangle.Left, rectangle.Bottom, rectangle.Right, rectangle.Bottom, rectangle.Left, rectangle.Top, retangle.Right, rectangle.Top };
PdfAnnotation highlight = PdfAnnotation.CreateMarkup(stamper.Writer, rectangle, null, PdfAnnotation.MARKUP_HIGHLIGHT, quadPoints);
highlight.Color = BaseColor.RED;
stamper.AddAnnotation(highlight, page);
}
问题是我一次突出显示字符,我猜每次调用此函数时都会添加一个新层,因为在程序运行完毕后生成的文件大小要大得多。
我试着在函数的末尾添加以下行,也许它只是我,但它似乎加快了我去查看它时加载PDF的时间,但文件的大小仍然存在非常大。
stamper.FreeTextFlattening = true;
我可能会尝试让我的代码更有效率并减少我调用的次数(如果我突出显示的字符彼此相邻,找到组合矩形并调用)但是想知道是否还有其他方法这个。提前谢谢!
答案 0 :(得分:1)
每次执行highlightDiff
时,都会向PDF添加新的突出显示注释。在PDF内部,这样的注释是这样的对象:
1 0 obj
<<
/Rect[204.68 705.11 211.2 716.11]
/Subtype/Highlight
/Contents()
/QuadPoints[204.68 716.11 211.2 716.11 204.68 705.11 211.2 705.11]
/C[1 0 0]
/P 2 0 R
>>
此外,需要从页面描述中添加对象以及内部交叉引用中的条目。
因此,每次这样的调用都会使PDF增长近200个字节。如果你突出显示许多这样的单个字符,那么文件确实会大大增加。
我可能会尝试让我的代码更有效率并减少我拨打的电话数量(如果我突出显示的字符彼此相邻,找到组合的矩形和调用)但是想知道是否还有另一个解决这个问题。
如果您确实希望使用突出显示注释来完成突出显示,则无法解决此问题。
另一方面,如果您还接受在常规页面内容中绘制的突出显示矩形,则使用该方法可能会看到较少的文件大小增长。尽管如此,首先组合相邻的矩形会大大减少文件大小(以及PDF查看器资源需求)。