首頁>技術>

前篇文章分享到了 透過模板生成word文件的功能,以下接著分享如何透過Java將docx轉成pdf文件。

<dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>   <version>2.0.2</version></dependency><dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.xdocreport.document</artifactId>   <version>2.0.2</version></dependency><dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.xdocreport.template</artifactId>   <version>2.0.2</version></dependency><dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.xdocreport.core</artifactId>   <version>2.0.2</version></dependency><dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>   <version>2.0.2</version></dependency><dependency>   <groupId>fr.opensagres.xdocreport</groupId>   <artifactId>fr.opensagres.poi.xwpf.converter.pdf</artifactId>   <version>2.0.2</version></dependency>

重點強調 fr.opensagres.poi.xwpf.converter.pdf 這個jar包作為關鍵部分,同時也要注意依賴的POI版本 ,如下依賴包一個不能少

<dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi</artifactId>   <version>4.0.1</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi-scratchpad</artifactId>   <version>4.0.1</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi-ooxml</artifactId>   <version>4.0.1</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi-ooxml-schemas</artifactId>   <version>4.0.1</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>ooxml-schemas</artifactId>   <version>1.1</version></dependency><dependency>   <groupId>org.apache.xmlbeans</groupId>   <artifactId>xmlbeans</artifactId>   <version>3.0.2</version></dependency>

程式關鍵就在於依賴的包的版本,依賴不對程式調不通的。核心程式碼如下:

private byte[] convertPdf(byte[] bytes){    ByteArrayOutputStream out = new ByteArrayOutputStream();    try{        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);        XWPFDocument document = new XWPFDocument(bis);        PdfOptions options = PdfOptions.create();        PdfConverter.getInstance().convert(document, out, options);    }catch (Exception e){        e.printStackTrace();    }    return out.toByteArray();}

關鍵程式碼只有三行,程式碼算是很簡單了。

接下來實現PDF列印功能

這裡也是摸索特別久的地方,最初找到列印程式碼參考的

https://my.oschina.net/960823/blog/2994220 ,這裡應該是對大型的A4印表機有效的,具體還沒測試,但是對於這種小型的條碼印表機或者票據印表機無效。提示不支援的型別。

本來要放棄迴歸原始手段的時候,發現了另外一篇文章 https://cloud.tencent.com/developer/article/1028615 ,抱著死馬當成活馬醫的態度,先試試再說,沒想到就成功了。

下面記錄我的步驟:

1、引入pdfbox

<dependency>   <groupId>org.apache.pdfbox</groupId>   <artifactId>pdfbox</artifactId>   <version>2.0.22</version></dependency>

2、編寫列印程式碼

// 定位預設的列印服務PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();System.out.println(defaultService.getName());try {    PrinterJob job = PrinterJob.getPrinterJob();// 建立列印作業    PDDocument document = PDDocument.load(pdf);    PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);    job.setPrintable(pdfPrintable);    job.setPrintService(defaultService);    Paper paper = new Paper();    paper.setSize(133.8, 384);    paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());    PageFormat pageFormat = new PageFormat();    pageFormat.setPaper(paper);    Book book = new Book();    book.append(pdfPrintable, pageFormat, 1);    job.setPageable(book);    //設定列印份數    job.setCopies(1);    job.print();    document.close();} catch (Exception e) {    e.printStackTrace();    return false;}

經測試,效果完美!

是不是很完美

後面繼續分享如何改造前端頁面部分 #Vue.js# #ant#

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • K-Means演算法原理及其python實現(學習筆記)