需求說(shuō)明
一般來(lái)說(shuō)硅则,要想創(chuàng)建表格冒掌,第一想到的是用Excel文檔噪裕,其次要想在Word,PPT文檔中創(chuàng)建表格也是可行的股毫,因?yàn)樗鼈兌际强删庉嬑臋n膳音。但要想直接在PDF文檔中創(chuàng)建表格似乎不大可行,只能通過(guò)在其他文檔中創(chuàng)建好表格铃诬,然后再進(jìn)行文檔轉(zhuǎn)換祭陷。所以就想是否有辦法可以直接在PDF中創(chuàng)建表格呢苍凛?
解決方案
通過(guò)調(diào)查發(fā)現(xiàn),可通過(guò)后端操作Java代碼來(lái)實(shí)現(xiàn)在PDF文檔中創(chuàng)建表格颗胡。本篇文章就演示下其實(shí)現(xiàn)過(guò)程毫深。
環(huán)境配置:
● Intellij Idea2019.1(下載配置教程戳鏈接)
● JDK 1.8.0(下載安裝教程戳鏈接)
● Spire.Pdf.jar(安裝導(dǎo)入方法見(jiàn)下文)
Jar包導(dǎo)入:
方法一:手動(dòng)導(dǎo)入Jar包至IDEA。具體步驟如下:
步驟 1:在 E-iceblue中文官網(wǎng)注冊(cè)并登陸賬號(hào)毒姨,進(jìn)入Free Spire.PDF for Java下載頁(yè)面下載產(chǎn)品包哑蔫。
步驟 2:解壓產(chǎn)品包,找到lib文件下的Spire.Pdf.jar弧呐。
步驟 3:將Spire.Pdf.jar手動(dòng)導(dǎo)入IDEA中闸迷。
方法二: 通過(guò)Maven倉(cāng)庫(kù)安裝導(dǎo)入產(chǎn)品及相關(guān)依賴。創(chuàng)建一個(gè)Maven應(yīng)用程序俘枫,在pom.xml文件中配置Maven倉(cāng)庫(kù)路徑及指定Spire.Pdf for Java的Maven依賴腥沽。
<repositories>
?<repository>
?<id>com.e-iceblue</id>?
<url>http://repo.e-iceblue.cn/repository/maven-public/</url>
?</repository>
?</repositories>
?<dependencies>?
?<dependency>?
?<groupId> e-iceblue </groupId>
?<artifactId>spire.pdf.free</artifactId>?
?<version>2.6.3</version>
?</dependency>?
?</dependencies>
配置完成后,在IDEA中鸠蚪,您需點(diǎn)擊"Import Changes"即可導(dǎo)入JAR包今阳。
代碼示例
Spire.PDF for Java提供了PdfTable和PdfGrid兩個(gè)類(lèi)來(lái)創(chuàng)建PDF表格。在創(chuàng)建表格的同時(shí)茅信,PdfGrid類(lèi)還支持自定義字體顏色盾舌,粗細(xì);設(shè)置單元格背景色蘸鲸、行高妖谴、邊框樣式、文字對(duì)齊方式酌摇;合并單元格膝舅;插入圖片至單元格等操作。
import com.spire.pdf.PdfBorders;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPaddings;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import com.spire.pdf.grid.PdfGrid;
import java.awt.*;
public class CreateTable { public static void main(String[] args) {?
//創(chuàng)建PDF文檔?
PdfDocument doc = new PdfDocument();?
PdfPageBase page = doc.getPages().add();?
//創(chuàng)建PdfGrid對(duì)象?
PdfGrid grid = new PdfGrid();
//設(shè)置單元格內(nèi)邊距窑多、默認(rèn)字體仍稀、字體顏色和默認(rèn)背景色?
grid.getStyle().setCellPadding(new PdfPaddings(3,3,3,3));?
grid.getStyle().setFont(new PdfTrueTypeFont(new Font("宋體", Font.PLAIN,10), true)); grid.getStyle().setTextBrush(PdfBrushes.getBlack()); grid.getStyle().setBackgroundBrush(PdfBrushes.getLightGray());?
//創(chuàng)建PdfBorders對(duì)象,并設(shè)置顏色及粗細(xì)?
PdfBorders borders= new PdfBorders(); borders.setAll(new PdfPen(PdfBrushes.getWhite(),1f));?
//定義數(shù)據(jù) String[] data = {"洲;國(guó)家;人口;世界人口占比;國(guó)旗", "亞洲;中國(guó);1,391,190,000;18.2%; ", "亞洲;日本;126,490,000;1.66%; ", "歐洲;英國(guó);65,648,054;0.86%; ", "歐洲;德國(guó);82,665,600;1.08%; ", "北美洲; 加拿大; 37,119,000; 0.49%; ", "北美洲; 美國(guó); 327,216,000; 4.29%; " }; String[][] dataSource = new String[data.length][]; for (int i = 0; i < data.length; i++) { dataSource[i] = data[i].split("[;]", -1); }?
//填充數(shù)據(jù)到表格?
grid.setDataSource(dataSource);?
//在表格最后一列填充圖片 grid.getRows().get(1).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\中國(guó)國(guó)旗.png")); grid.getRows().get(2).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\日本國(guó)旗.jpg")); grid.getRows().get(3).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\英國(guó)國(guó)旗.jpg")); grid.getRows().get(4).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\德國(guó)國(guó)旗.jpg")); grid.getRows().get(5).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\加拿大國(guó)旗.jpg")); grid.getRows().get(6).getCells().get(4).getStyle().setBackgroundImage(PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\美國(guó)國(guó)旗.jpg"));?
//設(shè)置最后一列列寬?
grid.getColumns().get(grid.getColumns().getCount()-1).setWidth(60f);?
//縱向合并單元格?
grid.getRows().get(1).getCells().get(0).setRowSpan(2); grid.getRows().get(3).getCells().get(0).setRowSpan(2); grid.getRows().get(5).getCells().get(0).setRowSpan(2); for (int i = 0; i < data.length ; i++) {?
//設(shè)置每一行的高度?
grid.getRows().get(i).setHeight(30f);?
//設(shè)置第一列的背景色 grid.getRows().get(i).getCells().get(0).getStyle().setBackgroundBrush(PdfBrushes.getDarkGray());?
//設(shè)置第一列的字體?
grid.getRows().get(i).getCells().get(0).getStyle().setFont(new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,12),true)); for (int j = 0; j < grid.getColumns().getCount(); j++) {?
//設(shè)置所有單元格的邊框樣式 grid.getRows().get(i).getCells().get(j).getStyle().setBorders(borders);?
//設(shè)置所有單元格內(nèi)的文字對(duì)齊方式?
grid.getRows().get(i).getCells().get(j).setStringFormat(new PdfStringFormat(PdfTextAlignment.Center,PdfVerticalAlignment.Middle));?
//設(shè)置第一行的字體?
grid.getRows().get(0).getCells().get(j).getStyle().setFont(new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,12),true));?
//設(shè)置第一行的背景色 grid.getRows().get(0).getCells().get(j).getStyle().setBackgroundBrush(PdfBrushes.getDarkGray()); } }?
//繪制表格到PDF?
grid.draw(page,0,30);?
//保存文檔?
doc.saveToFile("output/Grid.pdf"); doc.close();?
?}
}
創(chuàng)建效果:
總結(jié)
通過(guò)以上代碼在Java程序的運(yùn)行埂息,最終完成了在PDF文檔中插入自定義表格的需求琳轿。若對(duì)代碼或環(huán)境配置有疑問(wèn)的,歡迎評(píng)論或私信耿芹。覺(jué)得此篇教程對(duì)你有所幫助崭篡,記得點(diǎn)贊+轉(zhuǎn)發(fā)哦~