最近項(xiàng)目需要實(shí)現(xiàn)PDF下載的功能,由于沒有這方面的經(jīng)驗(yàn),從網(wǎng)上花了很長(zhǎng)時(shí)間查找了相關(guān)的資料。整理之后,發(fā)現(xiàn)有幾個(gè)框架可以實(shí)現(xiàn)這個(gè)功能。
創(chuàng)新互聯(lián)主要從事網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站開發(fā)、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、成都小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營(yíng)銷、管理等多方位專業(yè)化運(yùn)作于一體。
1. 開源框架支持
2. 實(shí)現(xiàn)方案
比較了一番后,采用了FreeMarker+docx4j+Apache PDFBox的方案:
maven依賴
<!-- pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.11</version> </dependency> <!-- docx4j --> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>3.3.7</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-util</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-export-fo</artifactId> <version>3.3.6</version> </dependency> <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <!-- image --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> <!-- json --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
步驟
1 把pdf文檔對(duì)應(yīng)的word(docx)制作出來
2 把word文檔另存為xml文件
另存為xml
3 將xml文件制作為freemarker模版(ftl)文件
制作模版文件
4 將數(shù)據(jù)和ftl文件組裝為xml文本
Map<String, Object> map = new HashMap<>(); map.put("name", "小明"); map.put("address", "北京市朝陽區(qū)"); map.put("email", "xiaoming@abc.com"); StringWriter stringWriter = new StringWriter(); BufferedWriter writer = new BufferedWriter(stringWriter); template.process(map, writer); String xmlStr = stringWriter.toString();
5 使用docx4j將xml文本加載為word文檔對(duì)象
ByteArrayInputStream in = new ByteArrayInputStream(xmlStr.getBytes()); WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);
6 使用docx4j將word文檔轉(zhuǎn)存為pdf文檔
String outputfilepath = "/Users/xiaoming/簡(jiǎn)歷.pdf"; Docx4J.toPDF(wordMLPackage, new FileOutputStream(new File(outputfilepath)));
7 使用Apache PDFbox將多個(gè)pdf文檔合為一個(gè)
String folderName = "/Users/xiaoming/pdfs"; String destPath = "/Users/xiaoming/all.pdf"; PDFMergerUtility mergePdf = new PDFMergerUtility(); String[] filesInFolder = getFiles(folderName); Arrays.sort(filesInFolder, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); for (int i = 0; i < filesInFolder.length; i++) { mergePdf.addSource(folderName + File.separator + filesInFolder[i ]); } mergePdf.setDestinationFileName(destPath); mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
新聞名稱:Java生成PDF文檔的示例代碼
文章鏈接:http://chinadenli.net/article8/iegoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、微信公眾號(hào)、企業(yè)建站、品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)