下列例子基于itextpdf-5.5.13.jar
為以下問(wèn)題提供了解決方法:
Unit1:
- 如何生成帶一個(gè)表格的PDF?
- 如何生成帶多個(gè)表格的PDF讶踪?
Unit2:
- 如何生成帶簡(jiǎn)單表格(多行多列)的PDF颂砸?
- 如何生成帶復(fù)雜表格(跨列/跨行)的PDF笼恰?
Unit3:
- 如何使用內(nèi)部字體文件洛心?
- 如何使用外部字體文件缴守?
Unit1-1:如何生成帶一個(gè)表格的PDF葬毫?
SimpleTable.png
import java.io.File;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class SimpleTable {
public static final String DEST = "results/tables/simple_table1.pdf";
public static void main(String[] args) throws DocumentException, Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
SimpleTable.createPDF(DEST);
}
public static void createPDF(String dest) throws Exception, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
//生成一個(gè)2行4列的表格,各列的寬度比為1:2:1:2
PdfPTable table = new PdfPTable(4);
table.setWidths(new int[] { 1, 2, 1, 2 });
table.addCell("1line A");
table.addCell("1line B");
table.addCell("1line C");
table.addCell("1line D");
table.addCell("2line A");
table.addCell("2line B");
table.addCell("2line C");
table.addCell("2line D");
document.add(table);
document.close();
System.out.println(DEST + "生成成功");
}
}
Unit1-2:如何生成帶多個(gè)表格的PDF屡穗?
SimpleTable2.png
1. 在創(chuàng)建第二個(gè)table之前贴捡,新加 document.add(new Phrase("\n"));
。
2. 開(kāi)始創(chuàng)建新的table:table=new PdfTable(colnum);
import java.io.File;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class SimpleTable {
public static final String DEST = "results/tables/simple_table2.pdf";
public static void main(String[] args) throws DocumentException, Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
SimpleTable.createPDF(DEST);
}
public static void createPDF(String dest) throws Exception, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
// 生成一個(gè)2行4列的表格村砂,4列的長(zhǎng)度比為1:2:1:2
PdfPTable table = new PdfPTable(4);
table.setWidths(new int[] { 1, 2, 1, 2 });
table.addCell("1line A");
table.addCell("1line B");
table.addCell("1line C");
table.addCell("1line D");
table.addCell("2line A");
table.addCell("2line B");
table.addCell("2line C");
table.addCell("2line D");
document.add(table);
// 用換行符進(jìn)行表格分割
document.add(new Phrase("\n"));
// 創(chuàng)建第二個(gè)表格
table = new PdfPTable(4);
// 下列代碼與建立第一個(gè)表格的代碼重復(fù)
table.setWidths(new int[] { 1, 2, 1, 2 });
table.addCell("1line A");
table.addCell("1line B");
table.addCell("1line C");
table.addCell("1line D");
table.addCell("2line A");
table.addCell("2line B");
table.addCell("2line C");
table.addCell("2line D");
document.add(table);
document.close();
System.out.println(DEST + "生成成功");
}
}
Unit2-1:如何生成帶簡(jiǎn)單表格(多行多列)PDF烂斋?
該問(wèn)題與Unit1-1相似,不同的是考慮了存在列表數(shù)據(jù)比較多的情況,用了linkedHashMap
進(jìn)行存值汛骂。
table1.png
import java.io.File;
import java.io.FileOutputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class LinkedHashMapTable {
public static final String DEST = "results/tables/table.pdf";
public static void main(String[] args) throws DocumentException, Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
LinkedHashMapTable.createPDF(DEST);
}
public static void createPDF(String dest) throws Exception, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(4);
table.setWidths(new int[] { 1, 2, 1, 2 });
// 通過(guò)有序的LinkedHashMap進(jìn)行key-value存值
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("1Line A", "1Line B");
map.put("1Line C", "1Line D");
map.put("2Line A", "2Line B");
map.put("2Line C", "2Line D");
// 通過(guò)Map.entrySet遍歷key和value
for (Map.Entry<String, String> entry : map.entrySet()) {
table.addCell(entry.getKey());
table.addCell(entry.getValue());
}
document.add(table);
document.close();
System.out.println(DEST + "生成成功");
}
}
Unit2-2:如何生成帶復(fù)雜表格(多行多列)PDF罕模?
row_col.png
import java.io.File;
import java.io.FileOutputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class RowColspan {
public static final String DEST = "results/tables/rowspan_colspan11.pdf";
public static final String FONT = "C:/Windows/Fonts/msyh.ttc,0";
public static void main(String[] args) throws DocumentException, Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
RowColspan.createPDF(DEST);
}
public static void createPDF(String dest) throws DocumentException, Exception {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
BaseFont unicode = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(unicode, 12, Font.NORMAL, new BaseColor(50, 205, 50));
PdfPTable table = new PdfPTable(4);
table.setWidths(new int[] { 1, 2, 1, 2 });
PdfPCell cell;
cell = new PdfPCell(new Phrase("基本信息", font));
// 跨四列,由四列變成一列
cell.setColspan(4);
table.addCell(cell);
// 由四列變成兩列
cell = new PdfPCell(new Phrase("A"));
table.addCell(cell);
cell = new PdfPCell(new Phrase("B"));
cell.setColspan(3);
table.addCell(cell);
// 為了使代碼簡(jiǎn)潔帘瞭,接下來(lái)的存值進(jìn)行遍歷
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("C", "D");
map.put("E", "F");
map.put("G", "H");
map.put("I", "J");
map.put("K", "L");
for (Map.Entry<String, String> entry : map.entrySet()) {
cell = new PdfPCell(new Phrase(entry.getKey()));
table.addCell(cell);
cell = new PdfPCell(new Phrase(entry.getValue()));
cell.setColspan(3);
table.addCell(cell);
}
// 正常四列
table.addCell(new Phrase("第一列", font));
table.addCell(new Phrase("第二列", font));
table.addCell(new Phrase("第三列", font));
table.addCell(new Phrase("第四列", font));
document.add(table);
document.close();
System.out.println(DEST + "生成成功淑掌!");
}
}
Unit3-1:如何使用內(nèi)部字體文件?
如要使用系統(tǒng)自帶的微軟雅黑字體蝶念,
首先抛腕,在類中增加靜態(tài)常量:
public static final String FONT = "C:/Windows/Fonts/msyh.ttc,0";
接著,在方法體里(例如createPDF(String dest){ }
)添加:
BaseFont unicode = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(unicode, 12, Font.NORMAL, new BaseColor(50, 205, 50));
最后媒殉,將設(shè)置后的font格式應(yīng)用到輸入值("第一列")上
new Phrase("第一列", font)
Unit3-2:如何使用外部字體文件担敌?
若要使用從網(wǎng)絡(luò)上下載的字體(如:vista.ttf)
只需把public static final String FONT = "C:/Windows/Fonts/msyh.ttc,0";
改成public static final String FONT = "results/font/vista.ttf";
即可。