Java iText:将现有PDF的颜色更改为灰度

Java iText:将现有PDF的颜色更改为灰度,java,pdf,itext,grayscale,Java,Pdf,Itext,Grayscale,目前我们正在使用一个旧版本的iText(2.x)和Java6 我们现在要做的是打开一个现有的PDF,并将其颜色更改为灰度。我找到了方法PdfWriter.setDefaultColorspace(PdfName键,PdfObject cs) 但我真的不知道如何使用它 谁能告诉我,如何正确使用它?或者任何人都知道如何用这个旧的iText版本以另一种方式将PDF更改为灰度 非常感谢 我在这里使用iText 5.5.14实现了代码,但它也应该与iText 2.1.7配合使用,只需进行最小的更改 有两种

目前我们正在使用一个旧版本的iText(2.x)和Java6

我们现在要做的是打开一个现有的PDF,并将其颜色更改为灰度。我找到了方法
PdfWriter.setDefaultColorspace(PdfName键,PdfObject cs)
但我真的不知道如何使用它

谁能告诉我,如何正确使用它?或者任何人都知道如何用这个旧的iText版本以另一种方式将PDF更改为灰度

非常感谢

我在这里使用iText 5.5.14实现了代码,但它也应该与iText 2.1.7配合使用,只需进行最小的更改

有两种方法可以从PDF页面中删除颜色

  • 任何一个都会遍历其内容流中所有与颜色相关的指令,并将其中设置的颜色替换为等效的灰色
  • 或者向每个页面内容流附加指令,以消除现有指令创建的所有页面内容流的颜色饱和度

前一个选项超出了堆栈溢出应答的范围(PDF文件中有许多不同的颜色,嵌入的位图也带来了颜色,并且还必须考虑使用透明和混合模式的影响)。但后一个选项非常容易实现,它通过在混合模式下用灰度覆盖页面饱和度

void dropSaturation(PdfStamper PdfStamper){
PdfGState gstate=新的PdfGState();
gstate.setBlendMode(PdfName.SATURATION);
PdfReader PdfReader=pdfStamper.getReader();

对于(int i=1;i)将现有PDF的颜色更改为灰度是什么意思?是否必须删除所有内部使用的颜色?或者,如果在渲染页面中没有颜色(沿黑白轴除外),这就足够了?在某些情况下,PDF必须以黑白打印。因此,我需要消除PDF中的颜色。“我需要消除PDF中的颜色。”-因此,如果在渲染页面中没有颜色(除了沿黑白轴),这是不够的?我不确定。如果我知道如何做到这一点,我可以尝试两者。但我认为所有颜色的使用都必须删除。
PdfReader pdfReader = new PdfReader(SOURCE_PDF);
PdfStamper pdfStamper = new PdfStamper(pdfReader, RESULT_STREAM);
dropSaturation(pdfStamper);
pdfStamper.close();