如何应用ICEpdf系统实现将PDF文档转换为JPEG格式图片的应用示例Word文件下载.docx
《如何应用ICEpdf系统实现将PDF文档转换为JPEG格式图片的应用示例Word文件下载.docx》由会员分享,可在线阅读,更多相关《如何应用ICEpdf系统实现将PDF文档转换为JPEG格式图片的应用示例Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
(2)在MyEclipse开发工具中编程本示例的程序代码,需要引入两个系统程序包:
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
由于它们都是Sun公司的内部功能类及方法,并没有在JavaAPI中公开过,所以使用这些类及方法是不安全的,将来随时可能会从中去除。
另外在正常的编译时会如下的编译报错:
Accessrestriction:
ThetypeJPEGImageEncoderisnotaccessibleduetorestrictiononrequiredlibraryxxxx.jar
错误产生的主要原因是:
MyEclipse默认把这些受访问限制的API设成了ERROR。
此时解决办法:
只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的DeprecatedandrestrictedAPI中的Forbiddenreferences(accessrules)选为Warning就可以编译通过。
(3)PDFToJPEGImagePictureByICEpd程序类的完整代码示例
packagecom.bluedream.icepdf;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.UUID;
importorg.icepdf.core.pobjects.Document;
importorg.icepdf.core.pobjects.Page;
importorg.icepdf.core.util.GraphicsRenderingHints;
importcom.sun.image.codec.jpeg.ImageFormatException;
importcom.sun.image.codec.jpeg.JPEGEncodeParam;
publicclassPDFToJPEGImagePictureByICEpd{
/**
*存储转换结果的各个图片的文件路径和文件名称信息
*/
privateList<
String>
resultImagesFileNameList=null;
publicPDFToJPEGImagePictureByICEpd(){
super();
}
publicList<
getResultImagesFileNameList(){
returnresultImagesFileNameList;
*
*@paramorignalPDTFileName转换前的原始的PDF文件绝对路径和文件名称,比如StringorignalPDTFileName="
D:
\\软件项目程序\\Demo1\\demo1.pdf"
;
*@paramresultImagePathName转换后的图片存储的目录路径名称(绝对路径),比如StringresultImagePathName="
\\软件项目程序\\Demo1\\result\\"
*@paramrotationAngle为转动的角度(旋转度数),=0不旋转
*@paramscaleFactors为PDF的放大参数(转成成图片以后对图片的放大倍数),也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);
*<
1.0为缩小,>
1.0为放大。
它影响抓换后的图片中的字体清晰度。
但是这个参数不能太大,如文件特别大的时候就会内存溢出,建议在1~2之间。
*@paramisPDFFileDeleted转换后是否要删除原始的PDF文件,=true删除原始的PDF文件,=false不删除原始的PDF文件
publicbooleandoTransferPdfFileToPicture(StringorignalPDTFileName,StringresultImagePathName,floatrotationAngle,floatscaleFactors,booleanisPDFFileDeleted){
/**
*最终转换是否成功的返回状态标志,=false表示转换不成功,=true表示转换成功
*/
booleanisTransferOK=true;
DocumentcurrentPDFDocument=null;
FileOutputStreamoneFileOutputStream=null;
JPEGImageEncoderoneJPEGImageEncoder=null;
JPEGEncodeParamoneJPEGEncodeParam=null;
*创建一个PDF文档对象
currentPDFDocument=newDocument();
try{
/**
*将所创建出的PDF文档对象与待转换的PDF文档文件相互关联,一次性将PDF文件的内容读入到内存中。
因此,程序占用的内存就会直线上升。
*/
try{
currentPDFDocument.setFile(orignalPDTFileName);
}
catch(ExceptiononeException){
/**
*设置转换出现错误的标志
*/
isTransferOK=false;
oneException.printStackTrace();
}
*获得PDF文档中的总页数
inttotalPagesInPDFDocument=currentPDFDocument.getNumberOfPages();
*创建存储转换后的各个图片的文件名称列表信息的集合对象,在上层的调用方法中可以获得,从而可以在界面中显示出各个结果图片。
resultImagesFileNameList=newArrayList<
();
*对所获得的PDF文档中的每一页的内容进行转换
for(intcurrentPageNumberIndex=0;
currentPageNumberIndex<
totalPagesInPDFDocument;
currentPageNumberIndex++){
*获得PDF文档中的某一页的内容,并转换为对应的Java内存图片对象,其中的Page.BOUNDARY_TRIMBOX为Definestheintendeddimensionsofthefinishedpageaftertrimming.org.icepdf.core.util.GraphicsRenderingHintsisusedtoapplydifferentrenderinghintsforprintingandscreenpresentationwhenrendingaPage'
scontent。
*GraphicsRenderingHints.SCREENspecifyrenderinghintspecifictoscreenrendering。
BufferedImageoneBufferedImage=
(BufferedImage)currentPDFDocument.getPageImage(currentPageNumberIndex,
GraphicsRenderingHints.SCREEN,Page.BOUNDARY_TRIMBOX,rotationAngle,scaleFactors);
*构建出转换后的每页图片的文件路径和文件名称
StringsomeOneImageFileName=resultImagePathName+
currentPageNumberIndex+"
_"
+UUID.randomUUID().toString()+"
.jpg"
try{
try{
/**
*为了能够将转换后的图片输出到目标文件流中,需要针对每个图片文件创建出对应的输出流对象
*/
oneFileOutputStream=
newFileOutputStream(someOneImageFileName);
}
catch(FileNotFoundExceptiononeException){
*设置转换出现错误的标志
isTransferOK=false;
oneException.printStackTrace();
/**
*JPEGCodec是用于图片的压缩功能类,下面的createJPEGEncoder方法是将指定的InputStream对象与将用于解码图像的新JPEGImageDecoder对象相关联。
*而JPEGImageEncoder可适用于其他图片类型的转换。
*/
oneJPEGImageEncoder=JPEGCodec.createJPEGEncoder(oneFileOutputStream);
oneJPEGEncodeParam=
oneJPEGImageEncoder.getDefaultJPEGEncodeParam(oneBufferedImage);
*1f~0.01f是提高生成的图片质量
*/
oneJPEGEncodeParam.setQuality(1f,true);
oneJPEGImageEncoder.setJPEGEncodeParam(oneJPEGEncodeParam);
/**
*实现JPEG格式的编码,并在前面的oneFileOutputStream输出流中输出转换后的图片,并存储到目标目录中
*/
oneJPEGImageEncoder.encode(oneBufferedImage);
}
catch(ImageFormatExceptiononeException){
catch(IOExceptiononeException){
}
finally{
*刷新此Image对象正在使用的所有可重构的资源。
这包括为呈现到屏幕而缓存的所有像素数据,以及用来存储图像数据或像素的所有系统资源(如果可以重新创建它们)。
图像被重置为与初始创建时类似的状态,因此如果再次呈现图像,则必须重新创建图像数据或再次从源中获取这些数据。
oneBufferedImage.flush();
*关闭输出流对象,并释放相应的系统资源
oneFileOutputStream.close();
}catch(IOExceptiononeException){
}
finally{
*释放所创建出的PDF文档对象所占用的系统空间
currentPDFDocument.dispose();
*识别是否要求在转换为图片后,将原来的PDF文件删除掉。
如果需要,则进行删除。
但下面的代码一定要放在“currentPDFDocument.dispose();
”语句之后,否则将无法删除原始的PDF文件。
*因为原始的PDF文件仍然在使用,而没有释放。
if(isPDFFileDeleted){
FileorignalPDTFile=newFile(orignalPDTFileName);
orignalPDTFile.delete();
}
returnisTransferOK;
publicstaticvoidmain(String[]args){
*转换前的原始的PDF文件绝对路径和文件名称
StringorignalPDTFileName="
E:
\\pdf\\testPDFFile.pdf"
*转换后的图片存储的目录路径名称(绝对路径),抓换后的结果图片为*.jpg格式,这样的文件容量比较小,而如果抓换为*.png格式,则图片文件容量比较大,不利于界面中的显示。
StringresultImagePathName="
\\pdf\\result\\"
*转动的角度(旋转度数),=0不旋转
floatrotationAngle=0.0f;
*为PDF的放大参数(转成成图片以后对图片的放大倍数),也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);
<
*它影响抓换后的图片中的字体清晰度。
floatscaleFactors=1f;
*转换后是否要删除原始的PDF文件,=true删除原始的PDF文件,=false不删除原始的PDF文件
booleanisPDFFileDeleted=false;
PDFToJPEGImagePictureByICEpdonePDFToJPEGImagePictureByICEpd=
newPDFToJPEGImagePictureByICEpd();
*调用转换的目标方法,并获得最终转换是否成功的返回状态标志,=false表示转换不成功,=true表示转换成功
booleanisTransferOK=onePDFToJPEGImagePictureByICEpd.doTransferPdfFileToPicture(
orignalPDTFileName,resultImagePathName,
rotationAngle,scaleFactors,isPDFFileDeleted);
*识别本次转换是否成功,如果转换成功,则获得转换后的各个图片的文件名称列表信息,从而可以在界面中显示出各个结果图片
if(isTransferOK){
*存储转换结果的各个图片的文件路径和文件名称信息
List<
*转换成功,则获得转换后的各个图片的文件名称列表信息,从而可以在界面中显示出各个结果图片
resultImagesFileNameList=
onePDFToImagePictureByICEpd.getResultImagesFileNameList();
}
5、执行PDFToJPEGImagePictureByICEpd程序类
(1)给定测试用的PDF文档文件及转换后的图片文件的存放目录
本示例的测试用的PDF文档文件存放在E盘中的pdf目录中,测试用的PDF文档文件的文件名称为testPDFFile.pdf
转换后的图片文件的存放目录为E:
\pdf\resultImg。
(2)执行PDFToJPEGImagePictureByICEpd程序类
开始执行PDFToJPEGImagePictureByICEpd程序类,如下为程序执行后的输出提示信息的局部截图:
(3)PDFToJPEGImagePictureByICEpd程序类的执行结果
(4)浏览转换后的图片文件的内容与原始的PDF文档中对应的内容完全保持一致性