亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java使用PDFRenderer實現預覽PDF功能

2024-07-14 08:43:15
字體:
來源:轉載
供稿:網友

本文實例為大家分享了java使用PDFRenderer實現預覽PDF功能,供大家參考,具體內容如下

需要一個jar PDFRenderer-0.9.0.jar

package com.wonders.stpt.attach.action; import java.awt.Image;import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FilenameFilter;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.util.Arrays;import java.util.Comparator;import javax.imageio.*; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFPage;import com.wonders.stpt.attach.model.vo.UploadFile;import com.wonders.stpt.attach.service.FjshService;import com.wonders.stpt.userMsg.action.AbstractParamAction;   @SuppressWarnings("serial")@ParentPackage("struts-default")@Namespace(value="/attach")@Component("attachViewerAction")@Scope("prototype")public class AttachViewerAction extends AbstractParamAction{  private FjshService fjshService; private final int maxPage = 30;   public FjshService getFjshService() { return fjshService; }  @Autowired(required=false) public void setFjshService(@Qualifier("fjshService")FjshService fjshService) { this.fjshService = fjshService; }   /** * PDF文檔在線以圖片格式預覽. *  */ @Action(value="/pdfPreview",results={@Result(name="pdf",location="/attachPreview/pdfViewer.jsp")}) public String pdfPreview() { //按fileId查找出該文件的路徑以及文件名. //該部分代碼copy自附件上傳組件  HttpServletRequest request = servletRequest; HttpServletResponse response = servletResponse;  String fileId = request.getParameter("fileId"); if("".equals(fileId) || null == fileId) {  servletRequest.setAttribute("state", "f");  return "pdf"; }  UploadFile upFile = this.fjshService.loadFileById(fileId); if(upFile == null) {  servletRequest.setAttribute("state", "f");  return "pdf"; } String path = upFile.getPath();   // 文件所在磁盤路徑. String fileName = upFile.getFileAllName(); // 真實文件名. String saveFileName = upFile.getSaveFileName(); // 磁盤上的文件名. String version = upFile.getVersion(); if ("old".equals(request.getParameter("ver"))){  if (version != null){  saveFileName = saveFileName.replace(".dat","_v"+version+".dat");  } }  //當前應用絕對路徑 String appPath = request.getSession().getServletContext().getRealPath ("");   String imageSavePath = appPath + "//preview_images//";    //按照文件路徑讀取PDF文檔,并將其按頁轉換為圖片  String filePath = path + saveFileName ;  if(filePath == null || "".equals(filePath)) {  servletRequest.setAttribute("state", "f");  return "pdf"; }else {  PDFFile pdfFile = this.getPdfFile(filePath);  if(this.pdf2Images(pdfFile,imageSavePath,String.valueOf(upFile.getId()))) { //如果轉換成功  return "pdf";  }else {  servletRequest.setAttribute("state", "f");  return "pdf";  }    }   }  /** * 圖片文件在線預覽 *  */ @Action(value="/imagePreview",results={@Result(name="image",location="/attachPreview/imageViewer.jsp")}) public String imagePreview() { //按fileId查找出該文件的路徑以及文件名. //該部分代碼copy自附件上傳組件  HttpServletRequest request = servletRequest; HttpServletResponse response = servletResponse;  String fileId = request.getParameter("fileId"); if("".equals(fileId) || null == fileId) {  servletRequest.setAttribute("state", "f");  return "image"; }  UploadFile upFile = this.fjshService.loadFileById(fileId); if(upFile == null) {  servletRequest.setAttribute("state", "f");  return "image"; } String path = upFile.getPath();   // 文件所在磁盤路徑. String fileName = upFile.getFileAllName(); // 真實文件名. String saveFileName = upFile.getSaveFileName(); // 磁盤上的文件名. String version = upFile.getVersion(); if ("old".equals(request.getParameter("ver"))){  if (version != null){  saveFileName = saveFileName.replace(".dat","_v"+version+".dat");  } }  //當前應用絕對路徑 String appPath = request.getSession().getServletContext().getRealPath ("");   String imageSavePath = appPath + "//preview_images//";    //按照文件路徑讀取文件 String filePath = path + saveFileName ; if(filePath == null || "".equals(filePath)) {  servletRequest.setAttribute("state", "f");  return "image"; }else {  //如果成功讀取文件  String imageName = String.valueOf(upFile.getId());  String extName = upFile.getFileExtName();  if(getImageFile(filePath,imageSavePath,imageName,extName)) {  return "image";  }else {  servletRequest.setAttribute("state", "f");  return "image";  }  }  }  /** * image文件讀取.  * @param filePath -- 待讀取文件的路徑. * @param imageSavePath -- 圖片保存路徑. * @param imageName -- 圖片文件保存后的文件名稱(包括后綴). * @return boolean instance. */ private boolean getImageFile(String filePath,String imageSavePath,String dirName,String extName) {  String path = imageSavePath + dirName + "//"; File file = new File(path); if(!file.exists()){ //判斷以文件名命名的文件夾是否存在.  file.mkdirs(); }  try {  InputStream is = new FileInputStream(filePath);    String imagePath = path + dirName + "." + extName;  FileOutputStream os = new FileOutputStream(imagePath); // 輸出到文件流.  byte[] buffer = new byte[1024];  int n = 0;  while ((n = is.read(buffer, 0, 1024)) > 0) {  os.write(buffer, 0, n);  }  os.close();  is.close();   } catch (Exception ex) {  ex.printStackTrace();  return false; }   servletRequest.setAttribute("state", "s"); servletRequest.setAttribute("dirName", dirName); servletRequest.setAttribute("imageName", dirName + "." + extName); return true; }  /** * PDF文檔讀取.  * @param filePath -- 待讀取PDF文件的路徑. * @return null 或者 PDFFile instance. */ private PDFFile getPdfFile(String filePath) { try {  //load a pdf file from byte buffer.  File file = new File(filePath);  RandomAccessFile raf = new RandomAccessFile(file, "r");  FileChannel channel = raf.getChannel();  ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,   channel.size());  PDFFile pdfFile = new PDFFile(buf);   return pdfFile; } catch (Exception ex) {  ex.printStackTrace(); } return null; }  /** * PDF文檔按頁轉換為圖片. * @param pdfFile -- PDFFile instance * @param imageSavePath -- 圖片保存路徑. * @param fileName -- 保存圖片文件夾名稱. */  private boolean pdf2Images(PDFFile pdfFile,String imageSavePath,String fileName) { if(pdfFile == null ) { //待轉換文檔不存在,返回false.  return false; }  //將轉換后圖片存放于path路徑下  String path = imageSavePath + fileName + "//"; File filePath = new File(path); if(!filePath.exists()){ //判斷以文件名命名的文件夾是否存在.  filePath.mkdirs(); }  //取得當前文件夾下的所有jpg格式的文件名. String[] imageNames = filePath.list(new ImageFilter());  if(imageNames.length == 0) { //當前文件夾下沒有文件.  //將pdf文檔按頁轉為圖片.  String imagePath = "";  try {  //對轉換頁數進行限制,最多只轉換前maxPage頁.  int pages = pdfFile.getNumPages();  if(pages > maxPage){   pages = maxPage;  }    for (int i = 1; i <= pages; i++) {   // draw the page to an image   PDFPage page = pdfFile.getPage(i);   // get the width and height for the doc at the default zoom   Rectangle rect = new Rectangle(0,         0,         (int) page.getBBox().getWidth(),         (int) page.getBBox().getHeight());   // generate the image   Image img = page.getImage(rect.width, rect.height, // width & height       rect, // clip rect       null, // null for the ImageObserver       true, // fill background with white       true // block until drawing is done       );         BufferedImage tag = new BufferedImage(rect.width,         rect.height,        BufferedImage.TYPE_INT_RGB);      tag.getGraphics().drawImage(img,       0,      0,      rect.width,      rect.height,      null);         imagePath = path + i + ".jpg";   FileOutputStream out = new FileOutputStream(imagePath); // 輸出到文件流.   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   encoder.encode(tag);  // JPEG編碼.   out.close();  }    }catch (Exception ex) {  ex.printStackTrace();  return false;  } }  //取得當前文件夾下的所有jpg格式的文件名. imageNames = filePath.list(new ImageFilter()); //對文件名排序. Arrays.sort(imageNames,new FileNameComparator());  servletRequest.setAttribute("state", "s"); servletRequest.setAttribute("fileName", fileName); servletRequest.setAttribute("imageNames", imageNames);  return true; }  //圖片后綴名過濾類  //圖片jpg過濾器類 class ImageFilter implements FilenameFilter {  public boolean isImageFile(String fileName){   if(fileName.toLowerCase().endsWith("jpg")) {   return true;   }else {   return false;   }    }    public ImageFilter() {}    public boolean accept(File dir,String name){  return isImageFile(name);  } }  //文件名稱比較類  class FileNameComparator implements Comparator { public final int compare(Object first, Object second) {   String[] fir = ((String)first).split("//.");   String[] sec = ((String)second).split("//.");      int firstPage = Integer.parseInt(fir[0]);   int secondPage = Integer.parseInt(sec[0]);   int diff = firstPage - secondPage;   if (diff > 0)   return 1;   if (diff < 0)   return -1;   else   return 0; } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内免费久久久久久久久久久| 大伊人狠狠躁夜夜躁av一区| 日韩欧美a级成人黄色| 亚洲人成网在线播放| 欧美超级乱淫片喷水| 青青a在线精品免费观看| 国产精品免费久久久| 成人国产精品久久久久久亚洲| 日韩一区二区精品视频| 日韩电影第一页| 国产一区二区香蕉| 国产精品一区av| 国产美女精品视频| 亚洲精品久久在线| 91精品国产色综合久久不卡98口| 欧美性生交大片免网| 亚洲欧洲美洲在线综合| 欧美视频中文在线看| 久久免费视频网站| 尤物yw午夜国产精品视频明星| 日本久久久久亚洲中字幕| 亚洲最大的网站| 国产精品久久久久久影视| 亚洲a成v人在线观看| 久久伊人精品一区二区三区| 亚洲加勒比久久88色综合| 亚洲欧美激情在线视频| 亚洲91精品在线观看| 国产小视频国产精品| 欧美精品videosex极品1| 91精品久久久久久久久久久久久| 欧美一级片在线播放| 亚洲精品欧美日韩专区| 91精品视频免费| 中文字幕亚洲无线码a| 91精品国产乱码久久久久久久久| 久久久久久久999精品视频| 视频一区视频二区国产精品| 日韩在线观看免费高清完整版| 5278欧美一区二区三区| 欧洲日韩成人av| 91精品国产高清自在线看超| 久久久噜噜噜久久久| 久色乳综合思思在线视频| 久久亚洲精品视频| 日韩欧美在线视频观看| 亚洲一区二区中文| 一二美女精品欧洲| 亚洲美女av在线| 中文字幕日韩在线视频| 日韩av片电影专区| 成人在线精品视频| 欧美日韩日本国产| 国产亚洲综合久久| 粗暴蹂躏中文一区二区三区| 国产精品成人观看视频国产奇米| 国内精品久久久久影院 日本资源| 久久成人精品视频| 国产mv免费观看入口亚洲| xvideos亚洲人网站| 亚洲精品国产福利| 在线视频一区二区| 国产97人人超碰caoprom| 成人a在线观看| 日韩精品免费在线视频| 国产黑人绿帽在线第一区| 亚洲性视频网站| 久久久久久欧美| 国产精品十八以下禁看| 中文字幕精品www乱入免费视频| 欧美性猛交xxxxx水多| 国产精品丝袜久久久久久不卡| 国产亚洲一区精品| 2019亚洲男人天堂| 亚洲白拍色综合图区| 亚洲乱码国产乱码精品精天堂| 2019最新中文字幕| 色www亚洲国产张柏芝| 成人黄色av免费在线观看| 国产一区二区三区视频免费| 成人福利视频网| 97精品在线观看| 久久国产加勒比精品无码| 亚洲欧美制服综合另类| 538国产精品一区二区在线| 欧美孕妇与黑人孕交| 欧美性在线观看| 国产精品视频午夜| 亚洲va国产va天堂va久久| 欧美性xxxxx极品娇小| 亚洲精品久久久一区二区三区| 欧美午夜精品久久久久久人妖| 97视频在线看| 国产美女久久久| 这里只有精品丝袜| 中文字幕亚洲自拍| 国产精品白丝jk喷水视频一区| 欧美巨猛xxxx猛交黑人97人| 欧美日韩国产丝袜美女| 精品国产一区二区三区四区在线观看| 国内精品一区二区三区四区| www.欧美免费| 欧美国产亚洲精品久久久8v| www欧美日韩| 亚洲欧美日韩一区在线| 精品久久久免费| 成人h片在线播放免费网站| 91在线|亚洲| 成人疯狂猛交xxx| 日韩av综合网| 九九久久久久99精品| 午夜精品久久久久久久久久久久久| 国产在线精品一区免费香蕉| 国产裸体写真av一区二区| 国产精品视频成人| 日韩人在线观看| 国产亚洲一级高清| 久久精品国产久精国产一老狼| 性欧美视频videos6一9| 午夜剧场成人观在线视频免费观看| 日韩欧美黄色动漫| 国产精品吹潮在线观看| 久久精品99久久香蕉国产色戒| 亚洲综合在线小说| 中文国产成人精品| 亚洲第一在线视频| 自拍偷拍亚洲在线| 91色视频在线观看| 韩国三级电影久久久久久| 国产精品a久久久久久| 中文字幕欧美日韩| 色吧影院999| 久久久久国产视频| 中文字幕亚洲国产| 久久久噜噜噜久久中文字免| 成人精品久久一区二区三区| 黄色成人在线播放| 日本久久久久亚洲中字幕| 久久精品国产99国产精品澳门| 日韩国产欧美精品一区二区三区| 欧美激情xxxxx| 亚洲字幕一区二区| 欧美最顶级的aⅴ艳星| 夜夜狂射影院欧美极品| 最新的欧美黄色| 亚洲综合国产精品| 性欧美暴力猛交69hd| 久久亚洲精品小早川怜子66| 亚洲国产天堂网精品网站| 精品综合久久久久久97| 亚洲精品午夜精品| 欧美日韩在线观看视频| 在线观看免费高清视频97| 夜夜嗨av一区二区三区四区| 成人亚洲欧美一区二区三区| 亚洲精品日韩av| 久久久久久久影院| 一区二区三区在线播放欧美| 黄色一区二区三区| 久久艹在线视频| 久久精品亚洲一区| 亚洲在线观看视频| 国产欧美一区二区三区四区| 成人性生交大片免费看小说|