• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

x-easypdf: 一个用搭积木的方式构建pdf的框架(基于pdfbox)

原作者: [db:作者] 来自: 网络 收藏 邀请

一个用搭积木的方式构建pdf的框架(基于pdfbox)

star

更新说明

master分支将作为稳定版本发布,develop分支将会不定期进行更新,欢迎大家提供宝贵意见,目前稳定版本 v2.7.1

介绍

x-easypdf基于pdfbox二次封装,极大降低使用门槛,以组件化的形式进行pdf的构建。简单易用,仅需一行代码,便可完成pdf的相关操作

API文档

https://apidoc.gitee.com/xsxgit/x-easypdf

特性

  1. 体积轻量

仅依赖pdfbox,无其他依赖(数字签名需单独添加bouncycastle依赖,条形码需单独添加zxing依赖)

  1. 简单智能

文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页。只需记住一个类,学习成本低

  1. 表单填充

可轻松实现pdf表单的填充

  1. 图片转换

可轻松实现pdf转为图片

  1. 提取内容

可提取pdf页面中的文本及图片

  1. 文本替换

可将pdf中的文本内容进行替换,支持正则

  1. 拆分合并

可将pdf按照单页或多页进行拆分与合并

  1. 数字签名

可对已有pdf或新创建的pdf进行数字签名

  1. 内置字体

内置细体、正常、粗体三种开源中文字体(思源字体)

  1. 扩展灵活

只需实现框架提供的接口,即可完成自定义的组件扩展

  1. 组件构建

页面所有内容均采用组件化的形式进行构建

软件架构

软件架构

  1. document(文档):PDF文档
  2. page(页面):若干个页面组成PDF文档
  3. watermark(水印):每个页面可设置页面级别的独立水印,也可设置文档级别的全局水印,优先级为:页面级别>文档级别
  4. header(页眉):每个页面可设置页面级别的独立页眉,也可设置文档级别的全局页眉,优先级为:页面级别>文档级别
  5. footer(页脚):每个页面可设置页面级别的独立页脚,也可设置文档级别的全局页脚,优先级为:页面级别>文档级别
  6. component(组件):核心,每个页面由若干个组件构成

text(文本组件):已提供,文本写入组件

line(线条组件):已提供,线条写入组件

image(图片组件):已提供,图片写入组件

table(表格组件):已提供,表格写入组件,cell(单元格)->row(行)->table(表格)

rect(矩形组件):已提供,矩形写入组件

circle(圆形组件):已提供,圆形写入组件

barcode(条形码组件):已提供,条形码写入组件(包含一维码/二维码)

后续将添加更多其他方便实用的组件。。。

maven坐标

<dependency>    <groupId>wiki.xsx</groupId>    <artifactId>x-easypdf</artifactId>    <version>2.7.1</version></dependency>

安装教程

mvn clean install

使用说明

  1. 简单小示例

代码如下:

