我正在寻找一个pdf文件,将每页的背景颜色设置为黑色,所有文本设置为白色。
对我来说最简单的方法是什么?是否有一个api调用来选择每个页面的背景和文件中的所有文本?还是我必须以某种方式遍历每个页面?
正如我在对问题的最后一条评论中提到的那样,只要将所有颜色反转都足以解决您的任务,那么在混合模式下绘制白色矩形 差异 就可以完成工作:
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版本而言,这是必需的。
invertPage
您可能需要对代码进行一些调整,以使结果更易于阅读。也许混合模式 排除 (BM_EXCLUSION)更合适,或者其他一些图形状态调整可以改善您的阅读体验。只要有创造力!;)
BM_EXCLUSION
有关PDF混合模式的一些背景,你可能需要阅读部分11.3.5 混合模式 在PDF规范ISO 32000-1和研究透明度的相关实例的行动iText的- 第二版。
PS:此代码仅反转页面内容。注释不受影响。如果结果证明是必要的,则可以执行类似于其外观流的操作。