`
zhuyufufu
  • 浏览: 138764 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

文档展示:IcePDF 将PDF转换为图片

阅读更多
上接 文档展示:PDFRender 将PDF转换为图片
http://zhuyufufu.iteye.com/admin/blogs/2012236

PDFBox 与 PDFRender在转换时有清晰度与效率的问题,

PDFBox转换效果稍好,PDFRender更快,但是多线程操作不能大幅提高转换效率。

搜索这下找到IcePDF 他是开源的,但是字体支持要收费。

拿IcePDF自带的例子展示,上代码:
package com.zas.ice.test;
/*
 * Copyright 2006-2013 ICEsoft Technologies Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS
 * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */


import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.PDimension;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import org.icepdf.ri.util.FontPropertiesManager;
import org.icepdf.ri.util.PropertiesManager;

import javax.imageio.ImageIO;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * The <code>PageCapture</code> class is an example of how to save page
 * captures to disk.  A file specified at the command line is opened and every
 * page in the document is captured as an image and saved to disk as a
 * PNG graphic file.
 *
 * @since 5.0
 */
public class PageCapture {
	static String outputFilePath = "D:\\pdf\\Linux命令行技术大全222222\\";
	
    public static void main(String[] args) {

        // Get a file from the command line to open
    	String filePath = "D:\\pdf\\面向对象软件构造(第二版)中英对照版.pdf";

        // read/store the font cache.
        ResourceBundle messageBundle = ResourceBundle.getBundle(
                PropertiesManager.DEFAULT_MESSAGE_BUNDLE);
        PropertiesManager properties = new PropertiesManager(System.getProperties(),
                ResourceBundle.getBundle(PropertiesManager.DEFAULT_MESSAGE_BUNDLE));
        new FontPropertiesManager(properties, System.getProperties(), messageBundle);

        // start the capture
        PageCapture pageCapture = new PageCapture();
        pageCapture.capturePages(filePath);

    }

    public void capturePages(String filePath) {
    	long beginTime = System.nanoTime();
        // open the url
        Document document = new Document();

        // setup two threads to handle image extraction.
        ExecutorService executorService = Executors.newFixedThreadPool(100);
        try {
            document.setFile(filePath);
            // create a list of callables.
            int pages = document.getNumberOfPages();
            java.util.List<Callable<Void>> callables = new ArrayList<Callable<Void>>(pages);
            for (int i = 0; i <= pages; i++) {
                callables.add(new CapturePage(document, i));
            }
            executorService.invokeAll(callables);
            executorService.submit(new DocumentCloser(document)).get();

        } catch (InterruptedException e) {
            System.out.println("Error parsing PDF document " + e);
        } catch (ExecutionException e) {
            System.out.println("Error parsing PDF document " + e);
        } 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);
        }
        executorService.shutdown();
        long endTime = System.nanoTime();
		System.out.println("耗时: " + (endTime - beginTime) / 1000000000 + " 秒" );
    }

    /**
     * Captures images found in a page  parse to file.
     */
    public class CapturePage implements Callable<Void> {
        private Document document;
        private int pageNumber;
        private float scale = 1f;
        private float rotation = 0f;

        private CapturePage(Document document, int pageNumber) {
            this.document = document;
            this.pageNumber = pageNumber;
        }

        public Void call() {
            Page page = document.getPageTree().getPage(pageNumber);
            page.init();
            PDimension sz = page.getSize(Page.BOUNDARY_CROPBOX, rotation, scale);

            int pageWidth = (int) sz.getWidth();
            int pageHeight = (int) sz.getHeight();

            BufferedImage image = new BufferedImage(pageWidth,
                    pageHeight,
                    BufferedImage.TYPE_INT_RGB);
            Graphics g = image.createGraphics();

            page.paint(g, GraphicsRenderingHints.PRINT,
                    Page.BOUNDARY_CROPBOX, rotation, scale);
            g.dispose();
            // capture the page image to file
            try {
                System.out.println("Capturing page " + pageNumber);
                File file = new File(outputFilePath + "imageCapture_" + pageNumber + ".png");
                ImageIO.write(image, "png", file);

            } catch (Throwable e) {
                e.printStackTrace();
            }
            image.flush();
            return null;
        }
    }

    /**
     * Disposes the document.
     */
    public class DocumentCloser implements Callable<Void> {
        private Document document;

        private DocumentCloser(Document document) {
            this.document = document;
        }

        public Void call() {
            if (document != null) {
                document.dispose();
                System.out.println("Document disposed");
            }
            return null;
        }
    }
}


代码用到了JDK的线程池,也用到了任务callable,算是涨涨见识了

在转换的效果上比PDFRender略好,与PDFBox差不远;在转换的效率上,比PDFBox好很多,比PDFRender略差。

资料包是从一位Iteye用户那里下的,但是记不住他的链接了。

IcePdf官网 http://www.icesoft.org/java/home.jsf

1
0
分享到:
评论
2 楼 zheng_zhimeng 2015-05-29  
这个版本在linux的版本下有问题,亲们用的没有问题么
1 楼 yuming.xiao 2015-05-15  
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有

相关推荐

    使用IcePdf将Pdf转换成图片

    这个文件通常会包含一个示例程序,展示如何使用IcePdf将PDF转换为图片。以下是一个基本的转换流程: 1. **初始化PDFViewerComponent**:这是IcePdf提供的一个组件,用于渲染PDF页面。创建一个`PDFDocumentWrapper`...

    PDFbox IcePdf pdf转图片

    在提供的jar包中,`PdfToImage`可能是一个示例程序,演示了如何使用PDFbox或IcePdf将PDF转换为图片。通过运行这个程序并根据需要调整代码,你可以轻松地将多页PDF转换为一系列的图片文件。 总结来说,PDFbox和...

    利用icepdf将pdf转换成tif及jpge格式文件

    描述中提到icepdf能够很好地将PDF转换为单个或多个TIFF图片,并且还支持转换为JPEG格式。这暗示了icepdf库提供了高级的图像处理功能,可以处理PDF中的内嵌字体,确保转换后的图像能准确地呈现原文档的内容。对于那些...

    icepdf pdf 转图片 demo

    【icepdf pdf 转图片 demo】是一个演示项目,展示了如何使用icepdf库将PDF文档转换为图像。icepdf是一个开源的Java库,专门用于处理PDF文档,包括阅读、渲染和编辑。在这个demo中,开发者提供了基本的代码框架,帮助...

    使用icepdf将pdf转成图片jar包

    将PDF转换为图片的过程主要涉及以下步骤: 1. **初始化**: 首先,你需要导入所需的Icepdf库,并创建一个PDFDocument对象,用以加载你要转换的PDF文件。 2. **渲染**: 使用PDFPageRenderContext,将PDF页面渲染到...

    icepdf jar pdf 转图片

    `icepdf`是一个开源的Java库,它允许开发者在Java应用程序中查看和处理PDF文档,包括将PDF转换为图片。下面我们将详细讨论`icepdf`的相关知识点。 首先,`icepdf-core`是`icepdf`的核心模块,提供了PDF解析和渲染的...

    icepdf转图片 去水印,解决字体乱码

    3. **PDF转换**:利用icepdf,可以将PDF文档转换为JPEG、PNG等图片格式,便于在网络上传输或在不支持PDF的设备上查看。 4. **去水印**:icepdf虽然原生功能不直接支持去除水印,但通过自定义渲染逻辑,可以实现对PDF...

    icepdf-example.zip_W55_icepdf_icepdf pdf转图片_javaPDF转图片

    然而,在某些情况下,我们可能需要将PDF转换为图片,以便于在线分享、嵌入网页或者进行其他图像处理。本项目“icepdf-example.zip_W55_icepdf_icepdf pdf转图片_javaPDF转图片”就是针对这种需求提供的一种解决方案...

    java icepdf转一张或多张图片

    在Java中使用ICEpdf将PDF转换为图片,主要涉及以下几个关键知识点: 1. **ICEpdf库的安装与集成**:首先,你需要下载ICEpdf的库文件,通常是一个包含JAR文件的压缩包,例如`myICEPdf.jar`。将这些JAR文件添加到项目...

    icepdf6.1.1 pdf转图片 无水印,解决中文乱码问题,win linux均可

    然而,在处理PDF时,我们有时需要将PDF转换为图片,以便于在网络上传输或者在不支持PDF阅读的应用场景中使用。同时,对于包含中文字符的PDF,乱码问题也常常困扰着用户。针对这些问题,本文将详细介绍如何使用icepdf...

    pdf转图片jar

    这个压缩包文件"pdf转图片jar"很可能是包含了icepdf库的相关组件,使得开发者能够通过编程的方式将PDF文档转换为图片格式。 ICEpdf的核心功能包括: 1. **PDF解析**:ICEpdf能够解析PDF文档的结构,读取文本、图像...

    PDF转换图片(多页转多张)

    PDF转换图片,特别是将多页PDF转换为多张单独的图片,是常见的文件处理需求,尤其是在数据可视化、文档共享和网络发布等领域。Java作为一种广泛使用的编程语言,提供了丰富的库来处理这种任务。在这个场景中,我们...

    ICEpdf-pro-5.0.6-P01-bin-trial 最新官方jar包 带字库 java PDF转图片工具

    4. **PDF转换**:正如标题所述,ICEpdf可以将PDF文档转换为图片,这对于需要将PDF内容集成到其他非PDF格式的应用场景非常实用,比如生成预览图或者进行数据抓取。 5. **字体支持**:"带字库"表明此版本可能包含了...

    icepdf-5.0.6免费去水印

    3. **PDF转换为图像**:一个独特且实用的功能是,ICEpdf能够将PDF文档转换为一系列的图像文件,如JPEG、PNG等。这在需要离线查看PDF或者在不支持PDF的设备上展示文档时特别有用。 4. **无水印处理**:标题中提到的...

    ICEpdf的代码

    4. **PDF解析与渲染**:ICEpdf能解析PDF文件结构,并将内容转换为高质量的图像,用于在屏幕上显示或打印。 5. **PDF安全性**:ICEpdf可以处理加密的PDF文档,支持用户密码验证和权限管理,确保文档的安全性。 6. *...

    icepdf jar包

    `icepdf-viewer.jar`则是icepdf的用户界面组件,提供了用于展示PDF文档的Swing和JavaFX视图组件。它允许开发者在Java应用程序中集成一个PDF查看器,具有以下特性: 1. **GUI组件**:icepdf-viewer提供了JViewer和...

    Java使用icepdf将pdf文件按页转成图片

    Java使用icepdf将pdf文件按页转成图片是指使用Java语言通过icepdf库将pdf文件转换为图片的过程。下面将详细介绍该过程中的知识点。 首先,需要了解icepdf库的基本概念。icepdf是一个Java库,用于处理和操作pdf文件...

    icepdf-core,icepdf-viewer实现pdf转jpg

    总的来说,`icepdf-core`和`icepdf-viewer`提供了一种方便的方式来在Java环境中处理PDF,包括将其转换为JPG图像。这个过程涉及到PDF文档的读取、页面渲染以及图像保存等多个环节,通过理解这些步骤,你可以更好地...

    icepdf的jar包.zip

    在“转换PDF”方面,ICEpdf提供了API来实现PDF文档到其他格式的转化,例如将PDF页面转换为图像。这在某些场景下非常有用,比如网页预览、数据备份或者将PDF内容集成到其他非PDF格式的应用中。开发者可以通过调用...

    ICEPdf(5.0.2) 去水印 支持中文

    1. **PDF渲染**:ICEPdf能够将PDF文档的页面转换为高质量的图像,以便在Java Swing或JavaFX的应用程序中显示。它使用了高效的渲染引擎,确保文档的视觉效果与原版PDF保持一致。 2. **文本选择和搜索**:用户可以...

Global site tag (gtag.js) - Google Analytics