admin管理员组

文章数量:1533918

2024年1月8日发(作者:)

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

1.1 应用ICEpdf实现将PDF文档转换为JPEG格式图片的开发环境配置和应用示例

1.1.1 与ICEpdf相关的官方的系统资源

1、ICEpdf的主要功能

(1)ICEPDF是一种开源、轻量级的PDF引擎

它主要用于展示/查看PDF文档,转换和抽取PDF文档的内容。它也是一个轻量级的开源 Java 语言的 PDF 类库,开发人员通过ICEPDF的系统类库可以实现浏览、内容提取和转换PDF文档。如下为ICEPDF系统库的主要功能:

1) 从PDF文件中提取所有的文字或信息,比如给PDF文档做摘要

2) 把PDF转换成图片,开发人员可以应用此功能实现给PDF文件做缩略图或者直接做一个纯JavaScript的PDF阅读器。

3) PDF文档的分页打印和信息搜索。

4) PDF中添加、修改或删除批注信息。

(2)ICEPDF的API采用100%纯Java编写,并且快速高效和使用简单

由于ICEPDF是纯Java编写的,所以它可以轻易地与任何Java的应用无缝对接。如下的官方网页/java/projects/ICEpdf/为ICEPDF系统库的功能特性列表页面:

杨教授工作室,版权所有,盗版必究, 1/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

2、ICEpdf系统的官网页面/java/

3、介绍ICEpdf系统功能的官方网页/java/projects/ICEpdf/

杨教授工作室,版权所有,盗版必究, 2/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

4、ICEpdf系统的技术说明在线文档

读者可以在官方网页/java/projects/ICEpdf/在线浏览ICEpdf系统的技术说明在线文档资料。

如下示图为ICEpdf系统的API在线文档的局部截图:

杨教授工作室,版权所有,盗版必究, 3/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

如下示图为ICEpdf系统的开发者技术支持的在线文档的局部截图:

5、ICEpdf系统的官方示例

读者可以在官方网页/java/demos/在线浏览ICEpdf系统的官方示例。

杨教授工作室,版权所有,盗版必究, 4/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

点击其中的“View Demo”的超链接,将可以在线浏览ICEpdf系统的官方示例。如下为其中的一个示例的执行结果示图:

6、下载ICEpdf的系统文件

读者可以在ICEpdf的官网/java/downloads/下载ICEpdf的系统文件。

杨教授工作室,版权所有,盗版必究, 5/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

在ICEpdf的官网上为读者提供有多种不同版本形式的ICEpdf的系统库,读者可以根据应用的需要下载对应的版本。注意其中有2种免费版本,一种带有字体引擎的而另一种不带有字体引擎,具体区别也就是不带字体引擎的在渲染中文字符的时候可能会有一些问题;而试用版本在应用时在所生成出来的PDF文档页面中会有红色的水印。

但下载之前需要用户首先注册有效的账号:

杨教授工作室,版权所有,盗版必究, 6/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

1.1.2 应用ICEpdf系统实现将PDF文档转换为图片的应用示例

1、构建示例测试Java应用程序项目

(1)在MyEclipse开发工具中创建一个项目名称为JavaPDFApp的Java应用程序项目

杨教授工作室,版权所有,盗版必究, 7/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(2)设置项目名称为JavaPDFApp

杨教授工作室,版权所有,盗版必究, 8/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(3)项目结果

2、将ICEpdf系统文件加入到项目的编译环境中

(1)启动项目的属性菜单

杨教授工作室,版权所有,盗版必究, 9/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(2)切换到Java Build Path页中的Libraries选项页

杨教授工作室,版权所有,盗版必究, 10/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(3)将下载的ICEpdf系统文件加入到项目的编译环境中

3、在MyEclipse开发工具中创建示例程序类

(1)示例程序类名称为PDFToJPEGImagePictureByICEpd,程序包名称为

杨教授工作室,版权所有,盗版必究, 11/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(2)将创建出PDFToJPEGImagePictureByICEpd程序类的初始代码

杨教授工作室,版权所有,盗版必究, 12/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

4、编程PDFToJPEGImagePictureByICEpd程序类的功能实现代码

(1)编程PDFToImagePictureByICEpd程序类中的功能方法

本示例实现将PDF文档转换为JPEG格式的图片,而JPEG格式是目前网络上最流行的图像格式,是可以把文件压缩到最小的格式。它允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低。

相反地,压缩比越小,品质就越好,当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。

杨教授工作室,版权所有,盗版必究, 13/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(2)在MyEclipse开发工具中编程本示例的程序代码,需要引入两个系统程序包:

import dec;

import ageEncoder;

由于它们都是Sun公司的内部功能类及方法,并没有在Java API中公开过,所以使用这些类及方法是不安全的,将来随时可能会从中去除。另外在正常的编译时会如下的编译报错:

Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required

library

错误产生的主要原因是: MyEclipse默认把这些受访问限制的API设成了ERROR。

此时解决办法:只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。

