使用没有图像的PDFBox将PDF转换为GREYSCALE?

时间:2018-10-05 17:20:32

标签: java pdf pdf-generation pdfbox

我使用Apache PDFBox,

我想不使用图像方法就将RGB PDF文件转换为另一个GREYSCALE文件,因为它使文件很大-_- !!

这就是我的步骤:

  1. 从Adobe InDesign导出(A4)First.pdf,其中包含图像,文本,矢量对象。

  2. 我阅读了First.pdf文件。完成!

  3. 使用LayerUtility,从First.pdf复制页面,然后旋转页面并将其放入新的PDF文件(A4)Second.pdf。完成!

    • 首选此方法,因为我需要矢量对象来减小尺寸。
  4. 然后,我要将其保存为GREY-SCALE PDF文件(Second-grayscale.pdf)

这是我的代码(不是全部):

PDDocument documentFirst = PDDocument.load("First.pdf"));

// Second.pdf its empty always
PDDocument documentSecond = PDDocument.load("Second.pdf"));

for (int page = 0; page < documentSecond.getNumberOfPages(); page++) {
    // get current page from documentSecond
    PDPage tempPage = documentSecond.getPage(page);

    // create content contentStream
    PDPageContentStream contentStream = new PDPageContentStream(documentSecond, tempPage);

    // create layerUtility
    LayerUtility layerUtility = new LayerUtility(documentSecond);

    // importPageAsForm from documentFirst
    PDFormXObject form = layerUtility.importPageAsForm(documentFirst, page);

    // saveGraphicsState
    contentStream.saveGraphicsState();

    // rotate the page
    Matrix matrix;
    matrix.rotate(Math.toRadians(90));
    contentStream.transform(matrix);

    // draw the rotated page from documentFirst to documentSecond
    contentStream.drawForm(form);

    contentStream.close();
}

// save the new document
documentSecond.save("Second.pdf");

documentSecond.close();
documentFirst.close();

// now convert it to GRAYSCALE or do it in the Loop above!
  

好吧,我本周刚刚开始使用Apache Box,我已经关注了一些   例如,但是大多数是旧的并且不能正常工作,直到现在我还是做了   需要,只需要灰度:)!!

如果Java中还有其他使用开源库的解决方案 或免费工具。 (我在Ghost脚本和Python中找到)

我读了这个例子,但我不明白,有一个不推荐使用的功能!:

https://github.com/lencinhaus/pervads/blob/master/libs/pdfbox/src/java/org/apache/pdfbox/ConvertColorspace.java

关于PDF规范,以及更改色彩空间...

1 个答案:

答案 0 :(得分:0)

据我所知,您提到您会对基于Ghostscript的解决方案感兴趣。 如果您可以从命令行调用GS,则可以使用此命令行进行颜色到灰度的转换

gs -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o out.pdf -f input.pdf

我的答案来自How to convert a PDF to grayscale from command line avoiding to be rasterized?