当前位置:

首页 > 编程开发 > Java操作pdf的工具类itext怎么处理

Java操作pdf的工具类itext怎么处理

PDF Expert for Mac 2 简体中文
PDF Expert for Mac 2 简体中文

是由Adobe公司发明的,一种非依附于软件、硬件和操作系统呈现文档的文件格式。

立即下载
¥299
2026-08-22
Mac软件 读写虚拟 本月促销

一、什么是iText?在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。二、引入jar1、项目要使用iText,必须引入jar包com.itextpdfitextpdf5.5.62、输出中文,还要引入下面itext-asian.jar包com.itextpdfitext-asian5.2.03、设置pdf文件密码,还要

本文目录

    一、什么是iText?

    在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。

    二、引入jar

    1、项目要使用iText,必须引入jar包

    
    	com.itextpdf
    	itextpdf
    	5.5.6
    

    2、输出中文,还要引入下面itext-asian.jar包

    
         com.itextpdf
         itext-asian
         5.2.0
     

    3、设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包

    
        org.bouncycastle
        bcprov-jdk15on
        1.47
    

    三、iText常用类

    • com.itextpdf.text.Document:这是iText库中最常用的类,它代表了一个 pdf 实例。如果你需要从零开始生成一个pdf文件,你需要使用这个Document类。首先创建该实例,然后打开它,并添加内容,最后关闭该实例,即可生成一个pdf文件。

    • com.itextpdf.text.Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等

    • com.itextpdf.text.Chapter:表示 pdf 的一个章节,他通过一个Paragraph类型的标题和整形章数创建

    • com.itextpdf.text.Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量

    • com.itextpdf.text.List:表示一个列表;com.itextpdf.text.Anchor:表示一个锚,类似于HTML页面的链接。

    • com.itextpdf.text.pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。

    • com.itextpdf.text.pdf.PdfReader:用于读取 pdf 文件;

    四、生成PDF步骤

    1、创建文档

    Document document = new Document();

    2、通过书写器将文档写入磁盘

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));

    3、打开文档

    document.open();

    4、向文档中添加内容

    document.add(new Paragraph("i love CSDN"));

    5、关闭文档

    document.close();

    五、Java操作pdf的工具类itext

    package com.neusoft.guor.itext;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.ColumnText;
    import com.itextpdf.text.pdf.PdfAction;
    import com.itextpdf.text.pdf.PdfAnnotation;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfImportedPage;
    import com.itextpdf.text.pdf.PdfName;
    import com.itextpdf.text.pdf.PdfOutline;
    import com.itextpdf.text.pdf.PdfPageEventHelper;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    import com.itextpdf.text.pdf.PdfString;
    import com.itextpdf.text.pdf.PdfTransition;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.itextpdf.text.pdf.draw.DottedLineSeparator;
    import com.itextpdf.text.pdf.draw.LineSeparator;
    import com.itextpdf.text.pdf.draw.VerticalPositionMark;
    /**
     * itext PDF操作
     */
    public class PDFInit {
        public static final String FILE_DIR = "E:\\guor\\itext\\";
        public static final String const_JPG_JAVA = FILE_DIR + "java.jpg";
        public static final String const_JPG_NGINX = FILE_DIR + "nginx.jpg";
        private static final String const_NEZHA = "哪吒编程";
        private static final String const_NEZHA_PROGRAM = "获取Java学习资料请关注公众号:哪吒编程";
        private static final String const_BIBIDONG = "比比东";
        private static final String const_YUNYUN = "云韵";
        private static final String const_BAIDU = "百度一下 你就知道";
        private static final String const_BAIDU_URL = "https://www.baidu.com";
        private static final String const_PAGE_FIRST = "第一页";
        private static final String const_PAGE_SECOND = "第二页";
        private static final String const_PAGE_THIRD = "第三页";
        private static final String const_PAGE_FOUR = "第四页";
        private static final String const_PAGE_FIVE = "第五页";
        private static final String const_TITLE_FIRST = "一级标题";
        private static final String const_TITLE_SECOND = "二级标题";
        private static final String const_CONTENT = "内容";
        // 普通中文字体
        public static Font static_FONT_CHINESE = null;
        // 超链字体
        public static Font static_FONT_LINK = null;
        private static void pdfFontInit() throws IOException, DocumentException {
            // 微软雅黑
            BaseFont chinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            // 普通中文字体
            static_FONT_CHINESE = new Font(chinese, 12, Font.NORMAL);// Font.BOLD为加粗
            // 超链字体
            static_FONT_LINK = new Font(chinese, 12, Font.NORMAL, BaseColor.BLUE);
        }
        public static Document document;
        public static void main(String[] args) throws Exception {
            pdfFontInit();
            //createPDF();// 生成一个 PDF 文件
            //createPDFWithColor();// 设置PDF的页面大小和背景颜色
            //createPDFWithPassWord();// 创建带密码的PDF
            //createPDFWithNewPages();// 为PDF添加页
            //createPDFWithWaterMark();// 为PDF文件添加水印,背景图
            //createPDFWithContent();//插入块Chunk, 内容Phrase, 段落Paragraph, List
            //createPDFWithExtraContent();//插入Anchor, Image, Chapter, Section
            //draw();//画图
            //createPDFWithAlignment();//设置段落
            //createPDFToDeletePage();//删除 page
            //insertPage();// 插入 page
            //splitPDF();//分割 page
            //mergePDF();// 合并 PDF 文件
            //sortpage();// 排序page
            //setHeaderFooter();// 页眉,页脚
            //addColumnText();// 左右文字
            //setView();// 文档视图
            //pdfToZip();// 压缩PDF到Zip
            addAnnotation();// 注释
        /**
         * 创建一个 PDF 文件,并添加文本
         */
        public static void createPDF() throws IOException, DocumentException {
            // 实例化 document
            document = new Document();
            // 生成文件
            String path = FILE_DIR + "createPDF.pdf";
            File file = new File(path);
            if(!file.exists()){
                file.createNewFile();
            }
            PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDF.pdf"));
            // 打开 document
            document.open();
            // 添加文本 此处无法写入中文 TODO
            document.add(new Paragraph(const_NEZHA));
            document.add(new Paragraph(const_NEZHA, static_FONT_CHINESE));
            // 关闭 document
            document.close();
         * 创建PDF文件,修改文件的属性
        public static void createPDFWithColor() throws FileNotFoundException, DocumentException {
            // 页面大小
            Rectangle rect = new Rectangle(PageSize.A5.rotate());
            // 页面背景色
            rect.setBackgroundColor(BaseColor.YELLOW);
            document = new Document(rect);
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));
            // PDF版本(默认1.4)
            writer.setPdfVersion(PdfWriter.VERSION_1_6);
            // 文档属性
            document.addAuthor(const_NEZHA);
            document.addTitle("我的第一个pdf");
            // 页边空白
            document.setMargins(10, 10, 10, 10);
            // 打开
            // 关闭
         * 创建带密码的PDF
        public static void createPDFWithPassWord() throws FileNotFoundException, DocumentException {
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithPassWord.pdf"));
            // userPassword打开密码:"123"
            // ownerPassword编辑密码: "123456"
            writer.setEncryption("123".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_SCREENREADERS, PdfWriter.STANDARD_ENCRYPTION_128);
         * 为PDF添加页
        public static void createPDFWithNewPages() throws FileNotFoundException, DocumentException {
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFAddNewPages.pdf"));
            document.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
            document.newPage();
            document.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
            writer.setPageEmpty(true);
            document.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
         * 为PDF文件添加水印,背景图
        public static void createPDFWithWaterMark() throws IOException, DocumentException {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithWaterMark.pdf");
            PdfWriter.getInstance(document, out);
            // 图片水印
            PdfReader reader = new PdfReader(FILE_DIR + "createPDFWithWaterMark.pdf");
            PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "createPDFWithWaterMark2.pdf"));
            Image img = Image.getInstance(const_JPG_JAVA);
            img.setAbsolutePosition(200, 200);
            PdfContentByte under = stamp.getUnderContent(1);
            under.addImage(img);
            // 文字水印
            PdfContentByte over = stamp.getOverContent(2);
            // 加载字库来完成对字体的创建
            BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
            over.beginText();
            // 设置颜色 默认为蓝色
            over.setColorFill(BaseColor.RED);
            // 设置字体字号
            over.setFontAndSize(bf, 50);
            // 设置起始位置
            over.setTextMatrix(30, 30);
            // 开始写入水印 左-下-倾斜度
            over.showTextAligned(Element.ALIGN_LEFT, "nezha", 245, 400, 30);
            over.endText();
            // 背景图
            Image img2 = Image.getInstance(const_JPG_NGINX);
            img2.setAbsolutePosition(0, 0);
            PdfContentByte under2 = stamp.getUnderContent(3);
            under2.addImage(img2);
            stamp.close();
            reader.close();
         * 插入Chunk, Phrase, Paragraph, List
         * Chunk : 块,PDF文档中描述的最小原子元素
         * Phrase : 短语,Chunk的集合
         * Paragraph : 段落,一个有序的Phrase集合
        public static void createPDFWithContent() throws DocumentException, FileNotFoundException {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithContent.pdf");
            // 添加块
            document.add(new Chunk(const_NEZHA, static_FONT_CHINESE));
            Font font = new Font(Font.FontFamily.HELVETICA, 8, Font.BOLD, BaseColor.WHITE);
            Chunk id = new Chunk("springboot", font);
            id.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
            id.setTextRise(7);
            document.add(id);
            Font font2 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);
            Chunk id2 = new Chunk("springcloud", font2);
            id2.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
            id2.setTextRise(3);
            id2.setUnderline(0.2f, -2f);
            document.add(id2);
            document.add(Chunk.NEWLINE);
            // 添加一页,添加短语
            document.add(new Phrase("Phrase page"));
            // 添加短语
            Phrase director = new Phrase();
            Chunk name = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
            // 添加下划线(thickness:下划线的粗细,yPosition:下划线离字的距离)
            name.setUnderline(0.5f, -1f);
            director.add(name);
            director.add(new Chunk(","));
            director.add(new Chunk(" "));
            director.add(new Chunk(const_YUNYUN, static_FONT_CHINESE));
            director.setLeading(24);
            document.add(director);
            // 添加一页
            Phrase director2 = new Phrase();
            Chunk name2 = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
            name2.setUnderline(0.2f, -2f);
            director2.add(name2);
            director2.add(new Chunk(","));
            director2.add(new Chunk(" "));
            director2.add(new Chunk(const_YUNYUN, static_FONT_CHINESE));
            director2.setLeading(24);
            document.add(director2);
            // 添加段落
            document.add(new Paragraph("Paragraph page"));
            Paragraph info = new Paragraph();
            info.add(new Chunk(const_NEZHA));
            info.add(new Chunk(const_BIBIDONG));
            info.add(Chunk.NEWLINE);
            info.add(new Phrase(const_NEZHA));
            document.add(info);
            // 通过循环添加段落信息
            List list = new List(List.ORDERED);
            for (int i = 0; i < 5; i++) {
                ListItem item = new ListItem(String.format("%s: %d "+const_NEZHA, const_YUNYUN + (i + 1), (i + 1) * 100), new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE));
                List girllist = new List(List.ORDERED, List.ALPHABETICAL);
                girllist.setLowercase(List.LOWERCASE);
                for (int j = 0; j < 3; j++) {
                    ListItem girlitem = new ListItem("girls" + (j + 1));
                    List rolelist = new List(List.UNORDERED);
                    for (int k = 0; k < 2; k++) {
                        rolelist.add(String.format("%s, %s", const_NEZHA + (k + 1), const_BIBIDONG + (k + 1)));
                    }
                    girlitem.add(rolelist);
                    girllist.add(girlitem);
                }
                item.add(girllist);
                list.add(item);
            document.add(list);
         * 插入锚Anchor, Image, 章节Chapter, 子列表Section
        public static void createPDFWithExtraContent() throws DocumentException, MalformedURLException, IOException {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithExtraContent.pdf");
            String content = "you can get anything from : ";
            Paragraph paragraph = new Paragraph(content);
            // 创建一个链接到外部网站的新锚点
            // 并将此锚点添加到段落中。
            Anchor anchor = new Anchor(const_BAIDU, static_FONT_LINK);
            anchor.setReference(const_BAIDU_URL);
            paragraph.add(anchor);
            document.add(paragraph);
            // Image对象
            Image img = Image.getInstance(const_JPG_NGINX);
            img.setAlignment(Image.LEFT | Image.TEXTWRAP);
            img.setBorder(Image.BOX);
            img.setBorderWidth(10);
            img.setBorderColor(BaseColor.WHITE);
            img.scaleToFit(800, 50);// 大小
            img.setRotationDegrees(-50);// 旋转
            document.add(img);
            // 章节Chapter -- 目录
            Paragraph title = new Paragraph(const_TITLE_FIRST,static_FONT_CHINESE);
            // 标题和序号
            Chapter chapter = new Chapter(title, 1);
            // 子列表Section
            title = new Paragraph(const_TITLE_SECOND,static_FONT_CHINESE);
            Section section = chapter.addSection(title);
            section.setBookmarkTitle(const_NEZHA);
            section.setIndentation(10);
            section.setBookmarkOpen(false);
            section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT);
            Section subsection1 = section.addSection(new Paragraph(const_CONTENT,static_FONT_CHINESE));
            subsection1.setIndentationLeft(10);
            subsection1.setNumberDepth(1);
            document.add(chapter);
         * 画图
        public static void draw() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "draw.pdf");
            // 左右箭头
            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(const_NEZHA ,static_FONT_CHINESE);
            p1.add(new Chunk(new LineSeparator()));
            p1.add(const_BIBIDONG);
            document.add(p1);
            // 点线
            Paragraph p2 = new Paragraph(const_NEZHA ,static_FONT_CHINESE);
            p2.add(new Chunk(new DottedLineSeparator()));
            p2.add(const_BIBIDONG);
            document.add(p2);
            // 下滑线
            LineSeparator UNDERLINE = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
            Paragraph p3 = new Paragraph(const_NEZHA_PROGRAM ,static_FONT_CHINESE);
            p3.add(UNDERLINE);
            document.add(p3);
         * 设置段落
        public static void createPDFWithAlignment() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithAlignment.pdf");
            Paragraph p = new Paragraph("Never frown, even when you are sad, because you never know who is falling in love with your smile;" +
                    "You will see exactly what life is worth, when all the rest has gone;" +
                    "It is very simple to be happy, but it is very difficult to be simple.");
            // 默认
            p.setAlignment(Element.ALIGN_JUSTIFIED);
            document.add(p);
            // 慢慢的向右移动
            p.setIndentationLeft(1 * 15f);
            p.setIndentationRight((5 - 1) * 15f);
            // 居右
            p.setAlignment(Element.ALIGN_RIGHT);
            p.setSpacingAfter(15f);
            // 居左
            p.setAlignment(Element.ALIGN_LEFT);
            p.setSpacingBefore(15f);
            // 居中
            p.setAlignment(Element.ALIGN_CENTER);
         * 删除页
        public static void createPDFToDeletePage() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFToDeletePage.pdf");
            PdfWriter writer = PdfWriter.getInstance(document, out);
            PdfReader reader = new PdfReader(FILE_DIR + "createPDFToDeletePage.pdf");
            reader.selectPages("1,3");
            PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "createPDFToDeletePage2.pdf"));
         * 插入 page
        public static void insertPage() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "insertPage.pdf");
            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);
         * 分割 page
        public static void splitPDF() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "splitPDF.pdf");
            document.add(new Paragraph(const_PAGE_FOUR, static_FONT_CHINESE));
            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);
            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);
            cb2.addTemplate(writer2.getImportedPage(reader, 4), 0, 0);
            dd2.close();
            writer2.close();
         * 合并 PDF 文件
        public static void mergePDF() throws Exception {
            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();
            java.util.List readers = new ArrayList();
            readers.add(reader1);
            readers.add(reader2);
            int pageOfCurrentReaderPDF = 0;
            Iterator iteratorPDFReader = readers.iterator();
            while (iteratorPDFReader.hasNext()) {
                PdfReader pdfReader = iteratorPDFReader.next();
                // 在目标中为每个源页面创建一个新页面
                while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
                    document.newPage();
                    pageOfCurrentReaderPDF++;
                    PdfImportedPage page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
                    cb.addTemplate(page, 0, 0);
                pageOfCurrentReaderPDF = 0;
            out.flush();
            out.close();
         * 排序page
        public static void sortpage() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "sortpage.pdf");
            writer.setLinearPageMode();
            document.add(new Paragraph(const_PAGE_FIVE, static_FONT_CHINESE));
            int[] order = { 4, 3, 2, 1 };
            writer.reorderPages(order);
         * 页眉页脚
        public static void setHeaderFooter() throws Exception {
            PdfWriter writer = PdfWriter.getInstance(document, 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();
            document.add(new Paragraph("1 page"));
            document.add(new Paragraph("2 page"));
            document.add(new Paragraph("3 page"));
            document.add(new Paragraph("4 page"));
        public static void addColumnText() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "addColumnText.pdf");
            PdfContentByte canvas = writer.getDirectContent();
            Phrase phrase1 = new Phrase(const_BIBIDONG + " is a beauty!left", static_FONT_CHINESE);
            Phrase phrase2 = new Phrase(const_BIBIDONG + " is a beauty!right", static_FONT_CHINESE);
            Phrase phrase3 = new Phrase(const_BIBIDONG + " is a beauty!center", static_FONT_CHINESE);
            ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase1, 200, 700, 0);
            ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, phrase2, 200, 600, 0);
            ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, phrase3, 200, 500, 0);
         * 文档视图
        public static void setView() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "setView.pdf");
            writer.setPdfVersion(PdfWriter.VERSION_1_5);
            writer.setViewerPreferences(PdfWriter.PageModeFullScreen);// 全屏
                public void onStartPage(PdfWriter writer, Document document) {
                    writer.setTransition(new PdfTransition(PdfTransition.DISSOLVE, 3));
                    writer.setDuration(5);// 间隔时间
         * 压缩PDF到Zip
        public static void pdfToZip() throws Exception {
            ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(FILE_DIR + "pdfToZip.zip"));
            for (int i = 1; i <= 3; i++) {
                ZipEntry entry = new ZipEntry(const_NEZHA + i + ".pdf");
                zip.putNextEntry(entry);
                document = new Document();
                PdfWriter writer = PdfWriter.getInstance(document, zip);
                writer.setCloseStream(false);
                document.open();
                document.add(new Paragraph(const_NEZHA + i, static_FONT_CHINESE));
                document.close();
                zip.closeEntry();
            zip.close();
         * 添加注释
        public static void addAnnotation() throws Exception {
            FileOutputStream out = new FileOutputStream(FILE_DIR + "addAnnotation.pdf");
            Document doc = new Document();
            PdfWriter writer = PdfWriter.getInstance(doc, out);
            doc.open();
            doc.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
            doc.add(new Annotation("title", "this is a annotation!"));
            doc.newPage();
            doc.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
            Chunk chunk = new Chunk(const_NEZHA);
            chunk.setAnnotation(PdfAnnotation.createText(writer, null, "Title", "this is a another annotation!", false, "Comment"));
            doc.add(chunk);
            // 添加附件
            //doc.newPage();
            //doc.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
            //Chunk chunk2 = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
            //PdfAnnotation annotation = PdfAnnotation.createFileAttachment(writer, null, "Title", null, const_JPG_JAVA, const_JPG_NGINX);
            //annotation.put(PdfName.NAME, new PdfString("Paperclip"));
            //chunk2.setAnnotation(annotation);
            //doc.add(chunk2);
            doc.close();
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 PDF Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?