itext7学习笔记——第5章实践&example
来源:互联网 发布:和外国人聊天的软件 编辑:程序博客网 时间:2024/06/06 14:15
本章的例子,请参考我翻译的博文:itext7学习笔记——第5章,里面有详细的解释,有什么不懂得也可以评论或者私信我!
例子1:添加注释和内容
我们读取一个带有表单的PDF文档,往里面添加文档注释、一些文本和一个新的复选框,代码如下:
import com.itextpdf.forms.PdfAcroForm;import com.itextpdf.forms.fields.PdfButtonFormField;import com.itextpdf.forms.fields.PdfFormField;import com.itextpdf.io.font.FontConstants;import com.itextpdf.kernel.font.PdfFontFactory;import com.itextpdf.kernel.geom.Rectangle;import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfReader;import com.itextpdf.kernel.pdf.PdfString;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.kernel.pdf.action.PdfAction;import com.itextpdf.kernel.pdf.annot.PdfAnnotation;import com.itextpdf.kernel.pdf.annot.PdfTextAnnotation;import com.itextpdf.kernel.pdf.canvas.PdfCanvas;import java.io.File;import java.io.IOException;/** * Simple adding annotations example. */public class C05E01_AddAnnotationsAndContent { public static final String SRC = "src/main/resources/pdf/job_application.pdf"; public static final String DEST = "results/chapter05/edited_job_application.pdf"; public static void main(String args[]) throws IOException { File file = new File(DEST); file.getParentFile().mkdirs(); new C05E01_AddAnnotationsAndContent().manipulatePdf(SRC, DEST); } public void manipulatePdf(String src, String dest) throws IOException { //Initialize PDF document PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); //Add text annotation PdfAnnotation ann = new PdfTextAnnotation(new Rectangle(400, 795, 0, 0)) .setTitle(new PdfString("iText")) .setContents("Please, fill out the form.") .setOpen(true); pdfDoc.getFirstPage().addAnnotation(ann); PdfCanvas canvas = new PdfCanvas(pdfDoc.getFirstPage()); canvas.beginText().setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 12) .moveText(265, 597) .showText("I agree to the terms and conditions.") .endText(); //Add form field PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true); PdfButtonFormField checkField = PdfFormField.createCheckBox(pdfDoc, new Rectangle(245, 594, 15, 15), "agreement", "Off", PdfFormField.TYPE_CHECK); checkField.setRequired(true); form.addField(checkField); //Update reset button form.getField("reset").setAction(PdfAction.createResetForm(new String[]{"name", "language", "experience1", "experience2", "experience3", "shift", "info", "agreement"}, 0)); pdfDoc.close(); }}
例子2:改变表单字段属性
我们读取一个带有表单的PDF文档,然后改变字段的属性,添加属性或者删除属性,代码如下:
import com.itextpdf.forms.PdfAcroForm;import com.itextpdf.forms.fields.PdfFormField;import com.itextpdf.io.font.FontConstants;import com.itextpdf.kernel.color.Color;import com.itextpdf.kernel.font.PdfFont;import com.itextpdf.kernel.font.PdfFontFactory;import com.itextpdf.kernel.pdf.*;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * Simple filling out form example. */public class C05E02_FillAndModifyForm { public static final String SRC = "src/main/resources/pdf/job_application.pdf"; public static final String DEST = "results/chapter05/filled_out_job_application.pdf"; public static void main(String args[]) throws IOException { File file = new File(DEST); file.getParentFile().mkdirs(); new C05E02_FillAndModifyForm().manipulatePdf(SRC, DEST); } public void manipulatePdf(String src, String dest) throws IOException { //Initialize PDF document PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true); Map<String, PdfFormField> fields = form.getFormFields(); fields.get("name").setValue("James Bond").setBackgroundColor(Color.ORANGE); fields.get("language").setValue("English"); fields.get("experience1").setValue("Yes"); fields.get("experience2").setValue("Yes"); fields.get("experience3").setValue("Yes"); List<PdfString> options = new ArrayList<PdfString>(); options.add(new PdfString("Any")); options.add(new PdfString("8.30 am - 12.30 pm")); options.add(new PdfString("12.30 pm - 4.30 pm")); options.add(new PdfString("4.30 pm - 8.30 pm")); options.add(new PdfString("8.30 pm - 12.30 am")); options.add(new PdfString("12.30 am - 4.30 am")); options.add(new PdfString("4.30 am - 8.30 am")); PdfArray arr = new PdfArray(options); fields.get("shift").setOptions(arr); fields.get("shift").setValue("Any"); PdfFont courier = PdfFontFactory.createFont(FontConstants.COURIER); fields.get("info").setValue("I was 38 years old when I became an MI6 agent.", courier, 7f); pdfDoc.close(); }}
例子3:添加页眉、页脚和水印
我们读取一个带有ufo信息的PDF文档,往里面添加页眉、页脚和水印,代码如下:
import com.itextpdf.io.font.FontConstants;import com.itextpdf.kernel.color.Color;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.PdfReader;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.kernel.pdf.canvas.PdfCanvas;import com.itextpdf.kernel.pdf.extgstate.PdfExtGState;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.property.TextAlignment;import com.itextpdf.layout.property.VerticalAlignment;import java.io.File;import java.io.IOException;/** * Simple adding content example. */public class C05E03_AddContent { public static final String SRC = "src/main/resources/pdf/ufo.pdf"; public static final String DEST = "results/chapter05/add_content.pdf"; public static void main(String args[]) throws IOException { File file = new File(DEST); file.getParentFile().mkdirs(); new C05E03_AddContent().manipulatePdf(SRC, DEST); } public void manipulatePdf(String src, String dest) throws IOException { //Initialize PDF document PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); Document document = new Document(pdfDoc); Rectangle pageSize; PdfCanvas canvas; int n = pdfDoc.getNumberOfPages(); for (int i = 1; i <= n; i++) { PdfPage page = pdfDoc.getPage(i); pageSize = page.getPageSize(); canvas = new PdfCanvas(page); //Draw header text canvas.beginText().setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 7) .moveText(pageSize.getWidth() / 2 - 24, pageSize.getHeight() - 10) .showText("I want to believe") .endText(); //Draw footer line canvas.setStrokeColor(Color.BLACK) .setLineWidth(.2f) .moveTo(pageSize.getWidth() / 2 - 30, 20) .lineTo(pageSize.getWidth() / 2 + 30, 20).stroke(); //Draw page number canvas.beginText().setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 7) .moveText(pageSize.getWidth() / 2 - 7, 10) .showText(String.valueOf(i)) .showText(" of ") .showText(String.valueOf(n)) .endText(); //Draw watermark Paragraph p = new Paragraph("CONFIDENTIAL").setFontSize(60); canvas.saveState(); PdfExtGState gs1 = new PdfExtGState().setFillOpacity(0.2f); canvas.setExtGState(gs1); document.showTextAligned(p, pageSize.getWidth() / 2, pageSize.getHeight() / 2, pdfDoc.getPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45); canvas.restoreState(); } pdfDoc.close(); }}
例子4:改变页面大小和方向
我们读取一个带有ufo信息的PDF文档,改变每一页的大小,并使偶数页颠倒,代码如下:
import com.itextpdf.kernel.color.*;import com.itextpdf.kernel.geom.Rectangle;import com.itextpdf.kernel.pdf.*;import com.itextpdf.kernel.pdf.canvas.PdfCanvas;import java.io.File;import java.io.IOException;/** * Simple changing page properties example. */public class C05E04_ChangePage { public static final String SRC = "src/main/resources/pdf/ufo.pdf"; public static final String DEST = "results/chapter05/change_page.pdf"; public static void main(String args[]) throws IOException { File file = new File(DEST); file.getParentFile().mkdirs(); new C05E04_ChangePage().manipulatePdf(SRC, DEST); } public void manipulatePdf(String src, String dest) throws IOException { //Initialize PDF document PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); float margin = 72; for (int i = 1; i <= pdfDoc.getNumberOfPages(); i++) { PdfPage page = pdfDoc.getPage(i); // change page size Rectangle mediaBox = page.getMediaBox(); Rectangle newMediaBox = new Rectangle(mediaBox.getLeft() - margin, mediaBox.getBottom() - margin, mediaBox.getWidth() + margin * 2, mediaBox.getHeight() + margin * 2); page.setMediaBox(newMediaBox); // add border PdfCanvas over = new PdfCanvas(page); over.setStrokeColor(Color.GRAY); over.rectangle(mediaBox.getLeft(), mediaBox.getBottom(), mediaBox.getWidth(), mediaBox.getHeight()); over.stroke(); // change rotation of the even pages if (i % 2 == 0) { page.setRotation(180); } } pdfDoc.close(); }}
Example代码下载
本章代码可在如下地址下载(IDEA工程):iText7——第五章源代码工程
阅读全文
3 0
- itext7学习笔记——第5章实践&example
- itext7学习笔记——第1章实践&example
- itext7学习笔记——第2章实践&example
- itext7学习笔记——第3章实践&example
- itext7学习笔记——第4章实践&example
- itext7学习笔记——第6章实践&example
- itext7学习笔记——第7章实践&example
- itext7学习笔记——第5章
- itext7学习笔记——第2章
- itext7学习笔记——第3章
- itext7学习笔记——第4章
- itext7学习笔记——第6章
- itext7学习笔记——第7章
- itext7基础知识——第1章
- itext7学习笔记杂谈系列2——在itext7中添加中文(其他字体)和字体相关事
- itext7学习笔记杂谈系列1——添加新的页面和新的AcroForm
- 【学习笔记】《深入PHP - 面向对象、模式与实践》(第3版)——第5章 对象工具
- 【学习笔记】《深入PHP - 面向对象、模式与实践》(第3版)——第4章 高级特性
- Pycharm Matplotlib 图像不显示问题
- Zabbix监控系统中内置的监控参数(Key)详解
- 表格 购物车
- 约瑟环问题【java程序员面试宝典的代码更改】
- Mysql 千万以上数据优化方法(一,SQL优化),月薪30K之路系列
- itext7学习笔记——第5章实践&example
- SharpZipLib 的使用(压缩,解压)
- HTTP协议(1)__http协议简介+请求和响应内容
- React组件通信 的几种方式-- 格式化文档
- 欢迎使用CSDN-markdown编辑器
- 使用GrepCode.com查看API很方便。
- 【DevExpress v17.2新功能预告】增强ASP.NET TreeList
- makefile中条件判断与函数
- Kubo更名为CFCR,成为Cloud Foundry部署Kubernetes的默认方案