java源码用搭积木的方式构建pdf的框架(基于pdfbox)

java源码用搭积木的方式构建pdf的框架(基于pdfbox)一、项目简介

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

二、功能概述特性

1、体积轻量

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

2、简单智能

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

3、表单填充

可轻松实现pdf表单的填充

4、图片转换

可轻松实现pdf转为图片

5、提取内容

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

6、文本替换

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

7、拆分合并

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

8、数字签名

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

9、内置字体

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

10、扩展灵活

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

11、组件构建

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

三、技术选型软件架构

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

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

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

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

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

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

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

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

layout(布局组件):已提供,包含水平布局与垂直布局,支持相互嵌套

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

maven坐标

  1. <dependency>
  2.     <groupId>wiki.xsx</groupId>
  3.     <artifactId>x-easypdf</artifactId>
  4.     <version>2.7.4</version>
  5. </dependency>

复制代码

安装教程

  1. mvn clean install

复制代码

使用说明

  • 简单小示例
  1. import wiki.xsx.core.pdf.component.XEasyPdfComponent;
  2. import wiki.xsx.core.pdf.component.image.XEasyPdfImageType;
  3. import wiki.xsx.core.pdf.handler.XEasyPdfHandler;
  4. import java.awt.*;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.net.URL;
  9. import java.util.Arrays;
  10. public class XpdfTest {
  11.     @SneakyThrows
  12.     public static void main(String[] args) {
  13.         // 定义图片路径
  14.         final String imagePath = “E:\\pdf\\test\\doc\\test.png”;
  15.         // 定义保存路径
  16.         final String outputPath = “E:\\pdf\\test\\doc\\my.pdf”;
  17.         // 定义页眉与页脚字体颜色
  18.         Color headerAndFooterColor = new Color(10, 195, 255);
  19.         // 定义分割线颜色
  20.         Color lineColor = new Color(210, 0, 210);
  21.         // 获取背景图片
  22.         try (InputStream backgroundImageInputStream = new URL(“https://i0.hdslb.com/bfs/article/1e60a08c2dfdcfcd5bab0cae4538a1a7fe8fc0f3.png”).openStream()) {
  23.             // 设置背景图片
  24.             XEasyPdfHandler.Document.build().setGlobalBackgroundImage(
  25.                     // 构建图片并垂直居中
  26.                     XEasyPdfHandler.Image.build(backgroundImageInputStream, XEasyPdfImageType.PNG).setVerticalStyle(XEasyPdfPositionStyle.CENTER)
  27.                     // 设置全局页眉
  28.             ).setGlobalHeader(
  29.                     // 构建页眉
  30.                     XEasyPdfHandler.Header.build(
  31.                             // 构建页眉图片,并居中显示
  32.                             XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).enableCenterStyle(),
  33.                             // 构建页眉文本,并居中显示
  34.                             XEasyPdfHandler.Text.build(“这是粗体页眉”)
  35.                                     // 设置水平垂直居中
  36.                                     .enableCenterStyle()
  37.                                     // 设置字体大小
  38.                                     .setFontSize(20F)
  39.                                     // 设置字体颜色
  40.                                     .setFontColor(headerAndFooterColor)
  41.                                     // 使用粗体字
  42.                                     .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)
  43.                     )
  44.                     // 设置全局页脚
  45.             ).setGlobalFooter(
  46.                     // 构建页脚
  47.                     XEasyPdfHandler.Footer.build(
  48.                             // 构建页眉图片,并居中显示
  49.                             XEasyPdfHandler.Image.build(new File(imagePath)).setHeight(50F).setVerticalStyle(XEasyPdfPositionStyle.BOTTOM),
  50.                             // 构建页脚文本(手动分行),并居中显示
  51.                             XEasyPdfHandler.Text.build(Arrays.asList(“这是粗体页脚第一行”, “这是粗体页脚第二行”))
  52.                                     // 设置水平居中
  53.                                     .setHorizontalStyle(XEasyPdfPositionStyle.CENTER)
  54.                                     // 设置垂直居下
  55.                                     .setVerticalStyle(XEasyPdfPositionStyle.BOTTOM)
  56.                                     // 设置字体大小
  57.                                     .setFontSize(20F)
  58.                                     // 设置字体颜色
  59.                                     .setFontColor(headerAndFooterColor)
  60.                                     // 使用粗体字
  61.                                     .setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)
  62.                     )
  63.                     // 添加页面
  64.             ).addPage(
  65.                     // 构建页面
  66.                     XEasyPdfHandler.Page.build(
  67.                             // 构建文本
  68.                             XEasyPdfHandler.Text.build(
  69.                                     “x-easypdf简介(细体)”
  70.                                     // 设置水平居中
  71.                             ).setHorizontalStyle(XEasyPdfPositionStyle.CENTER)
  72.                                     // 设置字体大小
  73.                                     .setFontSize(16F)
  74.                                     // 使用细体字
  75.                                     .setDefaultFontStyle(XEasyPdfDefaultFontStyle.LIGHT)
  76.                                     // 开启删除线
  77.                                     .enableDeleteLine()
  78.                             // 构建文本
  79.                             ,XEasyPdfHandler.Text.build(
  80.                                     “x-easypdf是一个基于PDFBOX的开源框架,”
  81.                             ).setFontSize(16F).setFontColor(new Color(51, 0, 153))
  82.                             // 构建文本
  83.                             ,XEasyPdfHandler.Text.build(
  84.                                     “专注于PDF文件导出功能,”
  85.                             ).enableTextAppend().setFontSize(16F).setFontColor(new Color(102, 0, 153))
  86.                                     // 开启下划线并设置为红色
  87.                                     .enableUnderline().setUnderlineColor(Color.RED)
  88.                             // 构建文本
  89.                             ,XEasyPdfHandler.Text.build(
  90.                                     “以组件形式进行拼接,”
  91.                             ).enableTextAppend().setFontSize(16F).setFontColor(new Color(153, 0, 153))
  92.                                     // 开启高亮并设置为橘色
  93.                                     .enableHighlight().setHighlightColor(Color.ORANGE)
  94.                             // 构建文本
  95.                             ,XEasyPdfHandler.Text.build(
  96.                                     “简单、方便,功能丰富,”
  97.                             ).enableTextAppend().setFontSize(16F).setFontColor(new Color(204, 0, 153))
  98.                             // 构建文本
  99.                             ,XEasyPdfHandler.Text.build(
  100.                                     “欢迎大家试用并提出宝贵意见。”
  101.                             ).enableTextAppend().setFontSize(16F).setFontColor(new Color(255, 0, 153))
  102.                             // 构建文本
  103.                             ,XEasyPdfHandler.Text.build(
  104.                                     “– by xsx”
  105.                             ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)
  106.                             // 构建文本
  107.                             ,XEasyPdfHandler.Text.build(
  108.                                     “2021.10.10”
  109.                             ).setHorizontalStyle(XEasyPdfPositionStyle.RIGHT).setMarginTop(10F).setMarginRight(10F)
  110.                             // 构建实线分割线
  111.                             ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
  112.                             // 构建虚线分割线
  113.                             ,XEasyPdfHandler.SplitLine.DottedLine.build().setLineLength(10F).setMarginTop(10F).setLineWidth(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
  114.                             // 构建实线分割线
  115.                             ,XEasyPdfHandler.SplitLine.SolidLine.build().setMarginTop(10F).setColor(lineColor).setContentMode(XEasyPdfComponent.ContentMode.PREPEND)
  116.                             // 构建表格
  117.                             ,XEasyPdfHandler.Table.build(
  118.                                     // 构建行
  119.                                     XEasyPdfHandler.Table.Row.build(
  120.                                             // 构建单元格
  121.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
  122.                                                     // 添加文本
  123.                                                     XEasyPdfHandler.Text.build(“第一行第一列”)
  124.                                             ),
  125.                                             // 构建单元格
  126.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
  127.                                                     XEasyPdfHandler.Text.build(“第一行第二列”)
  128.                                             ),
  129.                                             // 构建单元格并设置字体大小为15,边框颜色为绿色
  130.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
  131.                                                     XEasyPdfHandler.Text.build(“第一行第三列”)
  132.                                             ).setFontSize(15F).setBorderColor(Color.GREEN),
  133.                                             // 构建单元格
  134.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
  135.                                                     XEasyPdfHandler.Text.build(“第一行第四列”)
  136.                                             ),
  137.                                             // 构建单元格
  138.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 50F).addContent(
  139.                                                     XEasyPdfHandler.Text.build(“第一行第五列”)
  140.                                             )
  141.                                             // 设置该行字体大小为20
  142.                                     ).setFontSize(20F),
  143.                                     // 构建行
  144.                                     XEasyPdfHandler.Table.Row.build(
  145.                                             // 构建单元格,合并三行
  146.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(
  147.                                                     XEasyPdfHandler.Text.build(Arrays.asList(“第二行”, “第一列”, “合并三行”))
  148.                                             ),
  149.                                             // 构建单元格
  150.                                             XEasyPdfHandler.Table.Row.Cell.build(300F).addContent(
  151.                                                     XEasyPdfHandler.Text.build(“第二行第二列,合并三列”)
  152.                                             ),
  153.                                             // 构建单元格
  154.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 300F).addContent(
  155.                                                     XEasyPdfHandler.Text.build(“第二行第三列,合并三行”)
  156.                                             )
  157.                                             // 设置行高为100(合并行需要设置平均行高)
  158.                                     ).setHeight(100F),
  159.                                     // 构建行
  160.                                     XEasyPdfHandler.Table.Row.build(
  161.                                             // 构建单元格,开启垂直合并
  162.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).enableVerticalMerge(),
  163.                                             // 构建单元格
  164.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  165.                                                     XEasyPdfHandler.Text.build(“第三行第一列”)
  166.                                             ),
  167.                                             // 构建单元格
  168.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  169.                                                     XEasyPdfHandler.Text.build(“第三行第二列”)
  170.                                             ),
  171.                                             // 构建单元格
  172.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  173.                                                     XEasyPdfHandler.Text.build(“第三行第三列”)
  174.                                             )
  175.                                             // 设置行高为100,设置边框颜色为红色,设置字体颜色为蓝色
  176.                                     ).setHeight(100F).setBorderColor(Color.RED).setFontColor(Color.BLUE),
  177.                                     // 构建行(单元格已设置高度,则合并行无需设置行高)
  178.                                     XEasyPdfHandler.Table.Row.build(
  179.                                             // 构建单元格,开启垂直合并
  180.                                             XEasyPdfHandler.Table.Row.Cell.build(100F, 100F).enableVerticalMerge(),
  181.                                             // 构建单元格
  182.                                             XEasyPdfHandler.Table.Row.Cell.build(300F, 100F).addContent(
  183.                                                     XEasyPdfHandler.Text.build(“第四行第一列,合并三列”)
  184.                                             )
  185.                                     ),
  186.                                     // 构建行(根据文本高度自适应行高)
  187.                                     XEasyPdfHandler.Table.Row.build(
  188.                                             // 构建单元格
  189.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  190.                                                     XEasyPdfHandler.Text.build(“第五行第一列,自适应高度!”)
  191.                                             ),
  192.                                             // 构建单元格
  193.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  194.                                                     XEasyPdfHandler.Text.build(“第五行第二列,自适应高度!!!!!!!!!!”)
  195.                                             ),
  196.                                             // 构建单元格
  197.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  198.                                                     XEasyPdfHandler.Text.build(“第五行第三列,自适应高度!!!!!!!!!!!!!!!!!!!!!!”)
  199.                                             ),
  200.                                             // 构建单元格
  201.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  202.                                                     XEasyPdfHandler.Text.build(“第五行第四列,自适应高度!!!!!!!!!!”)
  203.                                             ),
  204.                                             // 构建单元格
  205.                                             XEasyPdfHandler.Table.Row.Cell.build(100F).addContent(
  206.                                                     XEasyPdfHandler.Text.build(“第五行第五列,自适应高度!”)
  207.                                             )
  208.                                     ),
  209.                                     // 构建行
  210.                                     XEasyPdfHandler.Table.Row.build(
  211.                                             // 构建单元格,并设置边框颜色为橘色
  212.                                             XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(
  213.                                                     XEasyPdfHandler.Text.build(“分页测试1”)
  214.                                             ).setBorderColor(Color.ORANGE).setFontColor(Color.PINK)
  215.                                     )
  216.                                     // 设置表头行
  217.                             ).setTileRow(
  218.                                     // 构建行
  219.                                     XEasyPdfHandler.Table.Row.build(
  220.                                             // 构建单元格,并设置边框颜色为黑色,字体大小为30,字体颜色为紫色
  221.                                             XEasyPdfHandler.Table.Row.Cell.build(500F, 100F).addContent(
  222.                                                     XEasyPdfHandler.Text.build(“表头”)
  223.                                             ).setBorderColor(Color.BLACK).setFontSize(30F).setFontColor(Color.MAGENTA)
  224.                                     )
  225.                                     // 开启表格内容上下左右居中
  226.                             ).enableCenterStyle()
  227.                                     // 设置左边距为50
  228.                                     .setMarginLeft(50F)
  229.                                     // 设置上边距为10
  230.                                     .setMarginTop(10F)
  231.                                     // 设置边框颜色为灰色
  232.                                     .setBorderColor(Color.GRAY)
  233.                                     // 开启自动表头(分页时,自动添加表头行)
  234.                                     .enableAutoTitle()
  235.                     )
  236.                     // 保存、关闭
  237.             ).save(outputPath).close();
  238.         }
  239.     }
  240. }

复制代码

下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,由于源码具有复制性,一经售出,概不退换。用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【188资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容。
188资源网 » java源码用搭积木的方式构建pdf的框架(基于pdfbox)

提供最优质的资源集合

立即查看 了解详情