依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13|回复: 0

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

[复制链接] 主动推送

8762

主题

8814

帖子

9958

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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



游客,本帖隐藏的内容需要积分高于 2 才可浏览,您当前积分为 0

提取码下载:
文件名称:提取码下载.txt 
下载次数:0  文件大小:13 Bytes  售价:69金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员5折;永久VIP免费】
安全检测,请放心下载





相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|小黑屋|依星资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-7-27 20:28

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表