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