1. 程式人生 > >Java利用iText操作PDF功能大全

Java利用iText操作PDF功能大全

iText是著名的開放專案,是用於生成PDF文件的一個java類庫。通過iText不僅可以生成PDF或rtf的文件,而且可以將XML、Html檔案轉化為PDF檔案。 

原文地址:https://www.cnblogs.com/liaojie970/p/7132475.html 感謝分享!

http://itextpdf.com/ 
版本:itextpdf-5.2.1.jar 

1、生成一個PDF 

複製程式碼
//Step 1—Create a Document.  
Document document = new Document();  
//Step 2—Get a PdfWriter instance.  
PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createSamplePDF.pdf")); //Step 3—Open the Document. document.open(); //Step 4—Add content. document.add(new Paragraph("Hello World")); //Step 5—Close the Document. document.close();
複製程式碼

2、頁面大小,頁面背景色,頁邊空白,Title,Author,Subject,Keywords

 

複製程式碼
//頁面大小  
Rectangle rect = new Rectangle(PageSize.B5.rotate());  
//頁面背景色  
rect.setBackgroundColor(BaseColor.ORANGE);  
  
Document doc = new Document(rect);  
  
PdfWriter writer = PdfWriter.getInstance(doc, out);  
  
//PDF版本(預設1.4)  
writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2);  
  
//文件屬性 doc.addTitle("[email protected]"); doc.addAuthor("[email protected]"); doc.addSubject("[email protected] sample"); doc.addKeywords("[email protected]"); doc.addCreator("[email protected]"); //頁邊空白 doc.setMargins(10, 20, 30, 40); doc.open(); doc.add(new Paragraph("Hello World"));
複製程式碼

 

3、設定密碼 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(doc, out);  
  
// 設定密碼為:"World"  
writer.setEncryption("Hello".getBytes(), "World".getBytes(),  
        PdfWriter.ALLOW_SCREENREADERS,  
        PdfWriter.STANDARD_ENCRYPTION_128);  
  
doc.open();  
doc.add(new Paragraph("Hello World"));  
複製程式碼

 

4、新增Page 

複製程式碼
document.open();  
document.add(new Paragraph("First page"));  
document.add(new Paragraph(Document.getVersion()));  
  
document.newPage();  
writer.setPageEmpty(false);  
  
document.newPage();  
document.add(new Paragraph("New page"));  
複製程式碼

5、新增水印(背景圖) 

複製程式碼
//圖片水印  
PdfReader reader = new PdfReader(FILE_DIR + "setWatermark.pdf");  
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR  
        + "setWatermark2.pdf"));  
  
Image img = Image.getInstance("resource/watermark.jpg");  
img.setAbsolutePosition(200, 400);  
PdfContentByte under = stamp.getUnderContent(1);  
under.addImage(img);  
  
//文字水印  
PdfContentByte over = stamp.getOverContent(2);  
over.beginText();  
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,  
        BaseFont.EMBEDDED);  
over.setFontAndSize(bf, 18);  
over.setTextMatrix(30, 30);  
over.showTextAligned(Element.ALIGN_LEFT, "DUPLICATE", 230, 430, 45);  
over.endText();  
  
//背景圖  
Image img2 = Image.getInstance("resource/test.jpg");  
img2.setAbsolutePosition(0, 0);  
PdfContentByte under2 = stamp.getUnderContent(3);  
under2.addImage(img2);  
  
stamp.close();  
reader.close();  
複製程式碼

6、插入Chunk, Phrase, Paragraph, List 

複製程式碼
//Chunk物件: a String, a Font, and some attributes  
document.add(new Chunk("China"));  
document.add(new Chunk(" "));  
Font font = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);  
Chunk id = new Chunk("chinese", font);  
id.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);  
id.setTextRise(6);  
document.add(id);  
document.add(Chunk.NEWLINE);  
  
document.add(new Chunk("Japan"));  
document.add(new Chunk(" "));  
Font font2 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);  
Chunk id2 = new Chunk("japanese", font2);  
id2.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);  
id2.setTextRise(6);  
id2.setUnderline(0.2f, -2f);  
document.add(id2);  
document.add(Chunk.NEWLINE);  
  
//Phrase物件: a List of Chunks with leading  
document.newPage();  
document.add(new Phrase("Phrase page"));  
  
