ITextPDF7

ITextPDF7ITextPDF前言版本说明itext7-core=7.1.13相关链接:itextpdf官网地址:https://itextpdf.com/enitextpdf官方文档:https://kb.itextpdf.com/home/it7kbitextpdf官方github地址:https://github.com/itext/itext7itextpdfmaven地址:https://mvnrepository.com/artifact/com.itextpdf/itext

大家好,又见面了,我是你们的朋友全栈君。

ITextPDF

前言

版本说明

itext7-core=7.1.13

相关链接:

核心pom依赖

<!-- https://mvnrepository.com/artifact/com.itextpdf/itext7-core -->
<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itext7-core</artifactId>
  <version>7.1.13</version>
  <type>pom</type>
</dependency>

入门示例

package top.simba1949;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

import java.io.File;
import java.io.FileNotFoundException;

/** * @author Anthony * @date 2020/12/8 10:03 */
public class Application { 
   

    public static final String FILE_PATH = "D:\\IDE\\IDEA\\workspace\\learn\\test-spring-boot\\itextpdf-learn\\PDF.pdf";

    public static void main(String[] args) throws FileNotFoundException { 
   
        // 创建一个要生成的PDF文件对象File
        File file = new File(FILE_PATH);
        // 创建PDF输出流
        PdfWriter pdfWriter = new PdfWriter(file);
        // 创建文档对象
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        Document document = new Document(pdfDocument);

        // 8 表示一行多少列
        Table table = new Table(UnitValue.createPercentArray(8)).useAllAvailableWidth();

        for (int i = 0; i < 16; i++) { 
   
            table.addCell("hi" + i);

        }
        document.add(table);

        // 关闭文档
        document.close();
    }
}

添加表格

package top.simba1949;

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.BackgroundImage;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;

import java.io.File;
import java.io.IOException;

/** * @author Anthony * @date 2020/12/9 19:10 */
public class ColoredBackground { 
   

    public static final String FILE_PATH = "D:\\IDE\\IDEA\\workspace\\learn\\test-spring-boot\\itextpdf-learn\\PDF.pdf";
    public static final String IMG_PATH = "itextpdf-learn/src/main/resources/static/image-0.jpg";

    public static void main(String[] args) throws IOException { 
   
        // 创建一个要生成的PDF文件对象File
        File file = new File(FILE_PATH);
        // 创建PDF输出流
        PdfWriter pdfWriter = new PdfWriter(file);
        // 创建文档对象
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        Document document = new Document(pdfDocument);

        // 创建字体
        PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
        // 创建背景图片
        ImageData imageData = ImageDataFactory.create(IMG_PATH);
        PdfImageXObject pdfImageXObject = new PdfImageXObject(imageData);
        BackgroundImage.Builder backgroundImageBuilder = new BackgroundImage.Builder();
        backgroundImageBuilder.setImage(pdfImageXObject);
        BackgroundImage backgroundImage = backgroundImageBuilder.build();
        // 创建table
        Table table = new Table(UnitValue.createPercentArray(8)).useAllAvailableWidth();

        for (int i = 0; i < 16; i++) { 
   
            Cell cell = new Cell();
            // 设置段落,设置段落的字体和字体颜色
            Paragraph paragraph = new Paragraph("hi" + i).setFont(font).setFontColor(ColorConstants.WHITE);
            cell.add(paragraph);
            // 设置背景颜色
            // cell.setBackgroundColor(ColorConstants.RED);
            // 设置边框样式
            SolidBorder solidBorder = new SolidBorder(ColorConstants.BLACK, 1);
            cell.setBorder(solidBorder);
            // 设置文本对齐方式
            cell.setTextAlignment(TextAlignment.CENTER);
            table.addCell(cell);
        }
        // 设置表格背景图片
        table.setBackgroundImage(backgroundImage);
        // 添加表格
        document.add(table);
        document.close();
    }
}

document对象

document 元素只能添加 AreaBreakImage 对象和 IBlockElement 接口的实现类对象
IBlockElement 的实现类如下图:
在这里插入图片描述

进阶PDF

package top.simba1949;

import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;

