使用 iTextSharp 突出显示文本,减少对 PDF 文件大小的影响

本文关键字:PDF 文件大小 影响 iTextSharp 显示 文本 使用 | 更新日期: 2023-09-27 18:34:44

我能够成功地使用以下代码来突出显示现有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;

可能会尝试使我的代码更有效率并减少我进行的调用次数(如果我突出显示的字符彼此相邻,请找到组合的矩形并调用(,但想知道是否有另一种解决方法。提前感谢!

使用 iTextSharp 突出显示文本,减少对 PDF 文件大小的影响

每次执行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查看器资源需求(。