Phrase director = new Phrase();  
Chunk name = new Chunk("China");  
name.setUnderline(0.2f, -2f);  
director.add(name);  
director.add(new Chunk(","));  
director.add(new Chunk(" "));  
director.add(new Chunk("chinese"));  
director.setLeading(24);  
document.add(director);  
  
Phrase director2 = new Phrase();  
Chunk name2 = new Chunk("Japan");  
name2.setUnderline(0.2f, -2f);  
director2.add(name2);  
director2.add(new Chunk(","));  
director2.add(new Chunk(" "));  
director2.add(new Chunk("japanese"));  
director2.setLeading(24);  
document.add(director2);  
          
//Paragraph物件: a Phrase with extra properties and a newline  
document.newPage();  
document.add(new Paragraph("Paragraph page"));  
  
Paragraph info = new Paragraph();  
info.add(new Chunk("China "));  
info.add(new Chunk("chinese"));  
info.add(Chunk.NEWLINE);  
info.add(new Phrase("Japan "));  
info.add(new Phrase("japanese"));  
document.add(info);  
  
//List物件: a sequence of Paragraphs called ListItem  
document.newPage();  
List list = new List(List.ORDERED);  
for (int i = 0; i < 10; i++) {  
    ListItem item = new ListItem(String.format("%s: %d movies",  
            "country" + (i + 1), (i + 1) * 100), new Font(  
            Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE));  
    List movielist = new List(List.ORDERED, List.ALPHABETICAL);  
    movielist.setLowercase(List.LOWERCASE);  
    for (int j = 0; j < 5; j++) {  
        ListItem movieitem = new ListItem("Title" + (j + 1));  
        List directorlist = new List(List.UNORDERED);  
        for (int k = 0; k < 3; k++) {  
            directorlist.add(String.format("%s, %s", "Name1" + (k + 1),  
                    "Name2" + (k + 1)));  
        }  
        movieitem.add(directorlist);  
        movielist.add(movieitem);  
    }  
    item.add(movielist);  
    list.add(item);  
}  
document.add(list);  
複製程式碼

7、插入Anchor, Image, Chapter, Section 

複製程式碼
//Anchor物件: internal and external links  
Paragraph country = new Paragraph();  
Anchor dest = new Anchor("china", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD, BaseColor.BLUE));  
dest.setName("CN");  
dest.setReference("http://www.china.com");//external  
country.add(dest);  
country.add(String.format(": %d sites", 10000));  
document.add(country);  
  
document.newPage();  
Anchor toUS = new Anchor("Go to first page.", new Font(Font.FontFamily.HELVETICA, 14, Font.BOLD, BaseColor.BLUE));  
toUS.setReference("#CN");//internal  
document.add(toUS);  
  
//Image物件  
document.newPage();  
Image img = Image.getInstance("resource/test.jpg");  
img.setAlignment(Image.LEFT | Image.TEXTWRAP);  
img.setBorder(Image.BOX);  
img.setBorderWidth(10);  
img.setBorderColor(BaseColor.WHITE);  
img.scaleToFit(1000, 72);//大小  
img.setRotationDegrees(-30);//旋轉  
document.add(img);  
  
//Chapter, Section物件(目錄)  
document.newPage();  
Paragraph title = new Paragraph("Title");  
Chapter chapter = new Chapter(title, 1);  
  
title = new Paragraph("Section A");  
Section section = chapter.addSection(title);  
section.setBookmarkTitle("bmk");  
section.setIndentation(30);  
section.setBookmarkOpen(false);  
section.setNumberStyle(  
Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT);  
  
Section subsection = section.addSection(new Paragraph("Sub Section A"));  
subsection.setIndentationLeft(20);  
subsection.setNumberDepth(1);  
  
document.add(chapter);  
複製程式碼

8、畫圖 

複製程式碼
//左右箭頭  
document.add(new VerticalPositionMark() {  
  
    public void draw(PdfContentByte canvas, float llx, float lly,  
            float urx, float ury, float y) {  
        canvas.beginText();  
        BaseFont bf = null;  
        try {  
            bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS, "", BaseFont.EMBEDDED);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        canvas.setFontAndSize(bf, 12);  
          
        // LEFT  
        canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), llx - 10, y, 0);  
        // RIGHT  
        canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), urx + 10, y + 8, 180);  
          
        canvas.endText();  
    }  
});  
  
