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
public PDFToJPEGImagePictureByICEpd () {
}
public List
}
/**
*
* @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=
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页
版权声明:本文标题:如何应用ICEpdf系统实现将PDF文档转换为JPEG格式图片的应用示例_ 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1720758847a841453.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论