itext7学习笔记——第3章实践&example
来源:互联网 发布:软件的应用价值 编辑:程序博客网 时间:2024/06/05 14:41
本章的例子,请参考我翻译的博文:itext7学习笔记——第3章,里面有详细的解释,有什么不懂得也可以评论或者私信我!
## 例子1:撰写日报
页面划分成三栏,然后添加文本和图片,代码如下:
import com.itextpdf.io.font.FontConstants;import com.itextpdf.io.image.ImageDataFactory;import com.itextpdf.kernel.color.Color;import com.itextpdf.kernel.font.PdfFont;import com.itextpdf.kernel.font.PdfFontFactory;import com.itextpdf.kernel.geom.PageSize;import com.itextpdf.kernel.geom.Rectangle;import com.itextpdf.kernel.pdf.*;import com.itextpdf.layout.ColumnDocumentRenderer;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.*;import java.io.*;import java.nio.charset.StandardCharsets;import java.nio.file.Files;import java.nio.file.Paths;/** * Simple column renderer example. */public class C03E01_NewYorkTimes { public static final String DEST = "results/chapter03/new_york_times.pdf"; public static final String APPLE_IMG = "src/main/resources/img/ny_times_apple.jpg"; public static final String APPLE_TXT = "src/main/resources/data/ny_times_apple.txt"; public static final String FACEBOOK_IMG = "src/main/resources/img/ny_times_fb.jpg"; public static final String FACEBOOK_TXT = "src/main/resources/data/ny_times_fb.txt"; public static final String INST_IMG = "src/main/resources/img/ny_times_inst.jpg"; public static final String INST_TXT = "src/main/resources/data/ny_times_inst.txt"; static PdfFont timesNewRoman = null; static PdfFont timesNewRomanBold = null; public static void main(String[] args) throws Exception { timesNewRoman = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN); timesNewRomanBold = PdfFontFactory.createFont(FontConstants.TIMES_BOLD); File file = new File(DEST); file.getParentFile().mkdirs(); new C03E01_NewYorkTimes().createPdf(DEST); } protected void createPdf(String dest) throws Exception { //Initialize PDF document PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); PageSize ps = PageSize.A5; // Initialize document Document document = new Document(pdf, ps); //Set column parameters float offSet = 36; float columnWidth = (ps.getWidth() - offSet * 2 + 10) / 3; float columnHeight = ps.getHeight() - offSet * 2; //Define column areas Rectangle[] columns = {new Rectangle(offSet - 5, offSet, columnWidth, columnHeight), new Rectangle(offSet + columnWidth, offSet, columnWidth, columnHeight), new Rectangle(offSet + columnWidth * 2 + 5, offSet, columnWidth, columnHeight)}; document.setRenderer(new ColumnDocumentRenderer(document, columns)); Image apple = new Image(ImageDataFactory.create(APPLE_IMG)).setWidth(columnWidth); String articleApple = new String(Files.readAllBytes(Paths.get(APPLE_TXT)), StandardCharsets.UTF_8); C03E01_NewYorkTimes.addArticle(document, "Apple Encryption Engineers, if Ordered to Unlock iPhone, Might Resist", "By JOHN MARKOFF MARCH 18, 2016", apple, articleApple); Image facebook = new Image(ImageDataFactory.create(FACEBOOK_IMG)).setWidth(columnWidth); String articleFB = new String(Files.readAllBytes(Paths.get(FACEBOOK_TXT)), StandardCharsets.UTF_8); C03E01_NewYorkTimes.addArticle(document, "With \"Smog Jog\" Through Beijing, Zuckerberg Stirs Debate on Air Pollution", "By PAUL MOZUR MARCH 18, 2016", facebook, articleFB); Image inst = new Image(ImageDataFactory.create(INST_IMG)).setWidth(columnWidth); String articleInstagram = new String(Files.readAllBytes(Paths.get(INST_TXT)), StandardCharsets.UTF_8); C03E01_NewYorkTimes.addArticle(document, "Instagram May Change Your Feed, Personalizing It With an Algorithm","By MIKE ISAAC MARCH 15, 2016", inst, articleInstagram); document.close(); } public static void addArticle(Document doc, String title, String author, Image img, String text) throws IOException { Paragraph p1 = new Paragraph(title) .setFont(timesNewRomanBold) .setFontSize(14); doc.add(p1); doc.add(img); Paragraph p2 = new Paragraph() .setFont(timesNewRoman) .setFontSize(7) .setFontColor(Color.GRAY) .add(author); doc.add(p2); Paragraph p3 = new Paragraph() .setFont(timesNewRoman) .setFontSize(10) .add(text); doc.add(p3); }}
## 例子2:不一样的表格
绘制一个表格,第一栏为圆角单元格,每一列的背景颜色不同,根据列号而定,代码如下:
import com.itextpdf.io.font.FontConstants;import com.itextpdf.kernel.color.Color;import com.itextpdf.kernel.color.DeviceCmyk;import com.itextpdf.kernel.font.PdfFont;import com.itextpdf.kernel.font.PdfFontFactory;import com.itextpdf.kernel.geom.PageSize;import com.itextpdf.kernel.geom.Rectangle;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.kernel.pdf.canvas.PdfCanvas;import com.itextpdf.layout.Document;import com.itextpdf.layout.property.HorizontalAlignment;import com.itextpdf.layout.border.SolidBorder;import com.itextpdf.layout.element.Cell;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.element.Table;import com.itextpdf.layout.property.TextAlignment;import com.itextpdf.layout.renderer.CellRenderer;import com.itextpdf.layout.renderer.DrawContext;import java.io.*;import java.util.StringTokenizer;/** * Simple table renderer example. */public class C03E02_PremierLeague { public static final String DATA = "src/main/resources/data/premier_league.csv"; public static final String DEST = "results/chapter03/premier_league.pdf"; Color greenColor = new DeviceCmyk(0.78f, 0, 0.81f, 0.21f); Color yellowColor = new DeviceCmyk(0, 0, 0.76f, 0.01f); Color redColor = new DeviceCmyk(0, 0.76f, 0.86f, 0.01f); Color blueColor = new DeviceCmyk(0.28f, 0.11f, 0, 0); public static void main(String args[]) throws IOException { File file = new File(DEST); file.getParentFile().mkdirs(); new C03E02_PremierLeague().createPdf(DEST); } public void createPdf(String dest) throws IOException { //Initialize PDF document PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); PageSize ps = new PageSize(842, 680); // Initialize document Document document = new Document(pdf, ps); PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA); PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); Table table = new Table(new float[]{1.5f, 7, 2, 2, 2, 2, 3, 4, 4, 2}); table.setWidthPercent(100) .setTextAlignment(TextAlignment.CENTER) .setHorizontalAlignment(HorizontalAlignment.CENTER); BufferedReader br = new BufferedReader(new FileReader(DATA)); String line = br.readLine(); process(table, line, bold, true); while ((line = br.readLine()) != null) { process(table, line, font, false); } br.close(); document.add(table); //Close document document.close(); } public void process(Table table, String line, PdfFont font, boolean isHeader) { StringTokenizer tokenizer = new StringTokenizer(line, ";"); int columnNumber = 0; while (tokenizer.hasMoreTokens()) { if (isHeader) { Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken())); cell.setNextRenderer(new RoundedCornersCellRenderer(cell)); cell.setPadding(5).setBorder(null); table.addHeaderCell(cell); } else { columnNumber++; Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken())); cell.setFont(font).setBorder(new SolidBorder(Color.BLACK, 0.5f)); switch (columnNumber) { case 4: cell.setBackgroundColor(greenColor); break; case 5: cell.setBackgroundColor(yellowColor); break; case 6: cell.setBackgroundColor(redColor); break; default: cell.setBackgroundColor(blueColor); break; } table.addCell(cell); } } } private class RoundedCornersCellRenderer extends CellRenderer { public RoundedCornersCellRenderer(Cell modelElement) { super(modelElement); } @Override public void drawBorder(DrawContext drawContext) { Rectangle rectangle = getOccupiedAreaBBox(); float llx = rectangle.getX() + 1; float lly = rectangle.getY() + 1; float urx = rectangle.getX() + getOccupiedAreaBBox().getWidth() - 1; float ury = rectangle.getY() + getOccupiedAreaBBox().getHeight() - 1; PdfCanvas canvas = drawContext.getCanvas(); float r = 4; float b = 0.4477f; canvas.moveTo(llx, lly).lineTo(urx, lly).lineTo(urx, ury - r) .curveTo(urx, ury - r * b, urx - r * b, ury, urx - r, ury) .lineTo(llx + r, ury) .curveTo(llx + r * b, ury, llx, ury - r * b, llx, ury - r) .lineTo(llx, lly).stroke(); super.drawBorder(drawContext); } }
## 例子2:添加页眉、页脚和水印
绘制一个表格,奇偶页背景颜色不同,添加页眉、页脚和水印,代码如下:
import com.itextpdf.io.font.FontConstants;import com.itextpdf.kernel.color.Color;import com.itextpdf.kernel.color.DeviceCmyk;import com.itextpdf.kernel.events.Event;import com.itextpdf.kernel.events.IEventHandler;import com.itextpdf.kernel.events.PdfDocumentEvent;import com.itextpdf.kernel.font.PdfFont;import com.itextpdf.kernel.font.PdfFontFactory;import com.itextpdf.kernel.geom.Rectangle;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfPage;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.kernel.pdf.canvas.PdfCanvas;import com.itextpdf.layout.Canvas;import com.itextpdf.layout.Document;import com.itextpdf.layout.border.SolidBorder;import com.itextpdf.layout.element.Cell;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.element.Table;import com.itextpdf.layout.property.Property;import com.itextpdf.layout.property.TextAlignment;import com.itextpdf.layout.property.UnitValue;import com.itextpdf.layout.property.VerticalAlignment;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.StringTokenizer;/** * Simple event handler example. */public class C03E03_UFO { public static final String DATA = "src/main/resources/data/ufo.csv"; public static final String DEST = "results/chapter03/ufo.pdf"; static PdfFont helvetica = null; static PdfFont helveticaBold = null; public static void main(String[] args) throws Exception { helvetica = PdfFontFactory.createFont(FontConstants.HELVETICA); helveticaBold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); File file = new File(DEST); file.getParentFile().mkdirs(); new C03E03_UFO().createPdf(DEST); } protected void createPdf(String dest) throws Exception { //Initialize PDF document PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new MyEventHandler()); // Initialize document Document document = new Document(pdf); Paragraph p = new Paragraph("List of reported UFO sightings in 20th century") .setTextAlignment(TextAlignment.CENTER).setFont(helveticaBold).setFontSize(14); document.add(p); Table table = new Table(UnitValue.createPercentArray(new float[]{3, 5, 7, 4})); BufferedReader br = new BufferedReader(new FileReader(DATA)); String line = br.readLine(); process(table, line, helveticaBold, true); while ((line = br.readLine()) != null) { process(table, line, helvetica, false); } br.close(); document.add(table); document.close(); } public void process(Table table, String line, PdfFont font, boolean isHeader) { StringTokenizer tokenizer = new StringTokenizer(line, ";"); while (tokenizer.hasMoreTokens()) { if (isHeader) { table.addHeaderCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)).setFontSize(9).setBorder(new SolidBorder(Color.BLACK, 0.5f))); } else { table.addCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)).setFontSize(9).setBorder(new SolidBorder(Color.BLACK, 0.5f))); } } } protected class MyEventHandler implements IEventHandler { public void handleEvent(Event event) { PdfDocumentEvent docEvent = (PdfDocumentEvent) event; PdfDocument pdfDoc = docEvent.getDocument(); PdfPage page = docEvent.getPage(); int pageNumber = pdfDoc.getPageNumber(page); Rectangle pageSize = page.getPageSize(); PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc); //Set background Color limeColor = new DeviceCmyk(0.208f, 0, 0.584f, 0); Color blueColor = new DeviceCmyk(0.445f, 0.0546f, 0, 0.0667f); pdfCanvas.saveState() .setFillColor(pageNumber % 2 == 1 ? limeColor : blueColor) .rectangle(pageSize.getLeft(), pageSize.getBottom(), pageSize.getWidth(), pageSize.getHeight()) .fill().restoreState(); //Add header and footer pdfCanvas.beginText() .setFontAndSize(helvetica, 9) .moveText(pageSize.getWidth() / 2 - 60, pageSize.getTop() - 20) .showText("THE TRUTH IS OUT THERE") .moveText(60, -pageSize.getTop() + 30) .showText(String.valueOf(pageNumber)) .endText(); //Add watermark Canvas canvas = new Canvas(pdfCanvas, pdfDoc, page.getPageSize()); canvas.setFontColor(Color.WHITE); canvas.setProperty(Property.FONT_SIZE, 60); canvas.setProperty(Property.FONT, helveticaBold); canvas.showTextAligned(new Paragraph("CONFIDENTIAL"), 298, 421, pdfDoc.getPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45); pdfCanvas.release(); } }}
Example代码下载
本章代码可在如下地址下载(IDEA工程):iText7——第三章源代码工程
阅读全文
3 0
- itext7学习笔记——第3章实践&example
- itext7学习笔记——第1章实践&example
- itext7学习笔记——第2章实践&example
- itext7学习笔记——第4章实践&example
- itext7学习笔记——第5章实践&example
- itext7学习笔记——第6章实践&example
- itext7学习笔记——第7章实践&example
- itext7学习笔记——第3章
- itext7学习笔记——第2章
- itext7学习笔记——第4章
- itext7学习笔记——第5章
- itext7学习笔记——第6章
- itext7学习笔记——第7章
- itext7基础知识——第1章
- itext7学习笔记杂谈系列2——在itext7中添加中文(其他字体)和字体相关事
- itext7学习笔记杂谈系列1——添加新的页面和新的AcroForm
- 【学习笔记】《深入PHP - 面向对象、模式与实践》(第3版)——第4章 高级特性
- 【学习笔记】《深入PHP - 面向对象、模式与实践》(第3版)——第5章 对象工具
- 可执行jar(dubbo)打包成window服务
- 30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)
- 加载页,引导页(小红点的绘制)
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- ZooKeeper-3.4.10的安装和配置
- itext7学习笔记——第3章实践&example
- HDU 6165 FFF at Valentine -单向连通图
- Linux 常用命令一
- 技术开发人员人生路线图
- 盒子模型
- 无符号与有符号运算
- java面经整理(2)
- canvas简单操作
- IntelliJ IDEA 14 注册码