- 浏览: 2144113 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
http://freemarker.org/
版本:itextpdf-5.2.1.jar
1、生成一个PDF
2、页面大小,页面背景色,页边空白,Title,Author,Subject,Keywords
3、设置密码
4、添加Page
5、添加水印(背景图)
6、插入Chunk, Phrase, Paragraph, List
7、插入Anchor, Image, Chapter, Section
8、画图
9、设置段落
10、删除Page
11、插入Page
12、排序page
13、目录
14、Header, Footer
15、左右文字
16、幻灯片放映
17、压缩PDF到Zip
18、分割PDF
19、合并PDF
20、Annotation
21、插入一个Table
22、表格嵌套
23、设置表格宽度
24、设置表格前后间隔
25、设置单元格宽度
26、设置单元格高度
27、设置单元格颜色
28、插入图像
29、设置表头
30、分割表格
31、设置单元格留白
32、设置单元格边框
33、PdfPTableEvent
34、PdfPCellEvent
35、PdfPageEventHelper
http://freemarker.org/
版本: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("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"));
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); table.addCell(cell); //蓝色背景,上边框 cell = new PdfPCell(new Paragraph("蓝色背景,上边框",fontZH)); 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("背景灰色度",fontZH)); 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);
28、插入图像
Image image = Image.getInstance("resource/test2.jpg"); float[] widths = { 1f, 4f }; PdfPTable table = new PdfPTable(widths); //插入图片 table.addCell(new PdfPCell(new Paragraph("图片测试", fontZH))); 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);
29、设置表头
String[] bogusData = { "M0065920", "SL", "FR86000P", "PCGOLD", "119000", "96 06", "2001-08-13", "4350", "6011648299", "FLFLMTGP", "153", "119000.00" }; int NumColumns = 12; // 12 PdfPTable datatable = new PdfPTable(NumColumns); int headerwidths[] = { 9, 4, 8, 10, 8, 11, 9, 7, 9, 10, 4, 10 }; // percentage datatable.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);
30、分割表格
//横向分割 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);
31、设置单元格留白
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("默认",fontZH))); table.addCell(p); table.addCell(new PdfPCell(new Paragraph("Padding:10",fontZH))); cell = new PdfPCell(p); cell.setPadding(10f); table.addCell(cell); table.addCell(new PdfPCell(new Paragraph("Padding:0",fontZH))); cell = new PdfPCell(p); cell.setPadding(0f); table.addCell(cell); table.addCell(new PdfPCell(new Paragraph("上Padding:0 左Padding:20",fontZH))); 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",fontZH))); 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",fontZH))); 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("相对于字体",fontZH))); 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);
32、设置单元格边框
//没有边框 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);
33、PdfPTableEvent
34、PdfPCellEvent
35、PdfPageEventHelper
发表评论
-
小程序textarea完美填坑
2020-07-07 16:09 457相信做微信小程序的码友们都被textarea这个原生组件坑过 ... -
Nginx+Https自己敲命令生成证书
2020-05-18 09:35 895一、准备 环境:centos6.8 ... -
https证书生成环境搭建配置(基于Tomcat和Nginx)
2020-04-24 11:06 777一、基于Tomcat、JDK内置密钥工具: 1、生成服务端证 ... -
史上最强Tomcat8性能优化
2019-11-01 21:41 729授人以鱼不如授人以渔 ... -
SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
2019-10-07 09:13 5181.使用jdk自带的 keytools 创建证书 打开cmd ... -
Spring Boot工程集成全局唯一ID生成器 UidGenerator
2019-09-16 09:04 804概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础 ... -
CentOS7下Redis的安装与使用
2019-08-17 11:45 554一、手动安装过程 1、准备工作(安装gcc依赖) yum ... -
Nginx与tomcat组合的简单使用
2019-08-17 10:05 365配置tomcat跳转 请求http出现400的时候在这里配置 ... -
linux下lvs+keepalived安装配置
2019-07-10 14:20 429keepalived主机:192.168.174. ... -
使用Docker搭建Tomcat运行环境
2019-02-08 21:32 4451 准备宿主系统 准备一 ... -
Netty笔记-GlobalEventExecutor
2019-02-06 23:00 5751.概念 /** * Single-thread si ... -
Netty4转发服务的实现方案
2019-02-06 15:03 1039如果用Netty做转发服务(不需要同步应答),Netty中有一 ... -
java手机号归属地查询
2018-12-25 17:16 702所需的包:carrier-1.75.jar 、geocoder ... -
基于Netty4的HttpServer和HttpClient的简单实现
2018-10-17 20:02 624Http 消息格式: Http request: Met ... -
javafx : 支持使用微调(spinner)控制的数字的文本框(NemberTextField)
2018-10-16 00:00 989最近花了一些时间学习javaFX, 要更深入地理解新GUI包, ... -
我的Java(定制你的Java/JavaFX Runtime)
2018-10-12 23:29 629最新的JDK 11发布了,撒花 新版本的JDK终于有了ope ... -
javaFX的几个新特性,让swing彻底过时
2018-10-12 22:42 604首先声明,Java的GUI曾经 ... -
mac os系统用install4j把jar包生成app
2018-10-05 23:02 1345install4j有windows版也有mac版 mac电脑 ... -
JavaFX Alert对话框
2018-10-05 22:01 22401. 标准对话框 消息对话框 Alert alert = ... -
IDEA Properties中文unicode转码问题
2017-02-17 19:54 925摘要: 如何让IDEA的properties中的中文进行uni ...
相关推荐
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...
iText入门基础教程,挺有用的,给大家分享
在Java代码中使用itext生成PDF文档,实现PDF文档的导出。
第8篇为工具篇,内容包括在java web项目中常用的开源工具框架、主要有版本管理工具svn、日志工具commons-logging与log4j、报表图形引擎jfreechart 、pdf组件itext等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等; 第9篇为实战篇,内容为两个典型的应用系统:...
pdf项目 将使用itext7的入门代码改编为可以绘制pdf并将文件导出为pdf的程序
由于书籍太大,受上传大小限制,只能分成16部分。...JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛系统 (Spring+Struts+Hibernate)、宠物商店(EJB 3+JPA+Struts 2)
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
由于书籍太大,受上传大小限制,只能分成16部分。...JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛系统 (Spring+Struts+Hibernate)、宠物商店(EJB 3+JPA+Struts 2)
本书全面介绍了Java Web开发中的各种相关技术及知识。...JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛系统 (Spring+Struts+Hibernate)、宠物商店(EJB 3+JPA+Struts 2)
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...
第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...