PDFBox转换现有pdf的颜色空间

PDFBox转换现有pdf的颜色空间,pdf,pdfbox,color-space,Pdf,Pdfbox,Color Space,问题: 我有一个现有的pdf,其中有一些图像和文本。此pdf具有混合颜色空间RGB和CMYK。我想把它转换成单色空间pdf最好转换成CMYK 使用:PDFBox 2.0.4 PDFBox具有PDPageContentStream,可用于在向现有pdf添加数据时更改添加颜色空间,如下所示: PDDocument document = PDDocument.load(myPdfWithMixColorSpace); PDPage pdPage = document.getPage(0

问题: 我有一个现有的pdf,其中有一些图像和文本。此pdf具有混合颜色空间RGB和CMYK。我想把它转换成单色空间pdf最好转换成CMYK

使用:PDFBox 2.0.4

PDFBox具有
PDPageContentStream
,可用于在向现有pdf添加数据时更改添加颜色空间,如下所示:

    PDDocument document = PDDocument.load(myPdfWithMixColorSpace);
    PDPage pdPage = document.getPage(0);
    PDPageContentStream imageContentStream = new PDPageContentStream(document, page);

    imageContentStream.setNonStrokingColor(0, 0, 0, 255); // for cmyk color space

    imageContentStream.beginText();
    imageContentStream.setFont(PDType1Font.TIMES_ROMAN, 20.15f);
    imageContentStream.newLineAtOffset(13.55f, 50f);
    imageContentStream.showText("this is test");
    imageContentStream.endText();

    imageContentStream.close();  
    document.save("D:\\newPDF.pdf");
    document.close();
newPDF.pdf
以CMYK颜色添加文本,但我不想在现有pdf上添加CMYK颜色的文本或图像,而是转换输入pdf本身所有内容的颜色空间

总之,我想要的是:

给定一个pdf,其中包含图像和文本的混合颜色空间

然后使用pdfbox


为所有内容创建新pdf或使用cmyk颜色空间更新现有pdf

狡猾。如果只是RGB,您可以解析内容令牌,如源代码下载中的RemoveAllText.java示例所示。然后用适当的CMYK运算符和参数替换这些运算符和参数。(参见PDF规范中的“操作员摘要”,查找rg和rg,替换为k和k。(也有其他方法获得RGB颜色)更难的是图像。您必须将图像转换为CMYK,然后替换流及其属性…这肯定不是一天完成的。事实上,对于堆栈溢出问答格式来说,太宽了。