国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 生成 PDF 文檔方案整理

這篇具有很好參考價(jià)值的文章主要介紹了Java 生成 PDF 文檔方案整理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Java 生成 PDF 文檔方案整理

最近項(xiàng)目需要實(shí)現(xiàn)PDF下載的功能,由于沒(méi)有這方面的經(jīng)驗(yàn),從網(wǎng)上花了很長(zhǎng)時(shí)間才找到相關(guān)的資料。整理之后,發(fā)現(xiàn)有如下幾個(gè)框架可以實(shí)現(xiàn)這個(gè)功能。

1. 開(kāi)源框架支持

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

比較:

  • iText開(kāi)源協(xié)議為AGPL,而其他兩個(gè)框架協(xié)議均為Apache License v2.0。
  • 使用PDFBox生成PDF就像畫(huà)圖似的,文字和圖像根據(jù)頁(yè)面坐標(biāo)畫(huà)上去的,需要根據(jù)字?jǐn)?shù)手動(dòng)換行。
  • docx4j用來(lái)生成docx文檔,提供了將WORD文檔轉(zhuǎn)換為PDF文檔的功能,并不能直接生成PDF文檔。

2. 實(shí)現(xiàn)方案

格式復(fù)雜 格式簡(jiǎn)單
數(shù)據(jù)量大 docx4j+freemarker docx4j或PDFBox
數(shù)據(jù)量小 docx4j PDFBox
2.1 純數(shù)據(jù)生成PDF

1.docx4j,適用于生成格式簡(jiǎn)單或格式復(fù)雜且數(shù)據(jù)量小的PDF文檔;
2.Apache PDFBox,適用于生成格式簡(jiǎn)單且數(shù)據(jù)量小的PDF文檔。

1.docx4j
docx4j是一個(gè)開(kāi)源Java庫(kù),用于創(chuàng)建和操作Microsoft Open XML(Word docx,Powerpoint pptx和Excel xlsx)文件。它類似于Microsoft的OpenXML SDK,但適用于Java。docx4j使用JAXB來(lái)創(chuàng)建內(nèi)存中的對(duì)象表示,程序員需要花時(shí)間了解JAXB和Open XML文件結(jié)構(gòu) 。

// word對(duì)象
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// 文檔主體
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
// 換行符
Br br = objectFactory.createBr();
// 段落
P p = objectFactory.createP();
// 段落設(shè)置
PPr ppr = objectFactory.createPPr();
// 文字位置
Jc jc = new Jc();
jc.setVal(je);
ppr.setJc(jc);
// 行設(shè)置
RPr rpr = objectFactory.createRPr();
// 字體設(shè)置
RFonts rFonts = objectFactory.createRFonts();
rFonts.setAscii("Times New Roman");
rFonts.setEastAsia("宋體");
rpr.setRFonts(rFonts);
// 行
R r = objectFactory.createR();
// 文本
Text text = objectFactory.createText();
text.setValue("這是一段普通文本");
r.setRPr(rpr);
r.getContent().add(br);
r.getContent().add(text);
p.getContent().add(r);
p.setPPr(ppr);
// 添加到正文中
mainDocumentPart.addObject(p);
// 導(dǎo)出
//..

2.Apache PDFBox
Apache PDFBox是處理PDF文檔的一個(gè)開(kāi)源的Java工具。該項(xiàng)目允許創(chuàng)建新的PDF文檔,處理現(xiàn)有文檔以及從文檔中提取內(nèi)容的功能。Apache PDFBox還包括幾個(gè)命令行實(shí)用程序。

String formTemplate = "/Users/xiaoming/Desktop/test_pdfbox.pdf";
// 定義文檔對(duì)象
PDDocument document = new PDDocument();
// 定義一頁(yè),大小A4
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
// 獲取字體
PDType0Font font = PDType0Font.load(document, new File("/Users/xiaoming/work/tmp/simsun.ttf"));
// 定義頁(yè)面內(nèi)容流
PDPageContentStream stream = new PDPageContentStream(document, page);
// 設(shè)置字體及文字大小
stream.setFont(font, 12);
// 設(shè)置畫(huà)筆顏色
stream.setNonStrokingColor(Color.BLACK);
// 添加矩形
stream.addRect(29, 797, 100, 14);
// 填充矩形
stream.fill();
stream.setNonStrokingColor(Color.BLACK);
// 文本填充開(kāi)始
stream.beginText();
// 設(shè)置行距
stream.setLeading(18f);
// 設(shè)置文字位置
stream.newLineAtOffset(30, 800);
// 填充文字
stream.showText("呵呵");
// 換行
stream.newLine();
stream.showText("哈哈");
stream.newLine();
stream.showText("嘻嘻");
// 文本填充結(jié)束
stream.endText();
// 關(guān)閉流
stream.close();
// 保存
document.save(formTemplate);
// 釋放資源
document.close();
2.2 模版+數(shù)據(jù)生成PDF

FreeMarker+docx4j,適用于生成格式復(fù)雜且數(shù)據(jù)量大的PDF文檔

Apache FreeMarker是一個(gè)模板引擎,用于根據(jù)模板和更改數(shù)據(jù)生成文本輸出(HTML網(wǎng)頁(yè),電子郵件,配置文件,源代碼等)。模板是用FreeMarker模板語(yǔ)言(FTL)編寫(xiě)的,是一種簡(jiǎn)單的專用語(yǔ)言。

Office2003以上,Word是可以以XML文本格式存儲(chǔ)的。先將要生成的PDF轉(zhuǎn)換為Word文檔 ,再將其保存為XML文本,通過(guò)模版引擎將數(shù)據(jù)填充到XML文本中,最后再反向轉(zhuǎn)換為PDF文檔。簡(jiǎn)單來(lái)說(shuō)就是PDF->Word->XML->Word->PDF的流程。

步驟 描述 工具
1 word -> xml 手動(dòng)
2 xml -> ftl 手動(dòng)
3 ftl + obj = xml freemarker
4 xml -> pdf docx4j
步驟
  • 1 把pdf文檔對(duì)應(yīng)的word(docx)制作出來(lái)
  • 2 把word文檔另存為xml文件
  • 3 將xml文件制作為freemarker模版(ftl)文件
  • 4 將數(shù)據(jù)和ftl文件組裝為xml文本
Map<String, Object> map = new HashMap<>();
map.put("name", "小明");
map.put("address", "北京市朝陽(yáng)區(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";
FileOutputStream os = new FileOutputStream(new File(outputFilePath));
FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setWmlPackage(wordMLPackage);
Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
// Docx4J.toPDF(wordMLPackage, new FileOutputStream(new File(outputfilepath)));
2.3 Word轉(zhuǎn)PDF

docx4j

WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(new File("abc.docx"));
Mapper fontMapper = new IdentityPlusMapper();  
// fontMapper.put("華文行楷", PhysicalFonts.get("STXingkai"));  
mlPackage.setFontMapper(fontMapper);  
OutputStream os = new java.io.FileOutputStream("abc.pdf");    
FOSettings foSettings = Docx4J.createFOSettings();  
foSettings.setWmlPackage(mlPackage);  
Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);  
2.4 合并多個(gè)PDF

Apache PDFBox,將多個(gè)PDF文檔合并文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-791167.html

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