//直線  
Paragraph p1 = new Paragraph("LEFT");  
p1.add(new Chunk(new LineSeparator()));  
p1.add("R");  
document.add(p1);  
//點線  
Paragraph p2 = new Paragraph("LEFT");  
p2.add(new Chunk(new DottedLineSeparator()));  
p2.add("R");  
document.add(p2);  
//下滑線  
LineSeparator UNDERLINE = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);  
Paragraph p3 = new Paragraph("NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN");  
p3.add(UNDERLINE);  
document.add(p3);  
複製程式碼

 

9、設定段落 

複製程式碼
Paragraph p = new Paragraph("In the previous example, you added a header and footer with the showTextAligned() method. This example demonstrates 
that it’s sometimes more interesting to use PdfPTable and writeSelectedRows(). You can define a bottom border for each cell so that the header is
 underlined. This is the most elegant way to add headers and footers, because the table mechanism allows you to position and align lines, images, 
and text.");  
  
//預設  
p.setAlignment(Element.ALIGN_JUSTIFIED);  
document.add(p);  
  
document.newPage();  
p.setAlignment(Element.ALIGN_JUSTIFIED);  
p.setIndentationLeft(1 * 15f);  
p.setIndentationRight((5 - 1) * 15f);  
document.add(p);  
  
//居右  
document.newPage();  
p.setAlignment(Element.ALIGN_RIGHT);  
p.setSpacingAfter(15f);  
document.add(p);  
  
//居左  
document.newPage();  
p.setAlignment(Element.ALIGN_LEFT);  
p.setSpacingBefore(15f);  
document.add(p);  
  
//居中  
document.newPage();  
p.setAlignment(Element.ALIGN_CENTER);  
p.setSpacingAfter(15f);  
p.setSpacingBefore(15f);  
document.add(p);  
複製程式碼

10、刪除Page 

複製程式碼
FileOutputStream out = new FileOutputStream(FILE_DIR + "deletePage.pdf");  
  
Document document = new Document();  
  
PdfWriter writer = PdfWriter.getInstance(document, out);  
  
document.open();  
document.add(new Paragraph("First page"));  
document.add(new Paragraph(Document.getVersion()));  
  
document.newPage();  
writer.setPageEmpty(false);  
  
document.newPage();  
document.add(new Paragraph("New page"));  
  
document.close();  
  
PdfReader reader = new PdfReader(FILE_DIR + "deletePage.pdf");  
reader.selectPages("1,3");  
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR  
        + "deletePage2.pdf"));  
stamp.close();  
reader.close();  
複製程式碼

11、插入Page 

複製程式碼
FileOutputStream out = new FileOutputStream(FILE_DIR + "insertPage.pdf");  
  
Document document = new Document();  
  
PdfWriter.getInstance(document, out);  
  
document.open();  
document.add(new Paragraph("1 page"));  
  
document.newPage();  
document.add(new Paragraph("2 page"));  
  
document.newPage();  
document.add(new Paragraph("3 page"));  
  
document.close();  
  
PdfReader reader = new PdfReader(FILE_DIR + "insertPage.pdf");  
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR  
        + "insertPage2.pdf"));  
  
stamp.insertPage(2, reader.getPageSize(1));  
  
ColumnText ct = new ColumnText(null);  
ct.addElement(new Paragraph(24, new Chunk("INSERT PAGE")));  
ct.setCanvas(stamp.getOverContent(2));  
ct.setSimpleColumn(36, 36, 559, 770);  
  
stamp.close();  
reader.close();  
複製程式碼

12、排序page 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(doc, out);  
writer.setLinearPageMode();  
  
doc.open();  
doc.add(new Paragraph("1 page"));  
doc.newPage();  
doc.add(new Paragraph("2 page"));  
doc.newPage();  
doc.add(new Paragraph("3 page"));  
doc.newPage();  
doc.add(new Paragraph("4 page"));  
doc.newPage();  
doc.add(new Paragraph("5 page"));  
  
int[] order = {4,3,2,1};  
writer.reorderPages(order);  
複製程式碼

13、目錄 

