PDF в изображение конвертировать изображение большого размера

Я использую код ниже, чтобы преобразовать PDF в изображение PNG.

        Document document = new Document();
        try {
            document.setFile(myProjectPath);
            System.out.println("Parsed successfully...");
        } 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 handling PDF document " + ex);
        }

        // save page caputres to file.
        float scale = 1.0f;
        float rotation = 0f;

        // Paint each pages content to an image and write the image to file
        InputStream fis2 = null;
        File file = null;
        for (int i = 0; i < 1; i++) {
            BufferedImage image = (BufferedImage) document.getPageImage(i,
                    GraphicsRenderingHints.SCREEN,
                    Page.BOUNDARY_CROPBOX, rotation, scale);
            RenderedImage rendImage = image;
            // capture the page image to file
            try {
                System.out.println("\t capturing page " + i);
                file = new File(myProjectActualPath + "myImage.png");
                ImageIO.write(rendImage, "png", file);
                fis2 = new BufferedInputStream(new FileInputStream(myProjectActualPath + "myImage.png"));
            } catch (IOException ioe) {
                System.out.println("IOException :: " + ioe);
            } catch (Exception e) {
                System.out.println("Exception :: " + e);
            }
            image.flush();
        }

myProjectPath путь к файлу PDF

Проблема в том, что у меня есть изображение PDF размером 305 КБ. Когда я использую приведенный выше код для преобразования изображения, размер изображения составляет 5,5 МБ, что является неожиданным. Есть причина, почему это происходит? Есть ли способ сжать это? Если я получу решение сжать размер (уменьшив размер в пикселях), это тоже нормально.

Примечание. Для других PDF-файлов размер изображения составляет 305 КБ. Это происходит с одним файлом PDF и не уверен, почему это происходит.

Редактировать 1

Я использую файлы JAR как

icepdf-core.jar
icepdf-viewer.jar

Импорт, который у меня есть,

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;

2 ответа

Решение

Вы можете извлечь изображения из PDF (например, используя PDFBox):

    List<PDPage> pages = document.getDocumentCatalog().getAllPages();
    for(PDPage page : pages) {
        Map<String, PDXObjectImage> images = page.getResources().getImages();

        for(PDXObjectImage image : images.values()){
            //TODO: write image to disk
        }   
    }

ИЛИ / И вы можете сохранить их как jpg на диск, так как сжатие jpg overs, а не png.

Вы даже можете определить формат оригинального изображения и использовать его при записи на диск, вызвав:

image.getSuffix();

Вы должны быть в состоянии изменить размер файла, изменив масштаб. PDF-файлы часто намного меньше, чем визуализированные изображения. Они могут представлять текстовую и векторную графику, которую визуализированное изображение будет использовать много байтов для представления. Я на самом деле несколько удивлен, что любой из ваших pngs имеет примерно такой же размер, как pdfs (если pdfs не являются просто изображениями).

Другие вопросы по тегам