在做将打印word的操作时,我个人认为将word转换为PDF格式(在博主另一篇博客中有说道),将PDF转换为图片,将图片传给前台去做打印,这样很方便,前台不用去管后台的数据,只需要找到图片,做简单的打印操作。
本篇博客是博主在网上收集的前辈写的方法,很好用,特分享出来,如有侵权请联系博主删除,谢谢。
依赖jar包
/**
* 将PDF转化为图片,可调节清晰度
* @param PDFPath
* @param id
* @param imgSavePath
*/
public static List changePdfToImg(String PDFPath,Long id,String saveUrl) {
List list = new ArrayList();
try {
File file = new File(PDFPath);
RandomAccessFile raf = new RandomAccessFile(file, “r”);
FileChannel channel = raf.getChannel();
MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
PDFFile pdffile = new PDFFile(buf);
for (int i = 1; i <= pdffile.getNumPages(); i++) {
PDFPage page = pdffile.getPage(i);
Rectangle rect = new Rectangle(0, 0, ((int) page.getBBox().getWidth()), ((int) page.getBBox().getHeight()));
int n = 2;/*图片清晰度(n>0且n<7)【pdf放大参数】/
Image img = page.getImage(rect.width*n, rect.height*n, rect, /*放大pdf到n倍,创建图片。/
null, /*null for the ImageObserver /
true, /* fill background with white /
true /* block until drawing is done /
);
BufferedImage tag = new BufferedImage(rect.width*n, rect.height*n, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(img, 0, 0, rect.width*n, rect.height*n, null);
/** File imgfile = new File(“D:\work\mybook\FilesNew\img\” + i + “.jpg”);
if(imgfile.exists()){
if(imgfile.createNewFile())
{ System.out.println(“创建图片:”+”D:\work\mybook\FilesNew\img\” + i + “.jpg”);
} else { System.out.println(“创建图片失败!”);
} } */
int j = 1;
String imgPath = saveUrl+"用户id=" + id + "的第"+i+"张申请表.jpg";
list.add(imgPath);
// FileOutputStream out = new FileOutputStream(imgPath); /* 输出到文件流/
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
// param2.setQuality(1f, true);/*1f~0.01f是提高生成的图片质量 /
// encoder.setJPEGEncodeParam(param2);
// encoder.encode(tag);/* JPEG编码 /
// BufferedImage image = ImageIO.read(new File(imgPath));
String formatName = imgPath.substring(imgPath.lastIndexOf(".") + 1);
// FileOutputStream out = new FileOutputStream(dstName);
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// encoder.encode(dstImage);
ImageIO.write(tag, /“GIF”/ formatName /* format desired / , new File(imgPath) / target */ );
//out.close();
}
channel.close();
raf.close();
unmap(buf);/**如果要在转图片之后删除pdf,就必须要这个关闭流和清空缓冲的方法*/
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return list;
}
@SuppressWarnings("unchecked")
private static void unmap(final Object buffer) {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
try {
Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);
getCleanerMethod.setAccessible(true);
sun.misc.Cleaner cleaner = (sun.misc.Cleaner) getCleanerMethod.invoke(buffer, new Object[0]);
cleaner.clean();
} catch (Exception e) {
e.printStackTrace(); }
return null; }
});
}
“`