複製程式碼
// Code 1  
document.add(new Chunk("Chapter 1").setLocalDestination("1"));  
  
document.newPage();  
document.add(new Chunk("Chapter 2").setLocalDestination("2"));  
document.add(new Paragraph(new Chunk("Sub 2.1").setLocalDestination("2.1")));  
document.add(new Paragraph(new Chunk("Sub 2.2").setLocalDestination("2.2")));  
  
document.newPage();  
document.add(new Chunk("Chapter 3").setLocalDestination("3"));  
  
// Code 2  
PdfContentByte cb = writer.getDirectContent();  
PdfOutline root = cb.getRootOutline();  
  
// Code 3  
@SuppressWarnings("unused")  
PdfOutline oline1 = new PdfOutline(root, PdfAction.gotoLocalPage("1", false), "Chapter 1");  
  
PdfOutline oline2 = new PdfOutline(root, PdfAction.gotoLocalPage("2", false), "Chapter 2");  
oline2.setOpen(false);  
  
@SuppressWarnings("unused")  
PdfOutline oline2_1 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.1", false), "Sub 2.1");  
@SuppressWarnings("unused")  
PdfOutline oline2_2 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.2", false), "Sub 2.2");  
  
@SuppressWarnings("unused")  
PdfOutline oline3 = new PdfOutline(root, PdfAction.gotoLocalPage("3", false), "Chapter 3"); 
複製程式碼

 

14、Header, Footer 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(FILE_DIR + "setHeaderFooter.pdf"));  
  
writer.setPageEvent(new PdfPageEventHelper() {  
  
    public void onEndPage(PdfWriter writer, Document document) {  
          
        PdfContentByte cb = writer.getDirectContent();  
        cb.saveState();  
  
        cb.beginText();  
        BaseFont bf = null;  
        try {  
            bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        cb.setFontAndSize(bf, 10);  
          
        //Header  
        float x = document.top(-20);  
          
        //
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT,  
                           "H-Left",  
                           document.left(), x, 0);  
        //
        cb.showTextAligned(PdfContentByte.ALIGN_CENTER,  
                            writer.getPageNumber()+ " page",  
                           (document.right() + document.left())/2,  
                           x, 0);  
        //
        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT,  
                           "H-Right",  
                           document.right(), x, 0);  
  
        //Footer  
        float y = document.bottom(-20);  
  
        //
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT,  
                           "F-Left",  
                           document.left(), y, 0);  
        //
        cb.showTextAligned(PdfContentByte.ALIGN_CENTER,  
                            writer.getPageNumber()+" page",  
                           (document.right() + document.left())/2,  
                           y, 0);  
        //
        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT,  
                           "F-Right",  
                           document.right(), y, 0);  
  
        cb.endText();  
          
        cb.restoreState();  
    }  
});  
  
doc.open();  
doc.add(new Paragraph("1 page"));          
doc.newPage();  
doc.add(new Paragraph("2 page"));          
doc.newPage();  
doc.add(new Paragraph("3 page"));          
doc.newPage();  
doc.add(new Paragraph("4 page"));  
複製程式碼

15、左右文字 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(document, out);  
  
document.open();  
  
PdfContentByte canvas = writer.getDirectContent();  
  
Phrase phrase1 = new Phrase("This is a test!left");  
Phrase phrase2 = new Phrase("This is a test!right");  
Phrase phrase3 = new Phrase("This is a test!center");  
ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase1, 10, 500, 0);  
ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, phrase2, 10, 536, 0);  
ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, phrase3, 10, 572, 0);
複製程式碼

16、幻燈片放映 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(doc, out);  
  
writer.setPdfVersion(PdfWriter.VERSION_1_5);  
  
writer.setViewerPreferences(PdfWriter.PageModeFullScreen);//全屏  
writer.setPageEvent(new PdfPageEventHelper() {  
    public void onStartPage(PdfWriter writer, Document document) {  
        writer.setTransition(new PdfTransition(PdfTransition.DISSOLVE, 3));  
        writer.setDuration(5);//間隔時間  
    }  
});  
  
doc.open();  
doc.add(new Paragraph("1 page"));  
doc.newPage();  
doc.add(new Paragraph("2 page"));  
doc.newPage();  
doc.add(new Paragraph("3 page"));  
doc.newPage();  
doc.add(new Paragraph("4 page"));  
doc.newPage();  
doc.add(new Paragraph("5 page"));  
複製程式碼