import wiki.xsx.core.pdf.component.XEasyPdfComponent;import wiki.xsx.core.pdf.component.image.XEasyPdfImageType;import wiki.xsx.core.pdf.handler.XEasyPdfHandler;import java.awt.*;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.Arrays;public class XpdfTest {        @SneakyThrows    public static void main(String[] args) {        // 定义图片路径        final String imagePath = "E:\\pdf\\test\\doc\\test.png";        // 定义保存路径        final String outputPath = "E:\\pdf\\test\\doc\\my.pdf";        // 定义页眉与页脚字体颜色        Color headerAndFooterColor = new Color(10, 195, 255);        // 定义分割线颜色        Color lineColor = new Color(210, 0, 210);        // 获取背景图片        try (InputStream backgroundImageInputStream = new URL("https://i0.hdslb.com/bfs/article/1e60a08c2dfdcfcd5bab0cae4538a1a7fe8fc0f3.png").openStream()) {            // 设置背景图片            XEasyPdfHandler.Document.build().setGlobalBackgroundImage(                    // 构建图片并垂直居中                    XEasyPdfHandler.Image.build(backgroundImageInputStream, XEasyPdfImageType.PNG).setVerticalStyle(XEasyPdfPositionStyle.CENTER)                    // 设置全局页眉            ).setGlobalHeader(                    // 构建页眉                    XEasyPdfHandler.Header.build(                            // 构建页眉图片,并居中显示                            XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).enableCenterStyle(),                            // 构建页眉文本,并居中显示                            XEasyPdfHandler.Text.build("这是粗体页眉")                                    // 设置水平垂直居中                                    .enableCenterStyle()                                    // 设置字体大小                                    .setFontSize(20F)                                    // 设置字体颜色                                    .setFontColor(headerAndFooterColor)                                    // 使用粗体字                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)                    )                    // 设置全局页脚            ).setGlobalFooter(                    // 构建页脚                    XEasyPdfHandler.Footer.build(                            // 构建页眉图片,并居中显示                            XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).setVerticalStyle(XEasyPdfPositionStyle.BOTTOM),                            // 构建页脚文本(手动分行),并居中显示                            XEasyPdfHandler.Text.build(Arrays.asList("这是粗体页脚第一行", "这是粗体页脚第二行"))                                    // 设置水平居中                                    .setHorizontalStyle(XEasyPdfPositionStyle.CENTER)                                    // 设置垂直居下                                    .setVerticalStyle(XEasyPdfPositionStyle.BOTTOM)                                    // 设置字体大小                                    .setFontSize(20F)                                    // 设置字体颜色                                    .setFontColor(headerAndFooterColor)                                    // 使用粗体字                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)                    )                    // 添加页面            ).addPage(                    // 构建页面                    XEasyPdfHandler.Page.build(                            // 构建文本                            XEasyPdfHandler.Text.build(                                    "x-easypdf简介(细体)"                                    // 设置水平居中                            ).setHorizontalStyle(XEasyPdfPositionStyle.CENTER)                                    // 设置字体大小                                    .setFontSize(16F)                                    // 使用细体字                                    .setDefaultFontStyle(XEasyPdfDefaultFontStyle.LIGHT)                                    // 开启删除线                                    .enableDeleteLine()                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "x-easypdf是一个基于PDFBOX的开源框架,"                            ).setFontSize(16F).setFontColor(new Color(51, 0, 153))                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "专注于PDF文件导出功能,"                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(102, 0, 153))                                    // 开启下划线并设置为红色                                    .enableUnderline().setUnderlineColor(Color.RED)                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "以组件形式进行拼接,"                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(153, 0, 153))                                    // 开启高亮并设置为橘色                                    .enableHighlight().setHighlightColor(Color.ORANGE)                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "简单、方便,功能丰富,"                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(204, 0, 153))                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "欢迎大家试用并提出宝贵意见。"                            ).enableTextAppend().setFontSize(16F).setFontColor(new Color(255, 0, 153))                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "-- by xsx"                            ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)                            // 构建文本                            ,XEasyPdfHandler.Text.build(                                    "2021.10.10"                            ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)                            // 构建实线分割线                            ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)                            // 构建虚线分割线                            ,XEasyPdfHandler.SplitLine.DottedLine.build().setLineLength(10F).setMarginTop(10F).setLineWidth(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)                            // 构建实线分割线                            ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)                            // 构建表格                            ,XEasyPdfHandler.Table.build(                                    // 构建行                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(                                                    // 添加文本                                                    XEasyPdfHandler.Text.build("第一行第一列")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(                                                    XEasyPdfHandler.Text.build("第一行第二列")                                            ),                                            // 构建单元格并设置字体大小为15,边框颜色为绿色                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(                                                    XEasyPdfHandler.Text.build("第一行第三列")                                            ).setFontSize(15F).setBorderColor(Color.GREEN),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(                                                    XEasyPdfHandler.Text.build("第一行第四列")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(                                                    XEasyPdfHandler.Text.build("第一行第五列")                                            )                                            // 设置该行字体大小为20                                    ).setFontSize(20F),                                    // 构建行                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格,合并三行                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(                                                    XEasyPdfHandler.Text.build(Arrays.asList("第二行", "第一列", "合并三行"))                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(300F).addContent(                                                    XEasyPdfHandler.Text.build("第二行第二列,合并三列")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(                                                    XEasyPdfHandler.Text.build("第二行第三列,合并三行")                                            )                                            // 设置行高为100(合并行需要设置平均行高)                                    ).setHeight(100F),                                    // 构建行                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格,开启垂直合并                                            XEasyPdfHandler.Table.Row.Cell.build(100F).enableVerticalMerge(),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第三行第一列")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第三行第二列")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第三行第三列")                                            )                                            // 设置行高为100,设置边框颜色为红色,设置字体颜色为蓝色                                    ).setHeight(100F).setBorderColor(Color.RED).setFontColor(Color.BLUE),                                    // 构建行(单元格已设置高度,则合并行无需设置行高)                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格,开启垂直合并                                            XEasyPdfHandler.Table.Row.Cell.build(100F, 100F).enableVerticalMerge(),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(300F, 100F).addContent(                                                    XEasyPdfHandler.Text.build("第四行第一列,合并三列")                                            )                                    ),                                    // 构建行(根据文本高度自适应行高)                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第五行第一列,自适应高度!")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第五行第二列,自适应高度!!!!!!!!!!")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第五行第三列,自适应高度!!!!!!!!!!!!!!!!!!!!!!")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第五行第四列,自适应高度!!!!!!!!!!")                                            ),                                            // 构建单元格                                            XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(                                                    XEasyPdfHandler.Text.build("第五行第五列,自适应高度!")                                            )                                    ),                                    // 构建行                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格,并设置边框颜色为橘色                                            XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(                                                    XEasyPdfHandler.Text.build("分页测试1")                                            ).setBorderColor(Color.ORANGE).setFontColor(Color.PINK)                                    )                                    // 设置表头行                            ).setTileRow(                                    // 构建行                                    XEasyPdfHandler.Table.Row.build(                                            // 构建单元格,并设置边框颜色为黑色,字体大小为30,字体颜色为紫色                                            XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(                                                    XEasyPdfHandler.Text.build("表头")                                            ).setBorderColor(Color.BLACK).setFontSize(30F).setFontColor(Color.MAGENTA)                                    )                                    // 开启表格内容上下左右居中                            ).enableCenterStyle()                                    // 设置左边距为50                                    .setMarginLeft(50F)                                    // 设置上边距为10                                    .setMarginTop(10F)                                    // 设置边框颜色为灰色                                    .setBorderColor(Color.GRAY)                                    // 开启自动表头(分页时,自动添加表头行)                                    .enableAutoTitle()                    )                    // 保存、关闭            ).save(outputPath).close();        }    }}

效果如下:

示例效果

  1. 使用说明

请查看wiki


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap