如何应用ICEpdf系统实现将PDF文档转换为PNG格式图片的应用示例.docx
《如何应用ICEpdf系统实现将PDF文档转换为PNG格式图片的应用示例.docx》由会员分享,可在线阅读,更多相关《如何应用ICEpdf系统实现将PDF文档转换为PNG格式图片的应用示例.docx(17页珍藏版)》请在冰点文库上搜索。
如何应用ICEpdf系统实现将PDF文档转换为PNG格式图片的应用示例
1.1如何应用ICEpdf系统实现将PDF文档转换为PNG格式图片的应用示例
1.1.1应用ICEpdf系统实现将PDF文档转换为PNG图片的应用示例
1、构建示例测试Java应用程序项目
(1)在MyEclipse开发工具中创建一个项目名称为JavaPDFApp的Java应用程序项目
(2)设置项目名称为JavaPDFApp
(3)项目结果
2、将ICEpdf系统文件加入到项目的编译环境中
(1)启动项目的属性菜单
(2)切换到JavaBuildPath页中的Libraries选项页
(3)将下载的ICEpdf系统文件加入到项目的编译环境中
3、在MyEclipse开发工具中创建示例程序类
(1)示例程序类名称为PDFToPNGImagePictureByICEpd,程序包名称为com.bluedream.icepdf
(2)将创建出PDFToPNGImagePictureByICEpd程序类的初始代码
4、编程PDFToPNGImagePictureByICEpd程序类的功能实现代码
(1)编程PDFToPNGImagePictureByICEpd程序类中的功能方法
本示例实现将PDF文档转换为JPEG格式的图片,而JPEG格式是目前网络上最流行的图像格式,是可以把文件压缩到最小的格式。
它允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:
1到40:
1之间,压缩比越大,品质就越低。
相反地,压缩比越小,品质就越好,当然也可以在图像质量和文件尺寸之间找到平衡点。
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)PDFToPNGImagePictureByICEpd程序类的完整代码示例
packagecom.bluedream.icepdf;
importjava.awt.image.BufferedImage;
importjava.awt.image.RenderedImage;
importjava.io.File;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.UUID;
importjavax.imageio.ImageIO;
importorg.icepdf.core.pobjects.Document;
importorg.icepdf.core.pobjects.Page;
importorg.icepdf.core.util.GraphicsRenderingHints;
publicclassPDFToPNGImagePictureByICEpd{
/**
*存储转换结果的各个图片的文件路径和文件名称信息
*/
privateListresultImagesFileNameList=null;
publicPDFToPNGImagePictureByICEpd(){
super();
}
publicListgetResultImagesFileNameList(){
returnresultImagesFileNameList;
}
/**
*
*@paramorignalPDTFileName转换前的原始的PDF文件绝对路径和文件名称,比如StringorignalPDTFileName="D:
\\软件项目程序\\Demo1\\demo1.pdf";
*@paramresultImagePathName转换后的图片存储的目录路径名称(绝对路径),比如StringresultImagePathName="D:
\\软件项目程序\\Demo1\\result\\";
*@paramexePandParameters为PDF的放大参数,也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);<1.0为缩小,>1.0为放大
*@paramisPDFFileDeleted转换后是否要删除原始的PDF文件,=true删除原始的PDF文件,=false不删除原始的PDF文件
*/
publicbooleandoTransferPdfFileToPNGPicture(StringorignalPDTFileName,
StringresultImagePathName,floatscaleFactors,
booleanisPDFFileDeleted){
/**
*最终转换是否成功的返回状态标志,=false表示转换不成功,=true表示转换成功
*/
booleanisTransferOK=false;
/**
*转动的角度
*/
floatrotation=0f;
BufferedImageoneBufferedImage=null;
DocumentcurrentPDFDocument=null;
/**
*创建一个PDF文档对象
*/
currentPDFDocument=newDocument();
try{
/**
*将所创建出的PDF文档对象与待转换的PDF文档文件相互关联。
*/
try{
currentPDFDocument.setFile(orignalPDTFileName);
}
catch(ExceptiononeException){
oneException.printStackTrace();
}
/**
*获得PDF文档中的总页数
*/
inttotalPagesInPDFDocument=currentPDFDocument.getNumberOfPages();
/**
*创建存储转换后的各个图片的文件名称列表信息的集合对象,在上层的调用方法中可以获得,从而可以在界面中显示出各个结果图片。
*/
resultImagesFileNameList=newArrayList();
/**
*对所获得的PDF文档中的每一页的内容进行转换
*/
for(intcurrentPageNumberIndex=0;currentPageNumberIndex/**
*获得PDF文档中的某一页的内容,并转换为对应的Java内存图片对象
*/
oneBufferedImage=
(BufferedImage)currentPDFDocument.getPageImage(currentPageNumberIndex,
GraphicsRenderingHints.SCREEN,Page.BOUNDARY_TRIMBOX,
rotation,scaleFactors);
/**
*构建出转换后的每页图片的文件路径和文件名称
*/
StringsomeOneImageFileName=resultImagePathName+
currentPageNumberIndex+"_"+UUID.randomUUID().toString()+".png";
Filefile=newFile(someOneImageFileName);
resultImagesFileNameList.add(someOneImageFileName);
try{
file.createNewFile();
}
catch(IOExceptione){
e.printStackTrace();
}
try{
ImageIO.write(oneBufferedImage,"png",file);
}
catch(IOExceptione){
e.printStackTrace();
}
oneBufferedImage.flush();
}
}
finally{
/**
*释放所创建出的PDF文档对象所占用的系统空间
*/
currentPDFDocument.dispose();
}
isTransferOK=true;
returnisTransferOK;
}
publicstaticvoidmain(String[]args){
/**
*转换前的原始的PDF文件绝对路径和文件名称
*/
StringorignalPDTFileName="E:
\\pdf\\testPDFFile.pdf";
/**
*转换后的图片存储的目录路径名称(绝对路径),抓换后的结果图片为*.jpg格式,这样的文件容量比较小,而如果抓换为*.png格式,则图片文件容量比较大,不利于界面中的显示。
*/
StringresultImagePathName="E:
\\pdf\\result\\";
/**
*转动的角度(旋转度数),=0不旋转
*/
floatrotationAngle=0.0f;
/**
*为PDF的放大参数(转成成图片以后对图片的放大倍数),也就转换后的图片的尺寸为原始的PDF页尺寸的倍数,默认为1.0(与原始的PDF文件页尺寸相同);<1.0为缩小,>1.0为放大。
*它影响抓换后的图片中的字体清晰度。
但是这个参数不能太大,如文件特别大的时候就会内存溢出,建议在1~2之间。
*/
floatscaleFactors=1f;
/**
*转换后是否要删除原始的PDF文件,=true删除原始的PDF文件,=false不删除原始的PDF文件
*/
booleanisPDFFileDeleted=false;
PDFToPNGImagePictureByICEpdonePDFToPNGImagePictureByICEpd=
newPDFToPNGImagePictureByICEpd();
/**
*调用转换的目标方法,并获得最终转换是否成功的返回状态标志,=false表示转换不成功,=true表示转换成功
*/
booleanisTransferOK=
onePDFToPNGImagePictureByICEpd.doTransferPdfFileToPNGPicture(
orignalPDTFileName,resultImagePathName,scaleFactors,isPDFFileDeleted);
/**
*识别本次转换是否成功,如果转换成功,则获得转换后的各个图片的文件名称列表信息,从而可以在界面中显示出各个结果图片
*/
if(isTransferOK){
/**
*存储转换结果的各个图片的文件路径和文件名称信息
*/
ListresultImagesFileNameList=null;
/**
*转换成功,则获得转换后的各个图片的文件名称列表信息,从而可以在界面中显示出各个结果图片
*/
resultImagesFileNameList=
onePDFToPNGImagePictureByICEpd.getResultImagesFileNameList();
}
}
}
5、执行PDFToPNGImagePictureByICEpd程序类
(1)给定测试用的PDF文档文件及转换后的图片文件的存放目录
本示例的测试用的PDF文档文件存放在E盘中的pdf目录中,测试用的PDF文档文件的文件名称为testPDFFile.pdf
转换后的图片文件的存放目录为E:
\pdf\resultImg。
(2)执行PDFToPNGImagePictureByICEpd程序类
开始执行PDFToPNGImagePictureByICEpd程序类,如下为程序执行后的输出提示信息的局部截图:
(3)PDFToPNGImagePictureByICEpd程序类的执行结果
(4)浏览转换后的图片文件的内容与原始的PDF文档中对应的内容完全保持一致性