17、壓縮PDF到Zip 

複製程式碼
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(FILE_DIR + "zipPDF.zip"));  
for (int i = 1; i <= 3; i++) {  
    ZipEntry entry = new ZipEntry("hello_" + i + ".pdf");  
    zip.putNextEntry(entry);  
    Document document = new Document();  
    PdfWriter writer = PdfWriter.getInstance(document, zip);  
    writer.setCloseStream(false);  
    document.open();  
    document.add(new Paragraph("Hello " + i));  
    document.close();  
    zip.closeEntry();  
}  
zip.close();  
複製程式碼

 

18、分割PDF 

複製程式碼
FileOutputStream out = new FileOutputStream(FILE_DIR + "splitPDF.pdf");  
  
Document document = new Document();  
  
PdfWriter.getInstance(document, out);  
  
document.open();  
document.add(new Paragraph("1 page"));  
  
document.newPage();  
document.add(new Paragraph("2 page"));  
  
document.newPage();  
document.add(new Paragraph("3 page"));  
  
document.newPage();  
document.add(new Paragraph("4 page"));  
  
document.close();  
  
PdfReader reader = new PdfReader(FILE_DIR + "splitPDF.pdf");  
  
Document dd = new Document();  
PdfWriter writer = PdfWriter.getInstance(dd, new FileOutputStream(FILE_DIR + "splitPDF1.pdf"));  
dd.open();  
PdfContentByte cb = writer.getDirectContent();  
dd.newPage();  
cb.addTemplate(writer.getImportedPage(reader, 1), 0, 0);  
dd.newPage();  
cb.addTemplate(writer.getImportedPage(reader, 2), 0, 0);  
dd.close();  
writer.close();  
  
Document dd2 = new Document();  
PdfWriter writer2 = PdfWriter.getInstance(dd2, new FileOutputStream(FILE_DIR + "splitPDF2.pdf"));  
dd2.open();  
PdfContentByte cb2 = writer2.getDirectContent();  
dd2.newPage();  
cb2.addTemplate(writer2.getImportedPage(reader, 3), 0, 0);  
dd2.newPage();  
cb2.addTemplate(writer2.getImportedPage(reader, 4), 0, 0);  
dd2.close();  
writer2.close();  
複製程式碼

19、合併PDF 

複製程式碼
PdfReader reader1 = new PdfReader(FILE_DIR + "splitPDF1.pdf");  
PdfReader reader2 = new PdfReader(FILE_DIR + "splitPDF2.pdf");  
  
FileOutputStream out = new FileOutputStream(FILE_DIR + "mergePDF.pdf");  
  
Document document = new Document();  
PdfWriter writer = PdfWriter.getInstance(document, out);  
  
document.open();  
PdfContentByte cb = writer.getDirectContent();  
  
int totalPages = 0;  
totalPages += reader1.getNumberOfPages();  
totalPages += reader2.getNumberOfPages();  
  
java.util.List<PdfReader> readers = new ArrayList<PdfReader>();  
readers.add(reader1);  
readers.add(reader2);  
  
int pageOfCurrentReaderPDF = 0;  
Iterator<PdfReader> iteratorPDFReader = readers.iterator();  
  
// Loop through the PDF files and add to the output.  
while (iteratorPDFReader.hasNext()) {  
    PdfReader pdfReader = iteratorPDFReader.next();  
  
    // Create a new page in the target for each source page.  
    while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {  
        document.newPage();  
        pageOfCurrentReaderPDF++;  
        PdfImportedPage page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);  
        cb.addTemplate(page, 0, 0);  
    }  
    pageOfCurrentReaderPDF = 0;  
}  
out.flush();  
document.close();  
out.close();  
複製程式碼

20、Annotation 

複製程式碼
PdfWriter writer = PdfWriter.getInstance(doc, out);  
writer.setLinearPageMode();  
  
doc.open();  
doc.add(new Paragraph("1 page"));  
doc.add(new Annotation("Title", "This is a annotation!"));  
  
doc.newPage();  
doc.add(new Paragraph("2 page"));  
Chunk chunk = new Chunk("\u00a0");  
chunk.setAnnotation(PdfAnnotation.createText(writer, null, "Title", "This is a another annotation!", false, "Comment"));  
doc.add(chunk);  
  
