pdf文档操作--写操作 PdfUtils java

来源:互联网 发布:js字符串数组方法 编辑:程序博客网 时间:2024/06/05 19:34
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.net.MalformedURLException;import java.util.ArrayList;import java.util.Iterator;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import com.itextpdf.text.Anchor;import com.itextpdf.text.Annotation;import com.itextpdf.text.BaseColor;import com.itextpdf.text.Chapter;import com.itextpdf.text.Chunk;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Element;import com.itextpdf.text.Font;import com.itextpdf.text.Image;import com.itextpdf.text.List;import com.itextpdf.text.ListItem;import com.itextpdf.text.PageSize;import com.itextpdf.text.Paragraph;import com.itextpdf.text.Phrase;import com.itextpdf.text.Rectangle;import com.itextpdf.text.Section;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.ColumnText;import com.itextpdf.text.pdf.PdfAction;import com.itextpdf.text.pdf.PdfAnnotation;import com.itextpdf.text.pdf.PdfContentByte;import com.itextpdf.text.pdf.PdfImportedPage;import com.itextpdf.text.pdf.PdfName;import com.itextpdf.text.pdf.PdfOutline;import com.itextpdf.text.pdf.PdfPCell;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfPageEventHelper;import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfStamper;import com.itextpdf.text.pdf.PdfString;import com.itextpdf.text.pdf.PdfTransition;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.text.pdf.draw.DottedLineSeparator;import com.itextpdf.text.pdf.draw.LineSeparator;import com.itextpdf.text.pdf.draw.VerticalPositionMark;/** * pdf文档操作--写操作 * @author alexgaoyh * */public class CreatePdf {public static final String CHARACTOR_FONT_CH_FILE = "simhei.ttf";  //黑体常规/** * @param args * @throws DocumentException  * @throws DocumentException  * @throws FileNotFoundException  * @throws IOException  */public static void main(String[] args) throws DocumentException, IOException {createSamplePDF();//createPDF();//createPDFwithPassword();//???//addPage();//addMedia();//insertList();//insertImages();//drawPic();//setParagraph();//deletePage();//insertPage();//setPage();//column();//headerAndFooter();//setText();//ppt();//zip();//change();//add();//Annotation();//insertTable();//qiantao();//setTableWidth();//setTable();//setWidthPercentage();//setTableHeight();//setTableColor();//insertImage();//etTableHeader();//setTablepa();//setWrite();//setCell();}/** * 利用iText生成简单的pdf文档,想文档里写字 * iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。  * @throws FileNotFoundException * @throws DocumentException */public static void createSamplePDF() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";//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--alexgaoyh-Test"));//Step 5—Close the Document.document.close();}/** * 生成pdf文档,确定pdf背景纸张大小/颜色,作者,标题,主题…… * @throws DocumentException  * @throws FileNotFoundException  *  */public static void createPDF() throws DocumentException, FileNotFoundException{String FILE_DIR = "F://";//页面大小Rectangle rect = new Rectangle(PageSize.A4);//页面背景色rect.setBackgroundColor(BaseColor.GRAY);Document doc = new Document(rect);PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(FILE_DIR + "createPDF.pdf"));//PDF版本(默认1.4)writer.setPdfVersion(PdfWriter.PDF_VERSION_1_4);//文档属性doc.addTitle("alex@gaoyh");doc.addAuthor("alex@gaoyh");doc.addSubject("alex@gaoyh");doc.addKeywords("alex@gaoyh");doc.addCreator("alex@gaoyh");//页边空白doc.setMargins(10, 20, 30, 40);doc.open();doc.add(new Paragraph("Hello World"));doc.close();}/** * 设置密码 writer.setEncryption() 失敗 * @throws DocumentException * @throws FileNotFoundException */public static void createPDFwithPassword() throws DocumentException, FileNotFoundException{String FILE_DIR = "F://";//Step 1—Create a Document.Document document = new Document();//Step 2—Get a PdfWriter instance.PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFwithPassword.pdf"));writer.setEncryption(null, null, PdfWriter.ALLOW_COPY| PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_128);    //Step 3—Open the Document.document.open();//Step 4—Add content.document.add(new Paragraph("Hello World"));//Step 5—Close the Document.document.close();}/** * 增加页面 * @throws DocumentException  * @throws FileNotFoundException  */public static void addPage() throws FileNotFoundException, DocumentException{ Document document = new Document();    try {      PdfWriter.getInstance(document, new FileOutputStream("F://addpage.pdf"));      document.open();      document.add(new Paragraph("First Page."));      document.setPageSize(PageSize.A4);      document.newPage();      document.add(new Paragraph("This PageSize is A4."));    } catch (DocumentException de) {      System.err.println(de.getMessage());    } catch (IOException ioe) {      System.err.println(ioe.getMessage());    }    document.close();}/** * 增加水印 * @throws IOException  * @throws DocumentException  */public static void addMedia() throws IOException, DocumentException{String FILE_DIR = "F://";//图片水印PdfReader reader = new PdfReader(FILE_DIR + "setuid-dem.pdf");PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "setuid-dem2.pdf"));Image img = Image.getInstance(FILE_DIR + "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(FILE_DIR + "test.jpg");img2.setAbsolutePosition(0, 0);PdfContentByte under2 = stamp.getUnderContent(3);under2.addImage(img2);stamp.close();reader.close();}/** * 插入Chunk, Phrase, Paragraph, List  * @throws DocumentException  * @throws FileNotFoundException  */public static void insertList() throws DocumentException, FileNotFoundException{Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("F://insertList.pdf"));document.open();//Chunk对象: a String, a Font, and some attributesdocument.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 leadingdocument.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 newlinedocument.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 ListItemdocument.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);document.close();}/** * 插入Anchor, Image, Chapter, Section  * @throws DocumentException  * @throws IOException  * @throws MalformedURLException  */public static void insertImages() throws DocumentException, MalformedURLException, IOException{Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("F://setuid-dem.pdf"));document.open();//Anchor对象: internal and external linksParagraph 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");//externalcountry.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");//internaldocument.add(toUS);//Image对象document.newPage();Image img = Image.getInstance("f://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);document.close();}/** * 画图 * @throws DocumentException  * @throws FileNotFoundException  */public static void drawPic() throws DocumentException, FileNotFoundException{String FILE_DIR = "F://";//Step 1—Create a Document.Document document = new Document();//Step 2—Get a PdfWriter instance.PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "drawPic.pdf"));document.open();//左右箭头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);// LEFTcanvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), llx - 10, y, 0);// RIGHTcanvas.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);document.close();}/** * 设置段落 * @throws DocumentException  * @throws FileNotFoundException  */public static void setParagraph() throws FileNotFoundException, DocumentException{Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("F://setParagraph.pdf"));document.open();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);document.close();}public static void deletePage() throws DocumentException, IOException{String FILE_DIR = "F://";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();}/** * 插入page * @throws DocumentException  * @throws IOException  */public static void insertPage() throws DocumentException, IOException{String FILE_DIR = "F://";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();}/** * 排序页面 * @throws FileNotFoundException  * @throws DocumentException  */public static void setPage() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setPage.pdf");Document doc = new Document();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);doc.close();}/** * 目录 * @throws FileNotFoundException  * @throws DocumentException  */public static void column() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "column.pdf");Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, out);document.open();// Code 1document.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 2PdfContentByte 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");document.close();}public static void headerAndFooter() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";Document doc = new Document();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);        //Headerfloat 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"));doc.close();}/** * 左右文字 * @throws FileNotFoundException  * @throws DocumentException  */public static void setText() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";Document document = new Document();FileOutputStream out = new FileOutputStream(FILE_DIR + "setText.pdf");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);document.close();}/** * 设置幻灯片 * @throws FileNotFoundException  * @throws DocumentException  */public static void ppt() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";Document doc = new Document();FileOutputStream out = new FileOutputStream(FILE_DIR + "ppt.pdf");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"));doc.close();}/** * 压缩 * @throws IOException  * @throws DocumentException  */public static void zip() throws IOException, DocumentException{String FILE_DIR = "F://";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();}/** * 分割pdf * @throws DocumentException  * @throws IOException  */public static void change() throws DocumentException, IOException{String FILE_DIR = "F://";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();}/** * 合并pdf * @throws IOException  * @throws DocumentException  */public static void add() throws IOException, DocumentException{String FILE_DIR = "F://";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();}/** * Annotation * @throws DocumentException  * @throws IOException  */public static void Annotation() throws DocumentException, IOException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "Annotation.pdf");Document doc = new Document();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,"f://test.jpg","img.jpg");annotation.put(PdfName.NAME,new PdfString("Paperclip"));chunk2.setAnnotation(annotation);doc.add(chunk2);doc.close();}/** * 插入table * @throws FileNotFoundException  * @throws DocumentException  */public static void insertTable() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "insertTable.pdf");Document doc = new Document();PdfWriter.getInstance(doc, out);doc.open();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");doc.add(table);doc.close();}/** * 表格嵌套 * @throws FileNotFoundException  * @throws DocumentException  */public static void qiantao() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "qiantao.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();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);document.close();}/** * 设置表格宽度 * @throws FileNotFoundException  * @throws DocumentException  */public static void setTableWidth() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTableWidth.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();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);document.close();}/** * 设置表格前后间隔  * @throws FileNotFoundException  * @throws DocumentException  */public static void setTable() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTable.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();PdfPTable table = new PdfPTable(3);PdfPCell cell = new PdfPCell(new Paragraph("合并3个单元格"));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("红色边框"));cell.setBorderColor(new BaseColor(255, 0, 0));table.addCell(cell);cell = new PdfPCell(new Paragraph("合并单2个元格"));cell.setColspan(2);cell.setBackgroundColor(new BaseColor(0xC0, 0xC0, 0xC0));table.addCell(cell);table.setWidthPercentage(50);document.add(new Paragraph("追加2个表格"));document.add(table);document.add(table);document.newPage();document.add(new Paragraph("使用'SpacingBefore'和'setSpacingAfter'"));table.setSpacingBefore(15f);document.add(table);document.add(table);document.add(new Paragraph("这里没有间隔"));table.setSpacingAfter(15f);document.close();}/** * 设置单元格宽度  * @throws FileNotFoundException  * @throws DocumentException  */public static void setWidthPercentage() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setWidthPercentage.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();//按比例设置单元格宽度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);document.close();}/** * 设置单元格高度 * @throws FileNotFoundException  * @throws DocumentException  */public static void setTableHeight() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTableHeight.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();PdfPTable table = new PdfPTable(2);PdfPCell cell;//折行table.addCell(new PdfPCell(new Paragraph("折行")));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("不折行")));cell.setNoWrap(true);table.addCell(cell);//设置高度table.addCell(new PdfPCell(new Paragraph("任意高度")));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("固定高度")));cell.setFixedHeight(50f);table.addCell(cell);//最小高度table.addCell(new PdfPCell(new Paragraph("最小高度")));cell = new PdfPCell(new Paragraph("最小高度:50"));cell.setMinimumHeight(50f);table.addCell(cell);//最后一行拉长到page底部table.setExtendLastRow(true);table.addCell(new PdfPCell(new Paragraph("拉长最后一行")));cell = new PdfPCell(new Paragraph("最后一行拉长到page底部"));table.addCell(cell);document.add(table);document.close();}/** * 设置颜色 * @throws FileNotFoundException  * @throws DocumentException  */public static void setTableColor() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTableColor.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();PdfPTable table = new PdfPTable(4);PdfPCell cell;cell = new PdfPCell(new Paragraph("颜色测试"));table.addCell(cell);//红色背景,无边框cell = new PdfPCell(new Paragraph("红色背景,无边框"));cell.setBorder(Rectangle.NO_BORDER);cell.setBackgroundColor(BaseColor.RED);table.addCell(cell);//绿色背景,下边框cell = new PdfPCell(new Paragraph("绿色背景,下边框"));cell.setBorder(Rectangle.BOTTOM);cell.setBorderColorBottom(BaseColor.MAGENTA);cell.setBorderWidthBottom(5f);cell.setBackgroundColor(BaseColor.GREEN);table.addCell(cell);//蓝色背景,上边框cell = new PdfPCell(new Paragraph("蓝色背景,上边框"));cell.setBorder(Rectangle.TOP);cell.setUseBorderPadding(true);cell.setBorderWidthTop(5f);cell.setBorderColorTop(BaseColor.CYAN);cell.setBackgroundColor(BaseColor.BLUE);table.addCell(cell);cell = new PdfPCell(new Paragraph("背景灰色度"));table.addCell(cell);cell = new PdfPCell(new Paragraph("0.25"));cell.setBorder(Rectangle.NO_BORDER);cell.setGrayFill(0.25f);table.addCell(cell);cell = new PdfPCell(new Paragraph("0.5"));cell.setBorder(Rectangle.NO_BORDER);cell.setGrayFill(0.5f);table.addCell(cell);cell = new PdfPCell(new Paragraph("0.75"));cell.setBorder(Rectangle.NO_BORDER);cell.setGrayFill(0.75f);table.addCell(cell);document.add(table);document.close();}/** * 插入图像 * @throws IOException  * @throws MalformedURLException  * @throws DocumentException  */public static void insertImage() throws MalformedURLException, IOException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "insertImage.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();Image image = Image.getInstance("f://test.jpg");float[] widths = { 1f, 4f };PdfPTable table = new PdfPTable(widths);//插入图片table.addCell(new PdfPCell(new Paragraph("图片测试")));table.addCell(image);//调整图片大小table.addCell("This two");table.addCell(new PdfPCell(image, true));//不调整table.addCell("This three");table.addCell(new PdfPCell(image, false));document.add(table);document.close();}/** * 设置表头 * @throws DocumentException  * @throws FileNotFoundException  */public static void setTableHeader() throws DocumentException, FileNotFoundException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTableHeader.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();String[] bogusData = { "M0065920", "SL", "FR86000P", "PCGOLD",        "119000", "96 06", "2001-08-13", "4350", "6011648299",        "FLFLMTGP", "153", "119000.00" };int NumColumns = 12;// 12PdfPTable datatable = new PdfPTable(NumColumns);int headerwidths[] = { 9, 4, 8, 10, 8, 11, 9, 7, 9, 10, 4, 10 }; // percentagedatatable.setWidths(headerwidths);datatable.setWidthPercentage(100);datatable.getDefaultCell().setPadding(3);datatable.getDefaultCell().setBorderWidth(2);datatable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);datatable.addCell("Clock #");datatable.addCell("Trans Type");datatable.addCell("Cusip");datatable.addCell("Long Name");datatable.addCell("Quantity");datatable.addCell("Fraction Price");datatable.addCell("Settle Date");datatable.addCell("Portfolio");datatable.addCell("ADP Number");datatable.addCell("Account ID");datatable.addCell("Reg Rep ID");datatable.addCell("Amt To Go ");datatable.setHeaderRows(1);//边框datatable.getDefaultCell().setBorderWidth(1);//背景色for (int i = 1; i < 1000; i++) {    for (int x = 0; x < NumColumns; x++) {        datatable.addCell(bogusData[x]);    }}document.add(datatable);document.close();}/** * 分割表格 * @throws FileNotFoundException  * @throws DocumentException  */public static void setTablepa() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setTablepa.pdf");Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, out);document.open();//横向分割PdfContentByte cb = writer.getDirectContent();PdfPTable table = new PdfPTable(10);for (int k = 1; k <= 100; ++k) {    table.addCell("The number " + k);}table.setTotalWidth(400);table.writeSelectedRows(0, 5, 0, -1, 5, 700, cb);table.writeSelectedRows(5, -1, 0, -1, 210, 700, cb);document.close();}/** * 设置单元格留白 * @throws FileNotFoundException  * @throws DocumentException  */public static void setWrite() throws FileNotFoundException, DocumentException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setWrite.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();PdfPTable table = new PdfPTable(2);PdfPCell cell;Paragraph p = new Paragraph("Quick brown fox jumps over the lazy dog. Quick brown fox jumps over the lazy dog.");table.addCell(new PdfPCell(new Paragraph("默认")));table.addCell(p);table.addCell(new PdfPCell(new Paragraph("Padding:10")));cell = new PdfPCell(p);cell.setPadding(10f);table.addCell(cell);table.addCell(new PdfPCell(new Paragraph("Padding:0")));cell = new PdfPCell(p);cell.setPadding(0f);table.addCell(cell);table.addCell(new PdfPCell(new Paragraph("上Padding:0 左Padding:20")));cell = new PdfPCell(p);cell.setPaddingTop(0f);cell.setPaddingLeft(20f);table.addCell(cell);document.add(table);document.newPage();table = new PdfPTable(2);table.addCell(new PdfPCell(new Paragraph("没有Leading")));table.getDefaultCell().setLeading(0f, 0f);table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");table.getDefaultCell().setLeading(14f, 0f);table.addCell(new PdfPCell(new Paragraph("固定Leading:14pt")));table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");table.addCell(new PdfPCell(new Paragraph("相对于字体")));table.getDefaultCell().setLeading(0f, 1.0f);table.addCell("blah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\nblah blah\nblah blah blah\n");document.add(table);document.close();}/** * 设置单元格边框 * @throws DocumentException  * @throws FileNotFoundException  */public static void setCell() throws DocumentException, FileNotFoundException{String FILE_DIR = "F://";FileOutputStream out = new FileOutputStream(FILE_DIR + "setCell.pdf");Document document = new Document();PdfWriter.getInstance(document, out);document.open();//没有边框PdfPTable table1 = new PdfPTable(3);  table1.getDefaultCell().setBorder(PdfPCell.NO_BORDER);  table1.addCell(new Paragraph("Cell 1")); table1.addCell(new Paragraph("Cell 2")); table1.addCell(new Paragraph("Cell 3")); document.add(table1);//边框粗细颜色document.newPage();Rectangle b1 = new Rectangle(0f, 0f);b1.setBorderWidthLeft(6f);b1.setBorderWidthBottom(5f);b1.setBorderWidthRight(4f);b1.setBorderWidthTop(2f);b1.setBorderColorLeft(BaseColor.RED);b1.setBorderColorBottom(BaseColor.ORANGE);b1.setBorderColorRight(BaseColor.YELLOW);b1.setBorderColorTop(BaseColor.GREEN);PdfPTable table2 = new PdfPTable(1);PdfPCell cell =  new PdfPCell(new Paragraph("Cell 1"));cell.cloneNonPositionParameters(b1);table2.addCell(cell);document.add(table2);document.close();}}