中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 生成PDF文檔的示例代碼

發布時間:2020-09-30 22:26:27 來源:腳本之家 閱讀:350 作者:翼小白 欄目:編程語言

最近項目需要實現PDF下載的功能,由于沒有這方面的經驗,從網上花了很長時間查找了相關的資料。整理之后,發現有幾個框架可以實現這個功能。

1. 開源框架支持

  • iText,生成PDF文檔,還支持將XML、Html文件轉化為PDF文件;
  • Apache PDFBox,生成、合并PDF文檔;
  • docx4j,生成docx文檔,支持轉換為PDF格式。

2. 實現方案

比較了一番后,采用了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文檔對應的word(docx)制作出來

Java 生成PDF文檔的示例代碼

2 把word文檔另存為xml文件

Java 生成PDF文檔的示例代碼

另存為xml

3 將xml文件制作為freemarker模版(ftl)文件

Java 生成PDF文檔的示例代碼

制作模版文件

4 將數據和ftl文件組裝為xml文本

Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("address", "北京市朝陽區");
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文檔對象

ByteArrayInputStream in = new ByteArrayInputStream(xmlStr.getBytes());
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);

6 使用docx4j將word文檔轉存為pdf文檔

String outputfilepath = "/Users/xiaoming/簡歷.pdf";
Docx4J.toPDF(wordMLPackage, new FileOutputStream(new File(outputfilepath)));

7 使用Apache PDFbox將多個pdf文檔合為一個

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());

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒲城县| 莱芜市| 前郭尔| 孟津县| 汕头市| 瑞丽市| 古交市| 喀喇沁旗| 枣庄市| 潮安县| 谷城县| 台中市| 根河市| 清苑县| 阿巴嘎旗| 尼勒克县| 高雄县| 南川市| 云南省| 安徽省| 额尔古纳市| 白河县| 汕尾市| 错那县| 睢宁县| 甘泉县| 台中县| 黔南| 武邑县| 高州市| 吴忠市| 集贤县| 博罗县| 崇阳县| 拜泉县| 邵武市| 武宁县| 新野县| 庆安县| 徐汇区| 南皮县|