//新增附件  
doc.newPage();  
doc.add(new Paragraph("3 page"));  
Chunk chunk2 = new Chunk("\u00a0\u00a0");  
PdfAnnotation annotation = PdfAnnotation.createFileAttachment(  
        writer, null, "Title", null,  
        "resource/test2.jpg",  
        "img.jpg");  
annotation.put(PdfName.NAME,  
        new PdfString("Paperclip"));  
chunk2.setAnnotation(annotation);  
doc.add(chunk2);  
複製程式碼

 

21、插入一個Table 

複製程式碼
PdfPTable table = new PdfPTable(3);  
PdfPCell cell;  
cell = new PdfPCell(new Phrase("Cell with colspan 3"));  
cell.setColspan(3);  
table.addCell(cell);  
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));  
cell.setRowspan(2);  
table.addCell(cell);  
table.addCell("row 1; cell 1");  
table.addCell("row 1; cell 2");  
table.addCell("row 2; cell 1");  
table.addCell("row 2; cell 2");  
  
document.add(table);  
複製程式碼

22、表格巢狀 

複製程式碼
PdfPTable table = new PdfPTable(4);  
  
//1行2列  
PdfPTable nested1 = new PdfPTable(2);  
nested1.addCell("1.1");  
nested1.addCell("1.2");  
  
//2行1列  
PdfPTable nested2 = new PdfPTable(1);  
nested2.addCell("2.1");  
nested2.addCell("2.2");  
  
//將表格插入到指定位置  
for (int k = 0; k < 24; ++k) {  
    if (k == 1) {  
        table.addCell(nested1);  
    } else if (k == 20) {  
        table.addCell(nested2);  
    } else {  
        table.addCell("cell " + k);  
    }  
}  
  
document.add(table);  
複製程式碼

23、設定表格寬度 

複製程式碼
PdfPTable table = new PdfPTable(3);  
PdfPCell cell;  
cell = new PdfPCell(new Phrase("Cell with colspan 3"));  
cell.setColspan(3);  
table.addCell(cell);  
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));  
cell.setRowspan(2);  
table.addCell(cell);  
table.addCell("row 1; cell 1");  
table.addCell("row 1; cell 2");  
table.addCell("row 2; cell 1");  
table.addCell("row 2; cell 2");  
  
//100%  
table.setWidthPercentage(100);  
document.add(table);          
document.add(new Paragraph("\n\n"));  
  
//寬度50% 居左  
table.setHorizontalAlignment(Element.ALIGN_LEFT);  
document.add(table);  
document.add(new Paragraph("\n\n"));  
  
//寬度50% 居中  
table.setHorizontalAlignment(Element.ALIGN_CENTER);  
document.add(table);  
document.add(new Paragraph("\n\n"));  
  
//寬度50% 居右  
table.setWidthPercentage(50);  
table.setHorizontalAlignment(Element.ALIGN_RIGHT);  
document.add(table);  
document.add(new Paragraph("\n\n"));  
  
//固定寬度  
table.setTotalWidth(300);  
table.setLockedWidth(true);  
document.add(table);  
複製程式碼

24、設定表格前後間隔 

複製程式碼
PdfPTable table = new PdfPTable(3);  
PdfPCell cell = new PdfPCell(new Paragraph("合併3個單元格",fontZH));  
cell.setColspan(3);  
table.addCell(cell);  
table.addCell("1.1");  
table.addCell("2.1");  
table.addCell("3.1");  
table.addCell("1.2");  
table.addCell("2.2");  
table.addCell("3.2");  
  
cell = new PdfPCell(new Paragraph("紅色邊框",fontZH));  
cell.setBorderColor(new BaseColor(255, 0, 0));  
table.addCell(cell);  
  
cell = new PdfPCell(new Paragraph("合併單2個元格",fontZH));  
cell.setColspan(2);  
cell.setBackgroundColor(new BaseColor(0xC0, 0xC0, 0xC0));  
table.addCell(cell);  
  
table.setWidthPercentage(50);  
  
document.add(new Paragraph("追加2個表格",fontZH));  
document.add(table);  
document.add(table);  
  
