admin管理员组

文章数量:1530913

2024年7月12日发(作者:)

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

1.1 如何应用ICEpdf系统实现将PDF文档转换为JPEG格式图片的应用示例

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

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

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

(2)设置项目名称为JavaPDFApp

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

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

(3)项目结果

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本示例实现将PDF文档转换为JPEG格式的图片,而JPEG格式是目前网络上最流行的图

像格式,是可以把文件压缩到最小的格式。它允许用不同的压缩比例对文件进行压缩,支持

多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低。

相反地,压缩比越小,品质就越好,当然也可以在图像质量和文件尺寸之间找到平衡点。

JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像

的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。

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

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

(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就可以编译通

过。

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

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

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

package ;

import edImage;

import ;

import tFoundException;

import tputStream;

import ption;

import ist;

import ;

import ;

import nt;

import ;

import csRenderingHints;

import ormatException;

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

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

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文件

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

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

*/

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;

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

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);

/**

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

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

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

*/

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);

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

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

/**

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

*/

lity(1f, true);

GEncodeParam(oneJPEGEncodeParam);

try {

/**

* 实现JPEG格式的编码,并在前面的oneFileOutputStream输出流

中输出转换后的图片,并存储到目标目录中

}

finally{

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

}

*/

(oneBufferedImage);

catch (ImageFormatException oneException) {

}

catch (IOException oneException) {

}

/**

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

*/

isTransferOK=false;

tackTrace();

/**

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

*/

isTransferOK=false;

tackTrace();

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

/**

* 刷新此 Image 对象正在使用的所有可重构的资源。这包括为呈现到

屏幕而缓存的所有像素数据,以及用来存储图像数据或像素的所有系统资源(如果可以重新

创建它们)。图像被重置为与初始创建时类似的状态,因此如果再次呈现图像,则必须重新

创建图像数据或再次从源中获取这些数据。

}

finally{

/**

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

*/

e();

/**

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

}

}

*/

();

/**

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

*/

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;

/**

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

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

* 为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){

/**

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

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

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

*/

List resultImagesFileNameList =null;

/**

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

中显示出各个结果图片

*/

resultImagesFileNameList=

onePDFToImagePictureByICEpd. getResultImagesFileNameList() ;

}

5、执行PDFToJPEGImagePictureByICEpd程序类

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

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

}

}

文件名称为

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

(2)执行PDFToJPEGImagePictureByICEpd程序类

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

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

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

局部截图:

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

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

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

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

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

本文标签: 图片转换文件文档程序