import java.io.File;
import java.io.IOException;

/** * @author anthony * @date 2021/1/26 23:12 */
public class Application { 
   
    public static void main(String[] args) throws IOException { 
   
        // 文件名
        String fileName = getPdfFileName();
        // 文件对象
        File file = new File(fileName);

        // pdf 输出流
        PdfWriter pdfWriter = new PdfWriter(file);
        // 处理 pdf 的主入口点
        PdfDocument pdfDoc = new PdfDocument(pdfWriter);
        // 设置pdf的页面大小
        PageSize pageSize = new PageSize(PageSize.A4);
        // 文档对象,用于添加文档中的各种元素
        Document document = new Document(pdfDoc, pageSize);

        // document 元素只能添加 AreaBreak、Image对象和IBlockElement接口的实现类对象
        // document.add(createParagraph());
        // 对比是否存在首行缩进
        // document.add(new Paragraph("君不见黄河之水天上来,奔流到海不复回").setFont(createPdfFont()));
        document.add(createTable());

        // 文档的最后处理
        document.close();
    }

    /** * 创建字体对象 * @return * @throws IOException */
    public static PdfFont createPdfFont() throws IOException { 
   
        // 使用 PdfFontFactory 创建字体
        // 使用下面字体可以处理中文不显示的问题
        return PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
    }

    /** * 创建 Table 对象 * @return */
    public static Table createTable() throws IOException { 
   
        // 创建几列的表格对象
        Table table = new Table(4);
        // 设置table表格宽度
        table.setWidth(UnitValue.POINT).setWidth(520);
        for (int i = 0; i < 2; i++) { 
   
            if (i == 0){ 
   
                // 第一行数据,创建 Cell 对象,默认一行一列
                Cell cell00 = new Cell();
                cell00.add(new Paragraph("姓名").setFont(createPdfFont()));
                table.addCell(cell00);

                table.addCell(new Cell().add(new Paragraph("李白").setFont(createPdfFont()).setFontColor(ColorConstants.BLACK)));

                table.addCell(new Cell().add(new Paragraph("性别").setFont(createPdfFont())).setFontSize(24));
                table.addCell(new Cell().add(new Paragraph("男").setFont(createPdfFont())));
            }else if (i == 1){ 
   
                // 第二行数据
                table.addCell(new Cell().add(new Paragraph("代表作").setFont(createPdfFont())));
                // 第二行数据,创建 Cell 对象,默认一行三列
                table.addCell(new Cell(1, 3).add(new Paragraph("《将进酒》《蜀道难》").setFont(createPdfFont())));
            }
        }

        return table;
    }

    /** * 创建段落 * Paragraph 和 Text 关系, * 同一个设置如果 Text 存在,则以 Text 设置为显示方式 * 如果 Text 没有设置,以 Paragraph 设置为显示方式 * 对齐模式以 Paragraph 对齐模式设置为显示方式 * @return * @throws IOException */
    public static Paragraph createParagraph() throws IOException { 
   
        // 可以通过构造方法添加问题
        Paragraph paragraph = new Paragraph("段落内容");
        // 也可以通过添加 Text 对象添加文字
        paragraph.add(createText());
        // 段落设置字体
        paragraph.setFont(createPdfFont());
        // 段落加粗
        paragraph.setBold();
        // 段落设置字体大佬
        paragraph.setFontSize(24);
        // 段落设置颜色
        paragraph.setFontColor(ColorConstants.RED);
        // 段落设置下划
        paragraph.setUnderline();
        // 段落首行缩进
        paragraph.setFirstLineIndent(40);
        // 设置段落对齐模式,对齐模式以段落对齐模式设置而显示
        paragraph.setTextAlignment(TextAlignment.CENTER);

        return paragraph;
    }

