Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

Java根据模板动态生成Pdf:添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64

  • 引言
  • 【Java根据模板动态生成Pdf资源地址】
  • 示例一:动态生成带页码的PDF报告
  • 示例二:加密PDF以保护敏感信息
  • 示例三:应对免费版本限制——Spire.PDF 10页之后内容显示问题
  • 示例四:嵌入图片并添加电子公章
  • 实例五:转换生成的PDF至Base64编码
  • 结语
  • Java根据模板动态生成Pdf示例:


引言

        在众多企业级应用中,生成动态PDF文档是一项常见且关键的任务。这里将详细介绍如何运用Java编程语言,结合模板技术,实现从添加页码、文件加密、处理免费库限制、嵌入图片加盖公章到转换为Base64编码等一系列高级功能。我们将深入探讨多种应用场景,并附上简明易懂的代码片段和详细说明。

【Java根据模板动态生成Pdf资源地址】

       【→→→戳我跳转→】

示例一:动态生成带页码的PDF报告

描述
在长篇报告或者多页合同中,页码的自动添加尤为重要。

// 假设已创建Document对象document并填充内容
document.newPage();
// 设置空页码进行展示
writer.setPageEmpty(false);
PdfImportedPage page = writer.getImportedPage(reader, i);
// 复制好的页面,添加到内容去,触发事件监听
pdfContent.addTemplate(page, 0, 0);

示例二:加密PDF以保护敏感信息

描述
为了保证文档安全,我们可以利用iTextpdf对生成的PDF进行加密。

// spire.pdf.free免费加密源码
public void encrypt(String openPassword, String permissionPassword, EnumSet<PdfPermissionsFlags> permissions, PdfEncryptionKeySize keySize) {if (this.spr  .spr ()) {throw new IllegalStateException(sprPG.spr  ("1T\u001c\u0015\u001cZ\u0006\u0015\u0017[\u0011G\u000bE\u0006\u0015\u0013[RP\u001cV\u0000L\u0002A\u0017QRQ\u001dV\u0007X\u0017[\u0006\u001b&]\u0017\u0015\u0002P\u0000X\u001bF\u0001\\\u001d[RE\u0013F\u0001B\u001dG\u0016\u0015\u001bFR\\\u001cC\u0013Y\u001bQ\\"));} else {this.setUserPassword(openPassword);this.setOwnerPassword(permissionPassword);this.setPermissions(permissions);this.setKeySize(keySize);}
}

示例三:应对免费版本限制——Spire.PDF 10页之后内容显示问题

描述
某些免费版PDF库可能有页数限制。若遇到类似情况,比如Spire PDF免费版超过10页不显示内容的问题,可以通过购买商业授权或选择开源替代方案解决。

// 加密源码
public void setEncryption(byte[] userPassword, byte[] ownerPassword, int permissions, int encryptionType) throws DocumentException {if (this.stamper.isAppend()) {throw new DocumentException(MessageLocalization.getComposedMessage("append.mode.does.not.support.changing.the.encryption.status", new Object[0]));} else if (this.stamper.isContentWritten()) {throw new DocumentException(MessageLocalization.getComposedMessage("content.was.already.written.to.the.output", new Object[0]));} else {this.stamper.setEncryption(userPassword, ownerPassword, permissions, encryptionType);}
}

示例四:嵌入图片并添加电子公章

描述
在合同文档中嵌入公司公章图片,增强文件的合法性和权威性。

// 设置图片资源中的源码
public void setBaseURL(String url) {this.uac.setBaseURL(url);
}// 使用iText的其他示例,仅供参考,资源中有其他示例
Image img = Image.getInstance("company_stamp.png");
img.setAlignment(Image.ALIGN_CENTER);
document.add(img);// 或者精确定位印章位置
PdfTemplate template = writer.getDirectContent().createTemplate(img.getScaledWidth(), img.getScaledHeight());
template.addImage(img, img.getWidth(), 0, 0, img.getHeight(), 0, 0);
// 添加印章到指定坐标
ColumnText.showTextAligned(writer.getDirectContentUnder(), Element.ALIGN_CENTER, new Phrase(""), 0, 0, 0); // 清除当前位置
writer.getDirectContentUnder().addTemplate(template, xPosition, yPosition);

实例五:转换生成的PDF至Base64编码

描述
为了在网络传输或存储时方便处理,有时我们需要将PDF转换为Base64字符串。

// demo示例
try (FileInputStream fis = new FileInputStream("output.pdf")) {byte[] pdfBytes = new byte[fis.available()];fis.read(pdfBytes);String encodedPdf = Base64.getEncoder().encodeToString(pdfBytes);// 现在encodedPdf变量就包含了PDF文件的Base64编码
} catch (IOException e) {// 处理异常
}

