PDF到图像转换高大图像

时间:2012-09-25 08:22:10

标签: java pdf icepdf

我使用下面的代码将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文件的路径。

问题是我有大小为305 KB的pdf图像。当我使用上面的代码转换图像时,图像大小是5.5 MB,这是意想不到的。出现这种情况的原因是什么?有没有办法压缩这个?如果我得到压缩尺寸的解决方案(通过减小像素大小),也可以。

注意:对于其他pdf文件,图片将达到305 KB。这种情况发生在一个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 个答案:

答案 0 :(得分:0)

您应该可以通过更改比例来更改文件的大小。 PDF通常比渲染图像小得多。它们可以表示文本和矢量图形,渲染图像将使用大量字节来表示。我实际上有点惊讶你的任何png与pdfs的大小差不多(除非pdf只是图片)。

答案 1 :(得分: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到磁盘,因为jpg过度压缩而不是png。

您甚至可以识别原始图像的格式,并在写入磁盘时通过调用:

使用它
image.getSuffix();