1、如何应用PDFRenderer系统实现将PDF文档转换为图片的应用示例1.1 如何应用PDFRenderer系统实现将PDF文档转换为图片的应用示例1.1.1 应用PDFRenderer系统实现将PDF文档转换为图片的应用示例1、构建示例测试Java应用程序项目(1)在MyEclipse开发工具中创建一个项目名称为JavaPDFApp的Java应用程序项目(2)设置项目名称为JavaPDFApp(3)项目结果2、将PDFRenderer系统文件加入到项目的编译环境中(1)启动项目的属性菜单(2)切换到Java Build Path页中的Libraries选项页(3)将下载的PDFRendere
2、r系统文件加入到项目的编译环境中3、在MyEclipse开发工具中创建示例程序类(1)示例程序类名称为PDFToImagePictureByPDFRenderer,程序包名称为com.bluedream.pdfrenderer(2)将创建出PDFToImagePictureByPDFRenderer程序类的初始代码4、编程PDFToImagePictureByPDFRenderer程序类的功能实现代码(1)编程PDFToImagePictureByPDFRenderer程序类中的功能方法(2)PDFToImagePictureByPDFRenderer程序类的完整代码示例package com
3、.bluedream.pdfrenderer;import java.awt.Image;import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;import java.lang.reflect.Method;import java.n
4、io.MappedByteBuffer;import java.nio.channels.FileChannel;import java.security.AccessController;import java.security.PrivilegedAction;import java.util.UUID;import com.sun.image.codec.jpeg.ImageFormatException;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;im
5、port com.sun.image.codec.jpeg.JPEGImageEncoder;import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFPage;public class PDFToImagePictureByPDFRenderer public PDFToImagePictureByPDFRenderer() super(); /* * * param orignalPDTFileName 转换前的原始的PDF文件绝对路径和文件名称,比如String orignalPDTFileName =D:软件项目程序Demo1de
6、mo1.pdf; * param resultImagePathName 转换后的图片存储的目录路径名称(绝对路径),比如String resultImagePathName =D:软件项目程序Demo1result; * param exePandParameters 图片清晰度(n0.0且n7.0),为PDF的放大参数,也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);1.0为放大 * param isPDFFileDeleted 转换后是否要删除原始的PDF文件, =true 删除原始的PDF文件, =false 不删除原始的PDF文件 */
7、 public boolean doTransferPdfFileToPicture(String orignalPDTFileName, String resultImagePathName, float exePandParameters, boolean isPDFFileDeleted) RandomAccessFile oneRandomAccessFile =null; MappedByteBuffer oneMappedByteBuffer =null; PDFFile onePDFFile =null; FileOutputStream oneFileOutputStream
8、=null; File orignalPDTFile =null; JPEGImageEncoder oneJPEGImageEncoder = null; JPEGEncodeParam oneJPEGEncodeParam = null; FileChannel oneFileChannel = null; /* * 最终转换是否成功的返回状态标志, =false 表示转换不成功, =true 表示转换成功 */ boolean isTransferOK =false; orignalPDTFile = new File(orignalPDTFileName); try try /* *
9、以随机方式读取原始的PDF文档,并创建出RandomAccessFile类的对象实例 */ oneRandomAccessFile = new RandomAccessFile(orignalPDTFile, r); catch (FileNotFoundException e) /* * e.printStackTrace()是在标准错误输出流上打印整个Exception轨迹栈(会把从头到尾的方法都列出来,比较好查找错误),而System.out.print(e)只是打印了e.toString()方法返回的结果。e.printStackTrace()的信息更丰富,更完整。 * e.print
10、StackTrace()相当于System.out.print(e.getStackTrace().toString() */ e.printStackTrace(); /* * FileChannel 是一个 读、写、映射和操作文件的通道,文件通道有可以被查询和修改的一个当前位置。getChannel方法返回的文件通道是被连接到相同的底层文件。 * 但通过FileInputStream的getChannel方法获取的文件通道是只读的,而通过FileOutputStream的getChannel的方法获取的文件通道是可写的, * 通过RandomAccessFile的getChannel的方法
11、获取的文件通道,在创建时如果传递的参数是“r,则为只读,否则为”读写“或者“写”。 */ oneFileChannel = oneRandomAccessFile.getChannel(); try /* * 在FileChannel上调用map()方法会创建一个由磁盘文件支持的虚拟内存映射(virtual memory mapping)并在那块虚拟内存空间外部封装一个MappedByteBuffer对象。由map()方法返回的MappedByteBuffer对象的行为在多数方面类似一个基于内存的缓冲区,只不过该对象的数据元素存储在磁盘上的一个文件中。map()方法有mode、position
12、和size三个参数。映射文件的范围不应超过文件的实际大小,如果您请求一个超出文件大小的映射,文件会被增大以匹配映射的大小。假如您给size参数传递的值是Integer.MAX_VALUE,文件大小的值会膨胀到超过2.1GB。 */ oneMappedByteBuffer = oneFileChannel.map(FileChannel.MapMode.READ_ONLY, 0, oneFileChannel.size(); /* * 通过内存映射机制来访问一个文件会比使用常规方法读写高效得多,甚至比使用通道的效率都高。因为不需要做明确的系统调用,那会很消耗时间。 * 更重要的是,操作系统的虚拟
13、内存可以自动缓存内存页(memory page)。这些页是用系统内存来缓存的,所以不会消耗Java虚拟机内存堆(memory heap)。 * 文件映射可以是可写的或只读的。前两种映射模式MapMode.READ_ONLY和MapMode.READ_WRITE意义是很明显的, * 它们表示您希望获取的映射只读还是允许修改映射的文件。请求的映射模式将受被调用map()方法的FileChannel对象的访问权限所限制。 * 如果通道是以只读的权限打开的而您却请求MapMode.READ_WRITE模式,那么map()方法会抛出一个NonWritableChannelException异常; * 如
14、果您在一个没有读权限的通道上请求MapMode.READ_ONLY映射模式,那么将产生NonReadableChannelException异常。 * 不过在以read/write权限打开的通道上请求一个MapMode.READ_ONLY映射却是允许的。 */ catch (IOException e) e.printStackTrace(); /* * 将PDF文件转换为PDFFile对象,从而可以进行处理 */ try onePDFFile = new PDFFile(oneMappedByteBuffer); catch (IOException e) e.printStackTrace(); /* * 获得待转换的PDF文件中的总页数 */ int totalPageNumbers=onePDFFile.getNumPages(); /* * 对待转换的PDF文件中的每一页进行转换处理 */ for (int currentPageNumber = 1; currentPageNumber = totalPageNumbers; currentPageNumber+) /* * 获得指定页数的PDF页对象,它代表PDF文档文件中的某一页的内容 */ PDFPage onePDFPage = onePDFFile.getPage(currentPageNu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1