关于转PDF的一些方法
1.前端实现将当前页面转生产PDF文档
<script src="https://cdn.bootcss.com/jspdf/1.5.3/jspdf.debug.js"></script> <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script> <script type="text/javascript"> var downPdf = document.getElementById("exportToPdf"); downPdf.onclick = function () { html2canvas( document.getElementById("export_content"), { dpi: 172,//导出pdf清晰度 onrendered: function (canvas) { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //pdf页面偏移 var position = 0; //html页面生成的canvas在pdf中图片的宽高(a4纸的尺寸[595.28,841.89]) var imgWidth = 595.28; var imgHeight = 592.28 / contentWidth * contentHeight; var pageData = canvas.toDataURL(\'image/jpeg\', 1.0); var pdf = new jsPDF(\'\', \'pt\', \'a4\'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { pdf.addImage(pageData, \'JPEG\', 0, 0, imgWidth, imgHeight); } else { while (leftHeight > 0) { pdf.addImage(pageData, \'JPEG\', 0, position, imgWidth, imgHeight) leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if (leftHeight > 0) { pdf.addPage(); } } } pdf.save(\'content.pdf\'); }, //背景设为白色(默认为黑色) background: "#fff" }) } </script>
2.将图片附件转换为PDF格式(需要引入com.itextpdf开源包依赖)
1 /** 2 * 将图片转换成pdf文件 3 *imgFilePath 需要被转换的img所存放的位置。 例如imgFilePath="D:\\projectPath\\55555.jpg"; 4 *pdfFilePath 转换后的pdf所存放的位置 例如pdfFilePath="D:\\projectPath\\test.pdf"; 5 * @param imgFilePath pdfFilePath 6 * @return 7 * @throws IOException 8 */ 9 public static void imgToPdf(String imgFilePath, String pdfFilePath)throws Exception { 10 File file=new File(imgFilePath); 11 if(file.exists()){ 12 Document document = new Document(); 13 FileOutputStream fos ; 14 fos = new FileOutputStream(pdfFilePath); 15 PdfWriter.getInstance(document, fos); 16 document.addAuthor("arui"); 17 document.addSubject("test pdf."); 18 document.setPageSize(PageSize.A4); 19 document.open(); 20 Image image = Image.getInstance(imgFilePath); 21 float imageHeight=image.getScaledHeight(); 22 float imageWidth=image.getScaledWidth(); 23 int i=0; 24 while(imageHeight>500||imageWidth>500){ 25 image.scalePercent(100-i); 26 i++; 27 imageHeight=image.getScaledHeight(); 28 imageWidth=image.getScaledWidth(); 29 System.out.println("imageHeight->"+imageHeight); 30 System.out.println("imageWidth->"+imageWidth); 31 } 32 image.setAlignment(Image.ALIGN_CENTER); 33 document.add(image); 34 document.close(); 35 fos.flush(); 36 fos.close(); 37 } 38 }
3.将word格式附件,转换为PDF格式保存(需要引入com.jacob依赖,并且需要将jacob-1.18-x64.dll文件放入jdk里面的bin文件夹)
1 /* 转PDF格式值 */ 2 private static final int wdFormatPDF = 17; 3 /** 4 * Word文档转换 5 * 6 * @param inputFile 7 * @param pdfFile 8 */ 9 public static boolean word2PDF(String inputFile, String pdfFile) { 10 ComThread.InitMTA(true); 11 ActiveXComponent app = null; 12 Dispatch doc = null; 13 try { 14 app = new ActiveXComponent("Word.Application");// 创建一个word对象 15 app.setProperty("Visible", new Variant(false)); // 不可见打开word 16 app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏 17 Dispatch docs = app.getProperty("Documents").toDispatch();// 获取文挡属性 18 // Object[]第三个参数是表示“是否只读方式打开” 19 // 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document 20 doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch(); 21 // 调用Document对象的SaveAs方法,将文档保存为pdf格式 22 // word保存为pdf格式宏,值为17 23 Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17 24 return true; 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } finally { 28 Dispatch.call(doc, "Close", false); 29 System.out.println("关闭文档"); 30 if (app != null) 31 app.invoke("Quit", new Variant[] {}); 32 ComThread.Release(); 33 ComThread.quitMainSTA(); 34 } 35 return false; 36 }
4.将多个PDF文件合并为一个PDF文件方法(需要引入apache.pdfbox开源包依赖)。
/** * pdf合并拼接 * @Title:mulFile2One * @Description: TODO * @date 2019年9月22日 上午10:05:37 * @author yqwang * @param files 文件列表 * @param targetPath 合并到 * @return * @throws IOException */ public static File mulFile2One(List<File> files, String targetPath) throws IOException { // pdf合并工具类 PDFMergerUtility mergePdf = new PDFMergerUtility(); for (File f : files) { if(f.exists() && f.isFile()){ // 循环添加要合并的pdf mergePdf.addSource(f); } } // 设置合并生成pdf文件名称 mergePdf.setDestinationFileName(targetPath); // 合并pdf mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); return new File(targetPath); }
版权声明:本文为song1993原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。