杨教授工作室,版权所有,盗版必究, 14/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(3)PDFToJPEGImagePictureByICEpd程序类的完整代码示例

package ;

import edImage;

import ;

import tFoundException;

import tputStream;

import ption;

import ist;

import ;

import ;

import nt;

import ;

import csRenderingHints;

import ormatException;

杨教授工作室,版权所有,盗版必究, 15/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

import dec;

import codeParam;

import ageEncoder;

public class PDFToJPEGImagePictureByICEpd{

/**

* 存储转换结果的各个图片的文件路径和文件名称信息

*/

private List resultImagesFileNameList =null;

public PDFToJPEGImagePictureByICEpd () {

}

public List getResultImagesFileNameList() {

}

/**

*

* @param orignalPDTFileName 转换前的原始的PDF文件绝对路径和文件名称,比如return resultImagesFileNameList;

super();

String orignalPDTFileName ="D:软件项目程序";

* @param resultImagePathName 转换后的图片存储的目录路径名称(绝对路径),比如String resultImagePathName ="D:软件项目程序Demo1result";

* @param rotationAngle

* @param scaleFactors

为转动的角度(旋转度数), =0 不旋转

为PDF的放大参数(转成成图片以后对图片的放大倍数),也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);

* <1.0为缩小,>1.0为放大。 它影响抓换后的图片中的字体清晰度。但是这个参数不能太大,如文件特别大的时候就会内存溢出,建议在1~2之间。

* @param isPDFFileDeleted 转换后是否要删除原始的PDF文件, =true 删除原始的PDF文件, =false 不删除原始的PDF文件

杨教授工作室,版权所有,盗版必究, 16/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

*/

public boolean doTransferPdfFileToPicture(String orignalPDTFileName,String

resultImagePathName,

/**

float rotationAngle, float scaleFactors, boolean isPDFFileDeleted) {

* 最终转换是否成功的返回状态标志, =false 表示转换不成功, =true 表示转换成功

*/

boolean isTransferOK =true;

Document currentPDFDocument =null;

FileOutputStream oneFileOutputStream =null;

JPEGImageEncoder oneJPEGImageEncoder = null;

JPEGEncodeParam oneJPEGEncodeParam = null;

/**

* 创建一个PDF文档对象

*/

currentPDFDocument = new Document();

try{

/**

* 将所创建出的PDF文档对象与待转换的PDF文档文件相互关联,一次性将PDF文件的内容读入到内存中。因此,程序占用的内存就会直线上升。

*/

try{

}

catch (Exception oneException){

/**

* 设置转换出现错误的标志

*/

isTransferOK=false;

杨教授工作室,版权所有,盗版必究, 17/26页

e(orignalPDTFileName);

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

}

/**

tackTrace();

* 获得PDF文档中的总页数

*/

int totalPagesInPDFDocument = berOfPages();

/**

* 创建存储转换后的各个图片的文件名称列表信息的集合对象,在上层的调用方法中可以获得,从而可以在界面中显示出各个结果图片。

*/

resultImagesFileNameList = new ArrayList();

/**

* 对所获得的PDF文档中的每一页的内容进行转换

*/

for( int currentPageNumberIndex = 0 ; currentPageNumberIndex <

totalPagesInPDFDocument ; currentPageNumberIndex++ ){

/**

* 获得PDF文档中的某一页的内容,并转换为对应的Java内存图片对象,其中的RY_TRIMBOX为Defines the intended dimensions of the finished page after

trimming. csRenderingHints is used to apply different rendering hints

for printing and screen presentation when rending a Page's content。

* specify rendering hint specific to screen rendering。

*/

BufferedImage oneBufferedImage =

(BufferedImage)eImage(currentPageNumberIndex,

, RY_TRIMBOX,

rotationAngle, scaleFactors);

/**

杨教授工作室,版权所有,盗版必究, 18/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

* 构建出转换后的每页图片的文件路径和文件名称

*/

String someOneImageFileName =resultImagePathName+

currentPageNumberIndex +"_"+UUID().toString()+ ".jpg";

try{

try {

/**

*为了能够将转换后的图片输出到目标文件流中,需要针对每个图片文件创建出对应的输出流对象

*/

oneFileOutputStream =

new FileOutputStream(someOneImageFileName);

}

catch (FileNotFoundException oneException) {

}

/**

* JPEGCodec是用于图片的压缩功能类,下面的createJPEGEncoder方法/**

* 设置转换出现错误的标志

*/

isTransferOK=false;

tackTrace();

是将指定的 InputStream 对象与将用于解码图像的新 JPEGImageDecoder 对象相关联。

* 而JPEGImageEncoder可适用于其他图片类型的转换。

*/

oneJPEGImageEncoder = JPEGEncoder(oneFileOutputStream);

oneJPEGEncodeParam =

aultJPEGEncodeParam(oneBufferedImage);

杨教授工作室,版权所有,盗版必究, 19/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

/**

* 1f~0.01f是提高生成的图片质量

*/

lity(1f, true);

GEncodeParam(oneJPEGEncodeParam);

try {

/**

* 实现JPEG格式的编码,并在前面的oneFileOutputStream输出流中输出转换后的图片,并存储到目标目录中

}

finally{

杨教授工作室,版权所有,盗版必究, 20/26页

}

*/

(oneBufferedImage);

catch (ImageFormatException oneException) {

}

catch (IOException oneException) {

}

/**

* 设置转换出现错误的标志

*/

isTransferOK=false;

tackTrace();

/**

* 设置转换出现错误的标志

*/

isTransferOK=false;

tackTrace();

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

/**

* 刷新此 Image 对象正在使用的所有可重构的资源。这包括为呈现到屏幕而缓存的所有像素数据,以及用来存储图像数据或像素的所有系统资源(如果可以重新创建它们)。图像被重置为与初始创建时类似的状态,因此如果再次呈现图像,则必须重新创建图像数据或再次从源中获取这些数据。

}

finally{

/**

* 释放所创建出的PDF文档对象所占用的系统空间

*/

e();

/**

杨教授工作室,版权所有,盗版必究, 21/26页

}

}

*/

();

/**

* 关闭输出流对象,并释放相应的系统资源

*/

try {

();

} catch (IOException oneException) {

}

/**

* 设置转换出现错误的标志

*/

isTransferOK=false;

tackTrace();

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

* 识别是否要求在转换为图片后,将原来的PDF文件删除掉。如果需要,则进行删除。但下面的代码一定要放在“e();”语句之后,否则将无法删除原始的PDF文件。

}

public static void main(String[] args) {

/**

* 转换前的原始的PDF文件绝对路径和文件名称

*/

String orignalPDTFileName ="E:";

/**

* 转换后的图片存储的目录路径名称(绝对路径),抓换后的结果图片为*.jpg格式,

}

* 因为原始的PDF文件仍然在使用,而没有释放。

*/

if(isPDFFileDeleted){

}

File orignalPDTFile= new File(orignalPDTFileName);

();

return isTransferOK;

这样的文件容量比较小,而如果抓换为*.png格式,则图片文件容量比较大,不利于界面中的显示。

*/

String resultImagePathName ="E:pdfresult";

/**

* 转动的角度(旋转度数), =0 不旋转

*/

float rotationAngle =0.0f;

/**

杨教授工作室,版权所有,盗版必究, 22/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

* 为PDF的放大参数(转成成图片以后对图片的放大倍数),也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);<1.0为缩小,>1.0为放大。

* 它影响抓换后的图片中的字体清晰度。但是这个参数不能太大,如文件特别大的时候就会内存溢出,建议在1~2之间。

*/

float scaleFactors = 1f;

/**

* 转换后是否要删除原始的PDF文件, =true 删除原始的PDF文件, =false 不删除原始的PDF文件

*/

boolean isPDFFileDeleted =false;

PDFToJPEGImagePictureByICEpd onePDFToJPEGImagePictureByICEpd =

new PDFToJPEGImagePictureByICEpd ();

/**

* 调用转换的目标方法,并获得最终转换是否成功的返回状态标志, =false 表示转换不成功, =true 表示转换成功

*/

boolean isTransferOK = sferPdfFileToPicture(

/**

* 识别本次转换是否成功,如果转换成功,则获得转换后的各个图片的文件名称列

orignalPDTFileName, resultImagePathName,

rotationAngle,scaleFactors, isPDFFileDeleted) ;

表信息,从而可以在界面中显示出各个结果图片

*/

if(isTransferOK){

/**

* 存储转换结果的各个图片的文件路径和文件名称信息

杨教授工作室,版权所有,盗版必究, 23/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

*/

List resultImagesFileNameList =null;

/**

* 转换成功,则获得转换后的各个图片的文件名称列表信息,从而可以在界面中显示出各个结果图片

*/

resultImagesFileNameList=

onePDFToImagePictureByICEpd. getResultImagesFileNameList() ;

}

5、执行PDFToJPEGImagePictureByICEpd程序类

(1)给定测试用的PDF文档文件及转换后的图片文件的存放目录

本示例的测试用的PDF文档文件存放在E盘中的pdf目录中,测试用的PDF文档文件的

}

}

文件名称为

转换后的图片文件的存放目录为E:pdfresultImg。

(2)执行PDFToJPEGImagePictureByICEpd程序类

杨教授工作室,版权所有,盗版必究, 24/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

开始执行PDFToJPEGImagePictureByICEpd程序类,如下为程序执行后的输出提示信息的局部截图:

杨教授工作室,版权所有,盗版必究, 25/26页

杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料

(3)PDFToJPEGImagePictureByICEpd程序类的执行结果

(4)浏览转换后的图片文件的内容与原始的PDF文档中对应的内容完全保持一致性

杨教授工作室,版权所有,盗版必究, 26/26页

本文标签: 图片转换文件文档系统