亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

南康市| 北流市| 稷山县| 行唐县| 安康市| 海盐县| 琼结县| 长阳| 葫芦岛市| 星座| 丰城市| 准格尔旗| 章丘市| 随州市| 澄迈县| 顺义区| 阳高县| 观塘区| 大城县| 墨江| 洛川县| 吐鲁番市| 会宁县| 白银市| 新津县| 太湖县| 涿鹿县| 百色市| 漠河县| 马关县| 黑山县| 元谋县| 微博| 荥阳市| 怀安县| 巴南区| 康乐县| 满洲里市| 鹤壁市| 云南省| 同德县|