Преобразование JAVA pdf в tif с использованием pdfbox-tools- 2.0.3

Я конвертирую файлы pdf в формат tif. Для этого я использую pdfbox-tools
из org.apache.pdfbox версии 2.0.3. Но требуется изменить встроенный класс TIFFUtil.java и MetaUtil.java на общедоступный. Есть ли у нас какой-либо другой способ, с помощью которого это можно было бы сделать вместо того, чтобы касаться классов в банке?

static void saveAsMultipageTIFF1(ArrayList<BufferedImage> bimTab, String filename, int dpi) throws IOException {
    Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
    ImageWriter imageWriter = writers.next();

    ImageOutputStream ios = ImageIO.createImageOutputStream(new File(filename));
    imageWriter.setOutput(ios);
    imageWriter.prepareWriteSequence(null);
    for (BufferedImage image : bimTab) {
        ImageWriteParam param = imageWriter.getDefaultWriteParam();
        IIOMetadata metadata = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image), param);
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        TIFFUtil.setCompressionType(param, image);
        TIFFUtil.updateMetadata(metadata, image, dpi);
        imageWriter.writeToSequence(new IIOImage(image, null, metadata), param);
    }
    imageWriter.endWriteSequence();
    imageWriter.dispose();
    ios.flush();
    ios.close();
}

person Deepa Nagaliker    schedule 04.07.2017    source источник
comment
Текущая версия 2.0.6. Что мешает вам скопировать исходный код двух классов и модифицировать их под свои нужды?   -  person Tilman Hausherr    schedule 04.07.2017
comment
да, мы можем использовать 2.0.6. Но я хотел знать, есть ли у нас какой-нибудь другой способ вместо того, чтобы явно использовать классы из jar?   -  person Deepa Nagaliker    schedule 05.07.2017
comment
Нет, если вы не скопируете источник jar. Это находится в свободном доступе. Кстати, этот код в вашем вопросе показался мне знакомым... ах, да, он взят отсюда: stackoverflow.com/a/31974376/ 535646   -  person Tilman Hausherr    schedule 05.07.2017


Ответы (1)


Вы можете использовать приведенное ниже для преобразования файлов PDF в файлы TIFF.

import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
import org.icepdf.core.exceptions.*;
import org.icepdf.core.pobjects.*;
import org.icepdf.core.util.GraphicsRenderingHints;
public class PDFToTIFF {
private static final String FILEPATH = "<Your PDF File path>/yourPDF.pdf";
public static void main(String[] args) {
      Document document = new Document();
      try {
         document.setFile(FILEPATH);
      } catch (PDFException ex) {
         System.out.println("Error parsing PDF document " + ex);
      } catch (PDFSecurityException ex) {
         System.out.println("Error encryption not supported " + ex);
      } catch (FileNotFoundException ex) {
         System.out.println("Error file not found " + ex);
      } catch (IOException ex) {
         System.out.println("Error IOException " + ex);
      }
      float scale = 3.5f;
      float rotation = 0f;
      for (int i = 0; i < document.getNumberOfPages(); i++) {
         BufferedImage image = (BufferedImage) document.getPageImage(
             i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, rotation, scale);
         RenderedImage rendImage = image;
         try {
            System.out.println(" capturing page " + i);
            File file = new File("Image_" + i + ".tif");
            ImageIO.write(rendImage, "tiff", file);
         } catch (IOException e) {
            e.printStackTrace();
         }
         image.flush();
      }
      document.dispose();
}
}

Если вы хотите установить сжатие и изменить порядок байтов, вы можете сделать это с помощью расширенного плагина ImageIO (TwelveMonkeys ImageIO).

person Vinoth    schedule 12.07.2017
comment
В отличие от кода в вопросе, ваш код ImageIO.write(rendImage, "tiff", file); не создает многостраничные файлы tiff. - person Tilman Hausherr; 13.07.2017