利用Java与iText创建PDF文件

13年前
这篇文章将介绍如何使用iText5.0.x和Java来创建PDF文件。iText是一个开源的Java类库,可用于创建、读取和操作PDF文件。iText Jar包下载地址:http://sourceforge.net/projects/itext/下面是一个创建PDF文件的Java源代码:
package de.vogella.pdf.write;    import java.io.FileOutputStream;  import java.util.Date;    import com.itextpdf.text.Anchor;  import com.itextpdf.text.BadElementException;  import com.itextpdf.text.BaseColor;  import com.itextpdf.text.Chapter;  import com.itextpdf.text.Document;  import com.itextpdf.text.DocumentException;  import com.itextpdf.text.Element;  import com.itextpdf.text.Font;  import com.itextpdf.text.List;  import com.itextpdf.text.ListItem;  import com.itextpdf.text.Paragraph;  import com.itextpdf.text.Phrase;  import com.itextpdf.text.Section;  import com.itextpdf.text.pdf.PdfPCell;  import com.itextpdf.text.pdf.PdfPTable;  import com.itextpdf.text.pdf.PdfWriter;    public class FirstPdf {   private static String FILE = "c:/temp/FirstPdf.pdf";   private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,     Font.BOLD);   private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,     Font.NORMAL, BaseColor.RED);   private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16,     Font.BOLD);   private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,     Font.BOLD);     public static void main(String[] args) {    try {     Document document = new Document();     PdfWriter.getInstance(document, new FileOutputStream(FILE));     document.open();     addMetaData(document);     addTitlePage(document);     addContent(document);     document.close();    } catch (Exception e) {     e.printStackTrace();    }   }     // iText allows to add metadata to the PDF which can be viewed in your Adobe   // Reader   // under File -> Properties   private static void addMetaData(Document document) {    document.addTitle("My first PDF");    document.addSubject("Using iText");    document.addKeywords("Java, PDF, iText");    document.addAuthor("Lars Vogel");    document.addCreator("Lars Vogel");   }     private static void addTitlePage(Document document)     throws DocumentException {    Paragraph preface = new Paragraph();    // We add one empty line    addEmptyLine(preface, 1);    // Lets write a big header    preface.add(new Paragraph("Title of the document", catFont));      addEmptyLine(preface, 1);    // Will create: Report generated by: _name, _date    preface.add(new Paragraph(      "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$      smallBold));    addEmptyLine(preface, 3);    preface.add(new Paragraph(      "This document describes something which is very important ",      smallBold));      addEmptyLine(preface, 8);      preface.add(new Paragraph(      "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).",      redFont));      document.add(preface);    // Start a new page    document.newPage();   }     private static void addContent(Document document) throws DocumentException {    Anchor anchor = new Anchor("First Chapter", catFont);    anchor.setName("First Chapter");      // Second parameter is the number of the chapter    Chapter catPart = new Chapter(new Paragraph(anchor), 1);      Paragraph subPara = new Paragraph("Subcategory 1", subFont);    Section subCatPart = catPart.addSection(subPara);    subCatPart.add(new Paragraph("Hello"));      subPara = new Paragraph("Subcategory 2", subFont);    subCatPart = catPart.addSection(subPara);    subCatPart.add(new Paragraph("Paragraph 1"));    subCatPart.add(new Paragraph("Paragraph 2"));    subCatPart.add(new Paragraph("Paragraph 3"));      // Add a list    createList(subCatPart);    Paragraph paragraph = new Paragraph();    addEmptyLine(paragraph, 5);    subCatPart.add(paragraph);      // Add a table    createTable(subCatPart);      // Now add all this to the document    document.add(catPart);      // Next section    anchor = new Anchor("Second Chapter", catFont);    anchor.setName("Second Chapter");      // Second parameter is the number of the chapter    catPart = new Chapter(new Paragraph(anchor), 1);      subPara = new Paragraph("Subcategory", subFont);    subCatPart = catPart.addSection(subPara);    subCatPart.add(new Paragraph("This is a very important message"));      // Now add all this to the document    document.add(catPart);     }     private static void createTable(Section subCatPart)     throws BadElementException {    PdfPTable table = new PdfPTable(3);      // t.setBorderColor(BaseColor.GRAY);    // t.setPadding(4);    // t.setSpacing(4);    // t.setBorderWidth(1);      PdfPCell c1 = new PdfPCell(new Phrase("Table Header 1"));    c1.setHorizontalAlignment(Element.ALIGN_CENTER);    table.addCell(c1);      c1 = new PdfPCell(new Phrase("Table Header 2"));    c1.setHorizontalAlignment(Element.ALIGN_CENTER);    table.addCell(c1);      c1 = new PdfPCell(new Phrase("Table Header 3"));    c1.setHorizontalAlignment(Element.ALIGN_CENTER);    table.addCell(c1);    table.setHeaderRows(1);      table.addCell("1.0");    table.addCell("1.1");    table.addCell("1.2");    table.addCell("2.1");    table.addCell("2.2");    table.addCell("2.3");      subCatPart.add(table);     }     private static void createList(Section subCatPart) {    List list = new List(true, false, 10);    list.add(new ListItem("First point"));    list.add(new ListItem("Second point"));    list.add(new ListItem("Third point"));    subCatPart.add(list);   }     private static void addEmptyLine(Paragraph paragraph, int number) {    for (int i = 0; i < number; i++) {     paragraph.add(new Paragraph(" "));    }   }  }
运行后的效果图: