itextpdf实践与问题

SpringBoot项目实战:集成itextpdf动态生成PDF报表,并解决中文乱码问题 本文详细介绍了在SpringBoot项目中集成iTextPDF动态生成PDF报表的实战经验,重点解决中文乱码问题。通过环境准备、服务层设计、HTTP响应优化等步骤,提供了一套完整的解决方案,适用于电商后台、数据看板等场景,显著提升PDF生成效率。 阅读详情


文章内容: PDF文档的处理以及碰到的问题


需求:合成图片到pdf文档

代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class MergeFileTest {
	
	public static void main(String[] args) throws Exception {
		mergeImage(
				getImage("D:/exercise/pic/lisi-01.png"), 
				readFile("D:/exercise/pdf/20161213-001.pdf"), 
				"D:/exercise/pdf/merged20161213-001.pdf");
	}
	
	/**
	 * 合并图片到pdf文档
	 * @param img
	 * @param document
	 * @param savePath
	 * @throws Exception
	 */
	public static void mergeImage(Image img, byte[] document, String savePath) throws Exception{
		PdfStamper stamper = new PdfStamper(
				getPdfReader(document), new FileOutputStream(savePath));		
		PdfContentByte content = stamper.getOverContent(1);
		
		content.addImage(img);
		System.out.println("Merge completed.");
		stamper.close();
	}
	
	private static Image getImage(String imgPath) throws Exception{
		//获取图片
		Image img = Image.getInstance(imgPath);
		//设置缩放比例
		img.scalePercent(20f);
		//设置位置
		img.setAbsolutePosition(156, 545);
		
		return img;
	}
	
	/**
	 * 读取文件
	 * @param filePath
	 * @return
	 */
	private static byte[] readFile(String filePath) {
		FileInputStream file=null;
		try {
			file = new FileInputStream(filePath);
			byte[] fileByte = new byte[file.available()];
			file.read(fileByte);
			
			return fileByte;
		} catch (Exception e) {
			System.out.println(String.format(
					"fail to read file [%s], exception=%s", filePath, e.getMessage()));
		}finally {
			try {
				file.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return null;
	}
	
	private static PdfReader getPdfReader(byte[] document) throws IOException{
		PdfReader pdfReader = new PdfReader(document);
		pdfReader.unethicalreading = true;
		
		return pdfReader;
	}
	
}


文档合并前:



文档合并后:



Tips : 为了不覆盖文字,请确保png图片背景透明

----------------------------------------------------------------------------------------------------------


依赖的jar配置如下:

<!-- PDF处理JAR -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.3.2</version>
		</dependency>
		
		<dependency>
		    <groupId>org.bouncycastle</groupId>
		    <artifactId>bcprov-ext-jdk15on</artifactId>
		    <version>1.51</version>
		</dependency>

问题一:读取被加密的PDF文档时报错:

com.itextpdf.text.exceptions.BadPasswordException:: PdfReader not opened with owner password (未设置加密密码)或是

com.itextpdf.text.exceptions.BadPasswordException: PdfReader not opened with owner passwor (设置正确加密密码后)

解决方案:

设置PdfReader的静态属性unethicalreading为true, 无需设置加密密码,示例代码:

	PdfReader pdfReader = new PdfReader(document);
	pdfReader.unethicalreading = true;




itextPDF5.5.13 pdf加水印的权限控制 1、我们的需求需要对pdf加水印,其中有加密的和未加密的, 操作过程中发现 有的虽然加密了 但是符合PDFReader的五种加密算法,就可以成功破解加水印,还有一些就会抛出一些异常 第一种报错:com.itextpdf.text.exceptions.InvalidPdfException: Unknown encryption type R=6 这种是加密算法无法破解 还有些就是文件内容或者格式有问题 第二种报错:com.itextpdf.text.exceptions.InvalidPd 阅读详情

相关推荐

iText7使用PdfFont遇特殊字符如‘凉’字报空指针,中文打印乱码问题--最终解决方案!!

首先看原来的代码: PdfFont font = PdfFontFactory.createFont(“STSongStd-Light”, “UniGB-UCS2-H”, true); 遇到凉字跟特殊字符会空指针异常.,具体如下。 java.lang.NullPointerException at com.itextpdf.kernel.font.PdfType0Font.getCidFontType2(PdfType0Font.java:720) at com.itextpdf.ker...

qq_42599451的博客 5149

(已解决)使用Itext合并pdf报错:com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found

当我执行这三行代码后,参数 filePaths 中的第一个文件大小会变成 0 KB,后面我又去循环这个 filePaths, 在第一次循环时,new PdfReader(filePath);真正困难的其实是:发现问题发生的真正原因,上面我们已经知道了错误的原因是由于 filePaths 中的第一个文件大小是0kb,我们在循环拼接之前将 File 保存为 byte[] ,其实应该有更好的解决方式。有好的解决方案大家一起分享一下。看似没问题的代码,运行起来让人头大,问题的原因也让人无语(小小吐槽一下,诶嘿~)

小庆的博客 1万+

从Word到可填充PDF:手把手教你用Adobe Acrobat DC设计iTextPDF表单模板

本文详细介绍了如何使用Adobe Acrobat DC设计iTextPDF表单模板,从Word文档转换到可填充PDF的全过程。通过字段分组、命名空间设计和版本控制等策略,提升表单的可用性和程序化处理效率。文章还涵盖了高级表单域配置、样式控制及与iTextPDF的无缝对接技巧,适合需要批量生成标准化文档的技术场景。

weixin_33737134的博客 262

com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found.

用pdfreader()方法时时常会报:com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found.这个错, PdfReader reader = new PdfReader(""); 从图中可以看出有这几种参数,可以都换着试一试。如果都不行的话,可能是pdf文件的问题,查看pdf文件是不...

海淀吴彦祖的博客 4万+

利用iTextPDF在PDF中动态生成带勾选框的表单元素

本文详细介绍了如何利用iTextPDF库在PDF文档中动态生成交互式勾选框表单元素。通过从基础概念、坐标系统到实战案例的逐步讲解,文章展示了如何创建、自定义样式、布局以及预填充数据,并分享了在员工绩效考核系统等复杂场景下的应用经验与性能优化技巧,帮助开发者高效处理PDF表单生成需求。

weixin_29300931的博客 456

Java 结合iTextPDF实现动态数据报表的PDF生成实战

在日常开发中,我们经常遇到需要将数据库或API接口中的动态数据导出为PDF报表的需求。这些场景下,报表的数据是实时变化的,表头、数据行甚至表尾的合计值都需要动态生成。在实际项目中,我通常会把这些技巧封装成公司内部的PDF工具包。比如最近为某零售客户实现的解决方案,每天自动生成3000+份销售报表,平均处理时间控制在500ms以内。iTextPDF作为Java生态中最成熟的PDF操作库之一,特别适合处理这类需求。我经手过的十几个企业级项目中,有80%的PDF报表需求都是用iTextPDF实现的。

weixin_33483304的博客 83

避开这些坑!iTextPDF绘制勾选框时常见的3个字体问题及解决方案

本文详细解析了使用iTextPDF绘制勾选框时常见的3个字体问题,包括符号不显示、乱码及位置偏移,并提供了实用的解决方案。通过指定Unicode字体、正确设置编码方式及动态计算符号位置,开发者可以避免这些陷阱,确保PDF表单中的勾选框显示正确且美观。

postgres8guard的博客 953

Spring Boot生存指南:自动装配、Starter契约与实战排坑

Spring Boot并非简单的Spring简化版,而是一套以‘条件化自动装配’和‘能力交付契约’为核心的工程化开发框架。其核心原理在于基于@Conditional的启动时条件匹配、Starter封装的可覆盖配置协议,以及外部化配置的宪法式层级管理。技术价值体现在显著降低Java Web项目启动失败率、配置漂移风险和多环境部署复杂度。典型应用场景包括数据库连接池故障排查、PDF中文渲染、MyBatis Plus分页冲突、Excel像素级转图等高频生产问题。本文聚焦真实世界中的启动契约、配置校验与热词场景(如

人生的意義在於修煉!修煉之路~ 486

iTextpdf常见问题解答:新手必知的15个坑与解决方案

iTextpdf是一个功能强大的Java库,用于生成和操作PDF文档。无论是开发报告系统、生成发票还是创建电子书,iTextpdf都能满足需求。然而,新手在使用过程中常遇到各种问题。本文整理了15个最常见的坑及解决方案,帮助你快速掌握iTextpdf的使用技巧。 ## 1. 图片插入后显示异常怎么办? 图片处理是iTextpdf开发中的常见痛点,尤其是尺寸、格式和路径问题容易导致显示异常。

gitblog_00515的博客 378

Itextpdf5 基础知识

Itextpdf5 基础知识 业务背景:需要根据甲方提供的材料模板,生成对应的pdf文件(后台实现) 这里根据我遇到情况,记录当前需要的知识点,写的一些小Demo。 依赖引入 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dep

weixin_43164309的博客 2585

【itext7】itext7操作PDF文档之创建PDF文档、加载PDF文档、添加空白页、操作PDF页面、itext中的常见类及其方法

itext7是一款功能更加强大的PDF文档操作组件,它的功能虽然强大,但是是要收费的,当然也有免费版本的,免费那功能肯定就会有删减,不过免费版本的itext差不多已经可以满足大部分需求了。itext7和PDFBox类似,但是itext操作PDF比PDFBox更加的强大,itext7是将整个PDF文件抽象为一个PdfDocument对象,文件由多个PdfPage页面或者由单个Document文档对象构成,Document对象默认就表示PDF文档的第一页,在Document之上,可以进行内容的编辑,例如:添加

✅ Java 开发工程师 8511

Java Excel转PDF实战:如何用iTextPDF处理带图片的xlsx文件(附完整代码)

本文详细介绍了如何使用Java结合iTextPDF和POI库将带图片的xlsx文件转换为PDF文档。通过解析Excel文件结构、处理图片嵌入和格式兼容性等关键技术,提供完整的代码实现和性能优化建议,适用于企业级报表转换需求。

weixin_29207439的博客 381

ArcGIS中利用DEM数据生成地形图既视感的等高线;利用掩膜进行等高线注记;DEM的可视化表达总结

文章目录前言一、效果图展示二、地形(DEM)可视化表达1.一维可视化2.二维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化总结 前言 最近老师布置作业:DEM的可视化表达。想做一个等高线地形图那样、看起来高级一点的等高线,可是我看网上大多数教程都只展示了【等值线】工具,做出来效果都一般。我自认为自己做出来的效果还可以,把步骤分享给大家。 一、

pink_pig__的博客 5万+

采用itextpdf、xmlworker实现HTML转PDF

这几天有需求要统计报表转PDF 众所周知 统计报表那可不是一般的长 可把我整的够呛 心塞了好几天 几度失败 都到怀疑自己能力的地步了 因为前面做过了用freemarker模板HTML转word 心里以为freemarker肯定也提供了PDF的模板 用模板的话 逻辑简单 但是慢 需要花费的时间多 因为需要被转的HTML特别特别长 要是往模板里面塞数据的话 很费事 然后就...

qq_37059004的博客 7285

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 371

STM32H750VBT6在Keil5下载报错?三步搞定Flash Download Failed Cortex-M7问题

本文针对STM32H750VBT6在Keil5开发环境中常见的“Flash Download Failed Cortex-M7”下载报错问题,提供了系统性的三步解决方案。核心在于理解该芯片128KB内部Flash的特殊性,并详细指导用户检查更新Device Pack、精确配置Flash下载算法地址(0x08000000, 0x20000)以及进行硬件连接验证,从而快速修复调试器与芯片间的Flash操作协议问题。

weixin_29274969的博客 481

Java 实现 PDF 文件添加文字 / 图片水印(附 MinIO 下载场景实战)

本文介绍了使用iTextPDF库实现PDF文件水印添加的完整方案。文章首先提供了Maven和Gradle两种方式的依赖配置,包括核心库、中文字体支持和MinIO客户端等。然后详细封装了PDFUtil工具类,支持文字水印和图片水印两种方式,特别处理了Windows/Linux系统的字体差异问题。对于图片水印,实现了透明度和多页均匀分布功能;对于文字水印,则解决了中文乱码问题,并支持旋转角度设置。该方案可直接应用于文件脱敏、版权标识等场景,特别是与MinIO文件下载结合使用时,能实现下载时自动添加水印的功能。

qq_29757467的博客 1720

高通QCOM Camera Pipeline 可视化工具:从XML到交互式图谱的工程实践

本文详细介绍了高通QCOM Camera Pipeline可视化工具的工程实践,旨在解决Camera驱动与算法工程师在解析复杂XML配置文件时的痛点。该工具能将静态的XML文件(如g_camx_usecase.xml)自动转换为交互式视觉图谱,通过分层布局算法清晰展示Pipeline、Node、Port和Link的拓扑关系,并支持悬停查看、拖动缩放等交互操作,极大提升了开发调试与架构理解的效率。

prometheus5watch的博客 555

采用itextpdf 实现java的PDF生成与导出功能,含封装工具类代码

本文介绍了一种使用itextpdf库结合Spring Boot实现PDF导出的方法。通过制作PDF模板并利用字段填充的方式完成数据的自动填充,同时解决了中文显示及图片字段处理的问题。

qq_25720801的博客 7332

经典蓝牙中的Sniff、Hold与Park模式

若主设备在Sniff Attempt窗口外发送数据,从设备无法接收,需依赖重传机制。移动时立即传输数据。:Sniff Interval=20ms,Attempt=1时隙。:传感器每2秒唤醒一次同步信标,主设备按需唤醒特定传感器采集数据。Slave进入Sniff模式:每20ms唤醒1个时隙监听数据。:设备需要短暂执行高优先级任务(如扫描其他蓝牙设备)。:无数据传输超时后,设备可能自动进入Sniff模式。:主设备通过信标唤醒从设备,或从设备主动请求退出(:平衡功耗与响应速度,适合间歇性数据传输设备。

shishuangquan111的博客 1673

LoveSQL

LoveSQL(SQL注入详解) 1、根据题目,显然想到的是sql注入漏洞,直接尝试万能密码 2、此时url构造,查看字段数 /check.php?username=admin' order by 3%23&password=1 # 存在 /check.php?username=admin' order by 4%23&password=1 # 报错 因此,得到总共有三个字段数 注意:url中不能用#,应该用url编码%23 3、用union来查询测试注入点,查看回显点

lunan的博客 1562

使用itextPdf合并PDF

一简介 由于不同PDF合同有不同的条文,故需要拼接多个PDF 二 项目依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.2</version>...

weixin_39515661的博客 5297

PyCharm安装PyQt5及工具详细教程

PyCharm是一款功能强大的Python集成开发环境(IDE),而PyQt5是一个用于创建GUI应用程序的流行Python库。在本教程中,我将指导您如何在PyCharm中安装PyQt5及其相关工具,并提供相应的源代码示例。安装完成后,启动PyCharm并创建一个新的项目。为了隔离项目的依赖项,我们建议在PyCharm中使用虚拟环境。在创建项目的过程中,您可以选择创建新的虚拟环境或使用现有的环境。根据您的操作系统,选择适当的版本并按照安装向导的指示进行安装。首先,您需要下载并安装PyCharm。

CfProgram的博客 589

itextpdf中文乱码问题研究

最近打算用java代码生成一个pdf,结果找到了itextpdf, 感觉还是很强大的,只是网传不支持中文。引用了itextAsia 搞了好半天中文居然乱码。 网上的各种方法他能生成中文,但是我还是乱码,无奈之下研究了一下字符集,一切从Charset.defaultCharset()这个方法开始。 System.out.println(Charset.defaultCharset());输出结果...

mtaxot的博客 3279

【OpenClaw企业级智能体实战】第16篇:电商“龙虾”掘金记:用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw(小龙虾)已成为电商运营的核心效率工具——从公众号文案3分钟生成到TikTok爆款视频1小时复刻,从多平台内容同步到自动比价加购,彻底重构了电商运营的工作模式。本文基于真实商业案例(元岳科技、TikTok跨境卖家、淘宝MCP工具),系统拆解电商智能体的落地路径:先详解OpenClaw在电商场景的核心原理与变现模式(代部署、模板售卖、轻定制、内容套利),再提供阿里云/本地双部署方案,完整实现小红书/抖音/淘宝的自动化运营(热点抓取、内容生成、多平台分发、数据分析)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2290

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

iTextPdf之填充问题

iTextPdf填写Pdf表格出现Field空白现象 最近在帮客户做一个简单的report。用户提供了一个pdf文件作为模板,需要从特定的文件中读取数据然后填写到模板中。 很简单的一个程序使用iTextPdf就能实现。但是就在我给客户email一个样板的时候,发现在我的机子上,填写的内容是正常的显示,但是通过email传输之后内容全都不见了。Debug没有出现任何错误。 code: public void fillDateInPDfFile(ReportData reportData, String o

sinat_60420888的博客 1494

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Java开发环境问题
下一篇: C3P0使用中的问题
walker-undef
博客等级 码龄12年 93粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值