1

以下のコードを使用して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();
        }

myProjectPathpdfファイルのパスです。

問題は、サイズが 305 KB の pdf 画像があることです。上記のコードを使用して画像を変換すると、画像サイズが予想外の 5.5 MB になります。これが起こっている理由は何ですか?これを圧縮する方法はありますか?サイズを圧縮する(ピクセルサイズを小さくする)解決策が得られれば、それもOKです。

注 :その他の pdf ファイルの場合、画像は 305 KB になります。これは 1 つの 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;
4

2 に答える 2

0

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
        }   
    }

OR/AND では、jpg は png ではなく過剰圧縮されるため、それらを jpg としてディスクに保存することもできます。

元の画像のフォーマットを特定し、それをディスクへの書き込み時に使用することもできます。

image.getSuffix();
于 2012-09-25T08:46:39.897 に答える
0

スケールを変更することで、ファイルのサイズを変更できるはずです。多くの場合、PDF はレンダリングされた画像よりもはるかに小さくなります。それらは、レンダリングされたイメージが表現するために多くのバイトを使用するテキストおよびベクトル グラフィックを表すことができます。実際、あなたの png のいずれかが pdf とほぼ同じサイズであることに少し驚いています (pdf が単なる写真でない限り)。

于 2012-09-25T08:27:21.930 に答える