    /** * 创建文本对象 * * 注意要点:文本对象不能直接添加到document * * Paragraph 和 Text 关系, * 同一个设置如果 Text 存在,则以 Text 设置为显示方式 * 如果 Text 没有设置,以 Paragraph 设置为显示方式 * @return */
    public static Text createText() throws IOException { 
   
        Text text = new Text("将进酒");
        // 字体
        text.setFont(createPdfFont());
        // 字体加粗
        text.setBold();
        // 字体颜色
        text.setFontColor(ColorConstants.BLACK);
        // 字体大小
        text.setFontSize(24);
        // 字体添加下划线
        text.setUnderline();
        // 字体设置文本对齐模式
        text.setTextAlignment(TextAlignment.LEFT);

        return text;
    }


    /** * 获取临时文件路径 * @return */
    private static String getPdfFileName(){ 
   
        String userDir = System.getProperty("user.dir");
        String separator = System.getProperty("file.separator");
        return userDir + separator + "learn.pdf";
    }
}

合并PDF

package top.simba1949;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.utils.PdfMerger;

import java.io.IOException;

/** * @author Anthony * @date 2020/12/9 19:48 */
public class AddCover { 
   
    public static final String DEST = "D:\\IDE\\IDEA\\workspace\\learn\\test-spring-boot\\itextpdf-learn\\src\\main\\resources\\static\\dest.pdf";
    public static final String RESOURCE_ONE = "D:\\IDE\\IDEA\\workspace\\learn\\test-spring-boot\\itextpdf-learn\\src\\main\\resources\\static\\resource1.pdf";
    public static final String RESOURCE_TWO = "D:\\IDE\\IDEA\\workspace\\learn\\test-spring-boot\\itextpdf-learn\\src\\main\\resources\\static\\resource2.pdf";

    public static void main(String[] args) throws IOException { 
   
        // 目标pdf
        PdfDocument dest = new PdfDocument(new PdfWriter(DEST));
        // 源pdf
        PdfDocument cover = new PdfDocument(new PdfReader(RESOURCE_ONE));
        PdfDocument resource = new PdfDocument(new PdfReader(RESOURCE_TWO));

        PdfMerger merger = new PdfMerger(dest);
        // 将源pdf文件指定位置写入到目标pdf中
        merger.merge(cover, 1, 1);
        merger.merge(resource, 1, 1);

        cover.close();
        resource.close();
        merger.close();
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148177.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android短信验证码代码,Android短信验证码自动填写实现代码

    android短信验证码代码,Android短信验证码自动填写实现代码今天给大家分享一个Android短信验证码自动填写的功能。先看下效果图,我发送了一条短信到手机,自动填写验证码。如图:这个小功能运用到了观察者模式,什么是观察者模式?观察者模式:定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新。在本例中,我们在短信中注册一个观察者,当短信功能(被观察者)收到信息时,就会…

  • VggNet10模型的cifar10深度学习训练

    VggNet10模型的cifar10深度学习训练目录一:数据准备:二:VGG模型三:代码部分1.input_data.py2.VGG.py3.tools.py4.train_and_val.py一:数据准备:先放些链接,cifar10的数据集的下载地址:http://www.cs.toronto.edu/~kriz/cifar.html用二进制tfcords的数据集训练,下载第三个,下载的数据文件集是…

  • 电脑爱好者GHOSTWIN7纯净版V3.0

    电脑爱好者GHOSTWIN7纯净版V3.0系统特色:1系统使用系统总裁论坛最新封装工具和IT天空论坛最新驱动包制作而成2主题已破解,可使用第三方主题3我的文档收藏夹虚拟内存智能转移非系统分区4集成DirectX最新版本运行库,VB、VC++2005SP1、2008、2010、2012等运行库文件。…

  • 物联网架构图_物联网的架构

    物联网架构图_物联网的架构

  • glassfish配置错误问题「建议收藏」

    glassfish配置错误问题「建议收藏」当脱开netbeans单独运行glassfishweb服务器后:(运行glassfish服务器cmd下asadminstart-domain服务器就开始运行)浏览页面出现org.apache.jasper.JasperException:PWC6345:Thereisanerrorininvokingjavac.AfullJDK(notjustJ…

  • 摩斯密码转换器_摩斯密码怎么表示中文

    摩斯密码转换器_摩斯密码怎么表示中文在线DEMO:https://oktools.net/morse摩斯电码和Unicode映射conststandard={'A':'01','B

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号