结语

        通过以上几个实际的应用场景展示,我们了解了如何在Java中利用模板技术和PDF库有效地处理复杂的文档生成任务。实践中,请您根据实际情况调整上述代码和描述,确保它们与您的具体实现相符。同时,如果您的代码资源中使用的是其他PDF库,请相应替换上述示例代码。

Java根据模板动态生成Pdf示例:

       【Java根据模板动态生成Pdf资源地址→→→戳我跳转】

  • 导出的Pdf 示例
    在这里插入图片描述

  • 页码示例
    在这里插入图片描述

  • Sprire.PDF 免费加密版10页之后失效
    在这里插入图片描述

  • 加密示例
    在这里插入图片描述

  • 公章示例(添加图片)
    在这里插入图片描述

  • 10页后解决方案示例
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652306.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts地图叠加百度地图底板实现数据可视化

这里写自定义目录标题 echarts地图叠加百度地图实现数据可视化echarts地图叠加百度地图实现数据可视化 实现数据可视化时,个别情况下需要在地图上实现数据的可视化,echarts加载geojson数据可以实现以地图形式展示数据,例如分层设色或者鼠标hover展示指标值,但如果要将echa…

Electron+Vue3+ElectronForge整合 - 打包时整合 -分步打包

说明 本文介绍一下 Electron Vue3 的打包整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b; 3、完成打包时整合&#xff1a;3.1 先完成vue3项目的正常…

c语言指针的应用场景

​ 1.什么是指针&#xff1f; 当我们提起指针的时候&#xff0c;可能第一反应会露出惊喜的表情 &#xff08;但是我们其实没必要那么慌&#xff0c;因为当我们随着我们学习的越来越深入就会发现&#xff0c;指针虽然看起来难&#xff0c;实际上也不怎么简单。哈哈哈开玩笑的&a…

DataX数据采集流程(项目)

目录 1.CDH介绍 2.ClouderaManager架构 3.服务器 4.dataX架构 5.Datax数据处理流程 6.DataX的使用说明 7.Mysql数据切割 8.Mysql数据导入HDFS 9.查询站点 站点页面如下&#xff0c;可进一步查询导入的数据内容 10.dataX-Web访问页面 创建数据库连接 1.CDH介绍 --(…

BUUCTF--web(1)

1、[极客大挑战 2019]Http1 1.http报文请求&#xff1a; 1、请求行&#xff1a; 第一部分是请求方法&#xff0c;常见包括GET、POST、OPTIONS&#xff08;我目前还没有见过我是菜鸡&#xff09; 第二部分是url 第三部分是HTTP协议(http(Hypertext transfer protocol)超文本传…

TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测

文章目录 效果一览文章概述 订阅专栏只能获取一份代码部分源码参考资料 效果一览 文章概述 TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测 matlab2021 订阅专栏只能获取一份代码 部分源码 %------------------------------------------------------------------…

Golang | Leetcode Golang题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; func totalNQueens(n int) (ans int) {columns : make([]bool, n) // 列上是否有皇后diagonals1 : make([]bool, 2*n-1) // 左上到右下是否有皇后diagonals2 : make([]bool, 2*n-1) // 右上到左下是否有皇后var backtrack func(int)…

SSH新功能揭秘:远程工作提升指南【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3.和为S的两个数字4.四数之和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.有效三角形的个数…

mysql download 2024

好久没在官网下载 mysql server 安装包。今天想下载发现&#xff1a; 我访问mysql官网的速度好慢啊。mysql server 的下载页面在哪里啊&#xff0c;一下两下找不到。 最后&#xff0c;慢慢悠悠终于找到了下载页面&#xff0c;如下&#xff1a; https://dev.mysql.com/downlo…

第一个大型汽车ITU-T车载语音通话质量实验室投入使用

中国汽车行业蓬勃发展&#xff0c;尤其是新能源汽车风起云涌&#xff0c;无论是国内还是海外需求旺盛的趋势下&#xff0c;除乘用车等紧凑型车外&#xff0c;中型汽车如MPV、小巴、小型物流车&#xff0c;大型汽车如重卡、泥头车等亦加入了手机互联、智驾的科技行列&#xff0c…

【linux】动静态库的使用与制作

本章节是基础IO的的最后一个话题!! 目录 浅谈一下动静态库&#xff1a;动静态库的制作与使用&#xff1a;静态库&#xff1a;怎么办&#xff1a;方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;方法四&#xff1a; 是什么&#xff1a;为什么&#xff1a; 动态库&#…