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 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/song1993/p/13728534.html