将PDF转换为图片

在做将打印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;          }          
              });     
              } 

“`

猜你喜欢

转载自blog.csdn.net/qq_39437863/article/details/78040778