Java根据模板动态生成Pdf:添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64
- 引言
- 【Java根据模板动态生成Pdf资源地址】
- 示例一:动态生成带页码的PDF报告
- 示例二:加密PDF以保护敏感信息
- [示例三:应对免费版本限制------Spire.PDF 10页之后内容显示问题](#示例三:应对免费版本限制——Spire.PDF 10页之后内容显示问题)
- 示例四:嵌入图片并添加电子公章
- 实例五:转换生成的PDF至Base64编码
- 结语
- Java根据模板动态生成Pdf示例:
引言
在众多企业级应用中,生成动态PDF文档是一项常见且关键的任务。这里将详细介绍如何运用Java编程语言,结合模板技术,实现从添加页码、文件加密、处理免费库限制、嵌入图片加盖公章到转换为Base64编码等一系列高级功能。我们将深入探讨多种应用场景,并附上简明易懂的代码片段和详细说明。
【Java根据模板动态生成Pdf资源地址】
示例一:动态生成带页码的PDF报告
描述 :
在长篇报告或者多页合同中,页码的自动添加尤为重要。
java
// 假设已创建Document对象document并填充内容
document.newPage();
// 设置空页码进行展示
writer.setPageEmpty(false);
PdfImportedPage page = writer.getImportedPage(reader, i);
// 复制好的页面,添加到内容去,触发事件监听
pdfContent.addTemplate(page, 0, 0);
示例二:加密PDF以保护敏感信息
描述 :
为了保证文档安全,我们可以利用iTextpdf
对生成的PDF进行加密。
java
// 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页不显示内容的问题,可以通过购买商业授权或选择开源替代方案解决。
java-comment
// 加密源码
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);
}
}
示例四:嵌入图片并添加电子公章
描述 :
在合同文档中嵌入公司公章图片,增强文件的合法性和权威性。
java
// 设置图片资源中的源码
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字符串。
java
// 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示例:
-
导出的Pdf 示例
-
页码示例
-
Sprire.PDF 免费加密版10页之后失效
-
加密示例
-
公章示例(添加图片)
-
10页后解决方案示例