到了這里,關(guān)于Java 生成 PDF 文檔方案整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java超簡(jiǎn)單實(shí)現(xiàn)文檔在線預(yù)覽功能,支持word\excel\text\pdf\圖片等格式轉(zhuǎn)pdf,aspost 轉(zhuǎn)pdf部署linux中文亂碼解決方案

    java超簡(jiǎn)單實(shí)現(xiàn)文檔在線預(yù)覽功能,支持word\excel\text\pdf\圖片等格式轉(zhuǎn)pdf,aspost 轉(zhuǎn)pdf部署linux中文亂碼解決方案

    一、背景 ????????在工作中需要對(duì)上傳到服務(wù)器的各種類型包括但不限于word、pdf、excel等文件進(jìn)行在線預(yù)覽,前端比較菜搞不定,只能本人親自上。 ? ? ? ? 網(wǎng)上的經(jīng)驗(yàn)比較多也比較亂, 有的只有預(yù)覽,沒(méi)有文件格式轉(zhuǎn)換,有的也不說(shuō)linux存在字體問(wèn)題, 本文會(huì)直白的給

    2024年04月10日
    瀏覽(596)
  • JAVA-創(chuàng)建PDF文檔

    JAVA-創(chuàng)建PDF文檔

    目錄 一、前期準(zhǔn)備 1、中文字體文件 2、maven依賴 二、創(chuàng)建PDF文檔方法 三、通過(guò)可填充PDF模板將業(yè)務(wù)參數(shù)進(jìn)行填充 1、?設(shè)置可填充的PDF表單 2、代碼開(kāi)干,代碼填充可編輯PDF并另存文件 本演示使用的是iText 7版本,如果沒(méi)有中文字體,那生成的PDF文檔涉及中文的區(qū)域都無(wú)法顯

    2024年02月07日
    瀏覽(10)
  • PDF 文檔處理:使用 Java 對(duì)比 PDF 找出內(nèi)容差異

    PDF 文檔處理:使用 Java 對(duì)比 PDF 找出內(nèi)容差異

    不論是在團(tuán)隊(duì)寫(xiě)作還是在個(gè)人工作中,PDF 文檔往往會(huì)經(jīng)過(guò)多次修訂和更新。掌握 PDF 文檔內(nèi)容的變化對(duì)于管理文檔有極大的幫助。通過(guò)對(duì)比 PDF 文檔,用戶可以快速找出文檔增加、刪除和修改的內(nèi)容,更好地了解文檔的演變過(guò)程,輕松地管理文檔。本文將介紹如何通過(guò) Java 程

    2024年02月08日
    瀏覽(44)
  • Java實(shí)現(xiàn)Word文檔轉(zhuǎn)PDF,PDF轉(zhuǎn)Word,PDF轉(zhuǎn)Excel,PDF轉(zhuǎn)換工具

    java實(shí)現(xiàn)word文檔轉(zhuǎn)PDF,PDF轉(zhuǎn)word 解決只能轉(zhuǎn)換4頁(yè)問(wèn)題 解決每頁(yè)頭部存在水印問(wèn)題 引入依賴 破解的jar包 鏈接: https://pan.baidu.com/s/1MO8OBuf4FQ937R9KDtofPQ 提取碼: 4tsn 源碼路徑:https://download.csdn.net/download/weixin_43992507/88215577 像流讀取文件這些要關(guān)閉釋放,不然異常報(bào)錯(cuò)文件的讀取不會(huì)

    2024年02月13日
    瀏覽(30)
  • Java給PDF文檔添加水印信息

    ? ? ? ? 在word生成pdf后,或者上傳pdf文件,用戶希望給pdf文檔添加水印信息,具體代碼如下 ? 一. 首先pom中需要引入 核心代碼如下,寫(xiě)在某個(gè) service 下面 用到的實(shí)體類 ?方法測(cè)試

    2024年02月09日
    瀏覽(28)
  • Java:如何加密或解密PDF文檔?

    Java:如何加密或解密PDF文檔?

    在工作中,我們會(huì)將重要的文檔進(jìn)行加密,并且設(shè)置用戶的訪問(wèn)權(quán)限,其他外部人員均無(wú)法打開(kāi),只有獲取該權(quán)限的用戶才有資格打開(kāi)文檔。此外,限制用戶的使用權(quán)限,極大程度上阻止了那些有意要篡改、拷貝其中內(nèi)容的人,提高文檔的安全性。與此同時(shí),文檔加密的另一

    2023年04月13日
    瀏覽(20)
  • SpringBoot+Thymeleaf 后端轉(zhuǎn)html,pdf HTML生成PDF SpringBoot生成PDF Java PDF生成

    SpringBoot+Thymeleaf 后端轉(zhuǎn)html,pdf HTML生成PDF SpringBoot生成PDF Java PDF生成

    本文詳細(xì)介紹了如何使用SpringBoot和Thymeleaf將后端HTML轉(zhuǎn)換為PDF,包括依賴介紹、模板渲染以及PDF生成等步驟。

    2024年02月09日
    瀏覽(69)
  • Java POI導(dǎo)出Word、Excel、Pdf文檔(可在線預(yù)覽PDF)

    Java POI導(dǎo)出Word、Excel、Pdf文檔(可在線預(yù)覽PDF)

    1、導(dǎo)入依賴Pom.xml ? ? ? ?dependency ?? ??? ??? ?groupIdorg.apache.poi/groupId ?? ??? ??? ?artifactIdpoi/artifactId ?? ??? ??? ?version3.14/version ?? ??? ?/dependency 2、Controller? ?3、Service a、pdfService b、wordService c、excelService ?4、Utils 5、模板截圖 ? 6、前端

    2024年02月08日
    瀏覽(92)
  • Java將PDF文件轉(zhuǎn)為Word文檔

    Java將PDF文件轉(zhuǎn)為Word文檔

    一、創(chuàng)建Springboot Maven項(xiàng)目 二、導(dǎo)入依賴信息 三、創(chuàng)建Main類 代碼如下: 效果展示:

    2024年02月11日
    瀏覽(20)
  • 【Java】Java生成PDF工具類

    Java生成PDF工具類是一個(gè)非常實(shí)用的工具類,可以幫助我們以程序化的方式生成PDF文件。通過(guò)該工具類,我們可以向PDF文件中添加文字、圖片、表格等多種內(nèi)容,并且可以進(jìn)行格式化和樣式設(shè)置。Java生成PDF工具類常用于生成報(bào)表、發(fā)票、合同等文檔。 在Java生成PDF文件時(shí),我們

    2024年02月07日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包