document.newPage();  
document.add(new Paragraph("使用'SpacingBefore'和'setSpacingAfter'",fontZH));  
table.setSpacingBefore(15f);  
document.add(table);  
document.add(table);  
document.add(new Paragraph("這裡沒有間隔",fontZH));  
table.setSpacingAfter(15f);  
複製程式碼

25、設定單元格寬度 

複製程式碼
//按比例設定單元格寬度  
float[] widths = {0.1f, 0.1f, 0.05f, 0.75f};  
PdfPTable table = new PdfPTable(widths);  
table.addCell("10%");  
table.addCell("10%");  
table.addCell("5%");  
table.addCell("75%");  
table.addCell("aa");  
table.addCell("aa");  
table.addCell("a");  
table.addCell("aaaaaaaaaaaaaaa");  
table.addCell("bb");  
table.addCell("bb");  
table.addCell("b");  
table.addCell("bbbbbbbbbbbbbbb");  
table.addCell("cc");  
table.addCell("cc");  
table.addCell("c");  
table.addCell("ccccccccccccccc");  
document.add(table);  
document.add(new Paragraph("\n\n"));  
  
//調整比例  
widths[0] = 20f;  
widths[1] = 20f;  
widths[2] = 10f;  
widths[3] = 50f;  
table.setWidths(widths);  
document.add(table);  
  
//按絕對值設定單元格寬度  
widths[0] = 40f;  
widths[1] = 40f;  
widths[2] = 20f;  
widths[3] = 300f;  
Rectangle r = new Rectangle(PageSize.A4.getRight(72), PageSize.A4.getTop(72));  
table.setWidthPercentage(widths, r);  
document.add(new Paragraph("\n\n"));  
document.add(table);  
複製程式碼

26、設定單元格高度 

複製程式碼
PdfPTable table = new PdfPTable(2);  
  
PdfPCell cell;  
  
//折行  
table.addCell(new PdfPCell(new Paragraph("折行", fontZH)));  
cell = new PdfPCell(new Paragraph("blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah"));  
cell.setNoWrap(false);  
table.addCell(cell);  
  
//不折行  
table.addCell(new PdfPCell(new Paragraph("不折行", fontZH)));  
cell.setNoWrap(true);  
table.addCell(cell);  
  
//設定高度  
table.addCell(new PdfPCell(new Paragraph("任意高度",fontZH)));  
cell = new PdfPCell(new Paragraph("1. blah blah\n2. blah blah blah\n3. blah blah\n4. blah blah blah\n5. blah blah\n6. blah blah blah\n7. blah blah\n8. blah blah blah"));  
table.addCell(cell);  
  
//固定高度  
table.addCell(new PdfPCell(new Paragraph("固定高度",fontZH)));  
cell.setFixedHeight(50f);  
table.addCell(cell);  
  
//最小高度  
table.addCell(new PdfPCell(new Paragraph("最小高度",fontZH)));  
cell = new PdfPCell(new Paragraph("最小高度:50",fontZH));  
cell.setMinimumHeight(50f);  
table.addCell(cell);  
  
//最後一行拉長到page底部  
table.setExtendLastRow(true);  
table.addCell(new PdfPCell(new Paragraph("拉長最後一行",fontZH)));  
cell = new PdfPCell(new Paragraph("最後一行拉長到page底部",fontZH));  
table.addCell(cell);  
  
document.add(table);  
複製程式碼

27、設定單元格顏色 

複製程式碼
PdfPTable table = new PdfPTable(4);  
PdfPCell cell;  
cell = new PdfPCell(new Paragraph("顏色測試",fontZH));  
table.addCell(cell);  
  
//紅色背景,無邊框  
cell = new PdfPCell(new Paragraph("紅色背景,無邊框",fontZH));  
cell.setBorder(Rectangle.NO_BORDER);  
cell.setBackgroundColor(BaseColor.RED);  
table.addCell(cell);  
  
//綠色背景,下邊框  
cell = new PdfPCell(new Paragraph("綠色背景,下邊框",fontZH));  
cell.setBorder(Rectangle.BOTTOM);  
cell.setBorderColorBottom(BaseColor.MAGENTA);  
cell.setBorderWidthBottom(5f);  
cell.setBackgroundColor(BaseColor.GREEN);