Преобразование PDF в GRAYSCALE с использованием PDFBox без изображений? - PullRequest
0 голосов
/ 05 октября 2018

я использую Apache PDFBox,

Я хочу преобразовать файл RGB PDF в другой файл GRAYSCALE БЕЗ метода изображений, потому что он создает огромный размер файла -_- !!

, так что это мойшаги:

  1. Экспорт файла (A4) First.pdf из Adobe InDesign, содержащий изображения, тексты, векторные объекты.

  2. Я прочиталПервый файл .pdf.Готово!

  3. с помощью LayerUtility, скопируйте страницы из First.pdf, поверните их и поместите в НОВЫЙ PDF-файл (A4) Second.pdf.Готово!

    • этот метод предпочтителен, потому что мне нужны векторные объекты для уменьшения размера.
  4. , затем я хочу сохранить его как PDF-файл GREY-SCALE(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, использующие open-Исходная библиотека или бесплатные инструменты.(я нашел с Ghost Script и Python)

Я прочитал этот пример, но я не понял его, и есть функции, которые устарели!:

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

о PDF-спецификациях и изменении цветового пространства ...

1 Ответ

0 голосов
/ 30 октября 2018

Вы упомянули, что вас заинтересует решение на основе Ghostscript, насколько я понял.Если вы можете вызвать GS из командной строки, вы можете выполнить преобразование цвета в оттенки серого с помощью этой командной строки

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

мой ответ взят из Как преобразовать PDF в оттенки серого из командной строки, избегаябыть растеризованным?

...