您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用iText Java为整个pdf文档选择文本和背景

使用iText Java为整个pdf文档选择文本和背景

正如我在对问题的最后一条评论中提到的那样,只要将所有颜色反转都足以解决您的任务,那么在混合模式下绘制白色矩形 差异 就可以完成工作:

void invert(File source, File target) throws IOException, DocumentException
{
    PdfReader reader = new PdfReader(source.getPath());
    OutputStream os = new FileOutputStream(target);
    PdfStamper stamper = new PdfStamper(reader, os);
    invert(stamper);
    stamper.close();
    os.close();
}

void invert(PdfStamper stamper)
{
    for (int i = stamper.getReader().getNumberOfPages(); i>0; i--)
    {
        invertPage(stamper, i);
    }
}

void invertPage(PdfStamper stamper, int page)
{
    Rectangle rect = stamper.getReader().getPageSize(page);

    PdfContentByte cb = stamper.getOverContent(page);
    PdfGState gs = new PdfGState();
    gs.setBlendMode(PdfGState.BM_DIFFERENCE);
    cb.setGState(gs);
    cb.setColorFill(new GrayColor(1.0f));
    cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
    cb.fill();

    cb = stamper.getUnderContent(page);
    cb.setColorFill(new GrayColor(1.0f));
    cb.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight());
    cb.fill();
}

invertPage并绘制混合模式的差异上述提到的白reactangle 页面。此外,它通常 页面 下方 绘制一个白色矩形;事实证明,至少对于我在这里使用的Acrobat Reader版本而言,这是必需的。

您可能需要对代码进行一些调整,以使结果更易于阅读。也许混合模式 排除BM_EXCLUSION)更合适,或者其他一些图形状态调整可以改善您的阅读体验。只要有创造力!;)

有关PDF混合模式的一些背景,你可能需要阅读部分11.3.5 混合模式PDF规范ISO 32000-1和研究透明度的相关实例行动iText的- 第二版

PS:此代码仅反转页面内容。注释不受影响。如果结果证明是必要的,则可以执行类似于其外观流的操作。

java 2022/1/1 18:36:45 有380人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