x-easypdf v2.2.0 正式版發布,表格增強

2021-01-07 開源中國

x-easypdf v2.2.0 已經發布,x-easypdf基於pdfbox構建而來,極大降低使用門檻,以組件化的形式進行pdf的構建。簡單易用,僅需一行代碼,便可完成pdf的操作。

本次更新內容如下:
新特性:
1. 新增文檔改變頁面尺寸方法
2. 新增文檔提取器簡單表格的文本內容提取(單行單列)
3. 表格組件功能增強,已支持添加圖片與文本,更靈活的表格定義

原有變更:
1. 移除XEasyPdfUtil工具類
2. 文檔XEasyPdfDocument#image方法變更為imager,返回值變為XEasyPdfDocumentImager(文檔圖像器)
3. 文檔操作完畢,需手動關閉文檔(調用close方法關閉)

問題修復:
1. 修復字體錯誤問題(issue#I2BGJ1,issue#I2BGM3)

表格演示:

String filePath = OUTPUT_PATH + "testTable1.pdf"; List<XEasyPdfRow> rowList = new ArrayList<>(50); List<XEasyPdfCell> cellList; for (int i = 0; i < 100; i++) { cellList = new ArrayList<>(5); for (int j = 0; j < 5; j++) { cellList.add( i%2==0? XEasyPdfHandler.Table.Row.Cell.build(100F, 15F).addContent( XEasyPdfHandler.Text.build("row"+i+"-cell"+j+"中文") ): XEasyPdfHandler.Table.Row.Cell.build(100F, 15F).addContent( XEasyPdfHandler.Text.build("row"+i+"-cell"+j+"中文") ).setBackgroundColor(new Color(0,191,255)) ); } rowList.add(XEasyPdfHandler.Table.Row.build(cellList)); } XEasyPdfHandler.Document.build().setGlobalHeader( XEasyPdfHandler.Header.build( XEasyPdfHandler.Text.build("頁眉頁眉頁眉頁眉頁眉頁眉").setFontSize(20F).setStyle(XEasyPdfTextStyle.CENTER) ) ).addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build(rowList).setStyle(XEasyPdfTableStyle.CENTER).setMarginLeft(50F).setMarginBottom(50F) ) ).setFontPath(FONT_PATH).save(filePath).close();

String filePath = OUTPUT_PATH + "testTable2.pdf"; XEasyPdfHandler.Document.build().addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build( XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("1-1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("1-2") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("1-3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("1-4") ) ).setStyle(XEasyPdfTableStyle.LEFT), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("2-1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("2-2") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("2-3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("2-4") ) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("3-1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("3-2") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("3-3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,15F).addContent( XEasyPdfHandler.Text.build("3-4") ) ).setStyle(XEasyPdfTableStyle.RIGHT) ).setMarginLeft(100F) ) ).setFontPath(FONT_PATH).save(filePath).close();

String imagePath = "D:\\temp\\qrcode_for_gh_cefdd88ec44c_430.jpg"; String filePath = OUTPUT_PATH + "testTable3.pdf"; XEasyPdfHandler.Document.build().addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build( XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(199F,30F).addContent( XEasyPdfHandler.Image.build(new File(imagePath)).setWidth(28F).setHeight(28F) ).setMarginLeft(99F) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,30F).addContent( XEasyPdfHandler.Text.build("2-1") ).setMarginLeft(99F), XEasyPdfHandler.Table.Row.Cell.build(100F,30F).addContent( XEasyPdfHandler.Text.build("2-2") ) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,88F).addContent( XEasyPdfHandler.Text.build("3-1").setMarginTop(-30F) ), XEasyPdfHandler.Table.Row.Cell.build(100F,30F).addContent( XEasyPdfHandler.Text.build("3-2") ), XEasyPdfHandler.Table.Row.Cell.build(100F,30F).addContent( XEasyPdfHandler.Text.build("3-3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,88F).addContent( XEasyPdfHandler.Text.build("3-4").setMarginTop(-30F) ) ).setHeight(30F).setStyle(XEasyPdfTableStyle.CENTER) ).setMarginLeft(100F) ) ).setFontPath(FONT_PATH).save(filePath).close();

你以為這樣就完了麼?其實還可以這樣:

String filePath = OUTPUT_PATH + "testTable4.pdf"; XEasyPdfHandler.Document.build().addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build( XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("2") ).setMarginLeft(100F) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("4") ).setMarginLeft(100F) ).setMarginTop(100F).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("5") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("6") ).setMarginLeft(100F) ).setMarginTop(100F).setStyle(XEasyPdfTableStyle.CENTER) ).setMarginLeft(150F) ) ).setFontPath(FONT_PATH).save(filePath).close();

也可以這樣:

String filePath = OUTPUT_PATH + "testTable5.pdf"; XEasyPdfHandler.Document.build().addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build( XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("2") ).setMarginLeft(100F) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(101F,100F).addContent( XEasyPdfHandler.Text.build("5") ).setMarginLeft(99F) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("3") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("4") ).setMarginLeft(100F) ).setStyle(XEasyPdfTableStyle.CENTER) ).setMarginLeft(150F) ) ).setFontPath(FONT_PATH).save(filePath).close();

甚至是這樣:

String filePath = OUTPUT_PATH + "testTable6.pdf"; XEasyPdfHandler.Document.build().addPage( XEasyPdfHandler.Page.build( XEasyPdfHandler.Table.build( XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("1") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("2") ).setMarginLeft(50F) ).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(101F,100F).addContent( XEasyPdfHandler.Text.build("3") ).setMarginLeft(74F) ).setMarginTop(-50F).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("4") ), XEasyPdfHandler.Table.Row.Cell.build(100F,100F).addContent( XEasyPdfHandler.Text.build("5") ).setMarginLeft(50F) ).setMarginTop(-50F).setStyle(XEasyPdfTableStyle.CENTER), XEasyPdfHandler.Table.Row.build( XEasyPdfHandler.Table.Row.Cell.build(101F,100F).addContent( XEasyPdfHandler.Text.build("6") ).setMarginLeft(74F) ).setMarginTop(-50F).setStyle(XEasyPdfTableStyle.CENTER) ).setMarginLeft(150F) ) ).setFontPath(FONT_PATH).save(filePath).close();

pdf也會很有趣!

相關焦點