iText是著名的開放項目,是用於生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化為PDF文件。
官方網站:http://itextpdf.com/
示例版本:itextpdf-5.2.1.jar
Rectangle rect = new Rectangle(PageSize.B5.rotate()); //頁面大小 rect.setBackgroundColor(BaseColor.ORANGE); //頁面背景色 Document doc = new Document(rect); PdfWriter writer = PdfWriter.getInstance(doc, out); writer.setPdfVersion(PdfWriter.PDF_VERSION_1_2); //PDF版本(默認1.4) /* 設置密碼 */ writer.setEncryption("Hello".getBytes(), "World".getBytes(), PdfWriter.ALLOW_SCREENREADERS, PdfWriter.STANDARD_ENCRYPTION_128); /* PDF屬性 */ doc.addTitle("Title@sample"); doc.addAuthor("Author@rensanning"); doc.addSubject("Subject@iText sample"); doc.addKeywords("Keywords@iText"); doc.addCreator("Creator@iText"); doc.setMargins(10, 20, 30, 40); doc.open(); doc.add(new Paragraph("Hello World")); //在此處追加內容 document.close();
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"));添加多個Page
PdfReader reader = new PdfReader(FILE_DIR + "deletePage.pdf"); /* 刪除Page */ reader.selectPages("1,3"); PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "deletePage2.pdf")); /* 插入Page */ stamp.insertPage(2, reader.getPageSize(1)); stamp.close(); reader.close(); /* 排序Page */ PdfWriter writer = PdfWriter.getInstance(doc, out); writer.setLinearPageMode(); writer.reorderPages({4,3,2,1});Page刪除、插入、排序
/* 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); /* Anchor對象: internal and external links */ document.newPage(); 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);添加內容
Paragraph p = new Paragraph("段落內容"); /* 對齊方式 */ p.setAlignment(Element.ALIGN_JUSTIFIED); /* 縮進 */ p.setIndentationLeft(1 * 15f); p.setIndentationRight((5 - 1) * 15f); /* 間距 */ p.setSpacingAfter(15f); p.setSpacingBefore(15f);段落設置
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);表格
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"); /* 將表格插入到指定位置 */ table.addCell(nested1); table.addCell(nested2); document.add(table);表格嵌套
PdfPTable table = new PdfPTable(widths); /* 百分比寬度 */ table.setWidthPercentage(50); table.setHorizontalAlignment(Element.ALIGN_RIGHT); //對齊方式 /* 固定寬度 */ table.setTotalWidth(300); table.setLockedWidth(true); /* 上下間距 */ table.setSpacingBefore(15f); table.setSpacingAfter(15f); /* 百分比列寬 */ float[] widths = {40f, 40f, 20f, 80f}; table.setWidths(widths); /* 固定列寬 */ Rectangle r = new Rectangle(PageSize.A4.getRight(72), PageSize.A4.getTop(72)); table.setWidthPercentage(widths, r);表格設置
PdfPTable datatable = new PdfPTable(5); datatable.setWidths({ 9, 4, 8, 10, 8 });// percentage datatable.addCell("Clock #"); datatable.addCell("Trans Type"); datatable.addCell("Cusip"); datatable.addCell("Long Name"); datatable.addCell("Quantity"); datatable.setHeaderRows(1);表格標題行
PdfPCell cell = new PdfPCell(new Paragraph("blah blah")); cell.setNoWrap(false); //自動換行 cell.setFixedHeight(50f); //固定高度 cell.setMinimumHeight(50f); //最小高度 cell.setUseBorderPadding(true); //內填充 cell.setPadding(10f); // 內填充統一 cell.setPaddingTop(0f); //內填充上 cell.setPaddingLeft(20f);//內填充左 cell.setBorder(Rectangle.BOTTOM); //邊框 cell.setBorderColorBottom(BaseColor.MAGENTA); //邊框顏色 cell.setBorderWidthBottom(5f); //邊框寬度 cell.setBackgroundColor(BaseColor.RED); //背景 cell.setGrayFill(0.25f);//背景灰色度 table.setExtendLastRow(true); //最後一行拉長到page底部 cell = new PdfPCell(new Paragraph("page footer",fontZH)); cell = table1.getDefaultCell(); // 默認單元格,提供默認設置單元格設置 水印背景
/* 左右箭頭 */ 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) {} 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);畫圖
/* 添加一些Page */ document.newPage(); 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")); /* 生成大綱 */ PdfContentByte cb = writer.getDirectContent(); PdfOutline root = cb.getRootOutline(); PdfOutline oline1 = new PdfOutline(root, PdfAction.gotoLocalPage("1", false), "Chapter 1"); PdfOutline oline2 = new PdfOutline(root, PdfAction.gotoLocalPage("2", false), "Chapter 2"); PdfOutline oline2_1 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.1", false), "Sub 2.1"); PdfOutline oline2_2 = new PdfOutline(oline2, PdfAction.gotoLocalPage("2.2", false), "Sub 2.2"); PdfOutline oline3 = new PdfOutline(root, PdfAction.gotoLocalPage("3", false), "Chapter 3");目錄大綱
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) {} 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(); } });頁眉頁腳
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);//間隔時間 } });幻燈片放映 條形碼
/* 實現FontProvider接口比如叫MyFontProvider,在getFont()方法裡設置你的字體庫 */ HashMap providers = new HashMap(); providers.put(HTMLWorker.FONT_PROVIDER, new MyFontProvider()); List<Element> list = HTMLWorker.parseToList(new StringReader(html),new StyleSheet(),providers); for (Element e : list) { document.add(e); }自定義字體
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 合並PDF
Document document = new Document(PageSize.LETTER); PdfWriter.getInstance(document, new FileOutputStream("c://testpdf1.pdf")); document.open(); HTMLWorker htmlWorker = new HTMLWorker(document); htmlWorker.parse(new StringReader("<h1>This is a test!</h1>")); document.close();HTML轉換為PDF
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();壓縮為ZIP