新闻中心
J*a如何在PDF添加注释
J*a中给PDF添加注释主流用iText 7或Apache PDFBox:iText需手动构造PdfAnnotation并设置PDF坐标系下的矩形区域,PDFBox则通过PDAnnotation子类直接添加,二者均需注意坐标系转换、中文字体嵌入及权限处理。

J*a中给PDF添加注释,主流方式是使用 iText(推荐 7.x 版本)或 Apache PDFBox。两者都支持添加文本注释(如“高亮”“下划线”“弹出式备注”)、图章、线条批注等,但 API 设计和注释类型支持略有差异。
用 iText 7 添加文本注释(如高亮、下划线)
iText 7 的注释功能封装在 pdfa 和 layout 模块之外的 kernel 层,需手动构造 PdfAnnotation 并关联到指定坐标位置(基于 PDF 坐标系,原点在左下角)。
- 先用
PdfDocument打开目标 PDF,获取某页的PdfPage - 创建注释对象,例如
PdfTextAnnotation(带弹出框的文本备注)或PdfMarkupAnnotation(高亮/下划线/删除线) - 设置矩形区域(
setRectangle()),必须落在页面内容区内(单位:用户单位,默认1/72英寸) - 调用
page.addAnnotation()添加;若需显示弹出框,再 add 一个PdfPopupAnnotation并关联
示例关键代码片段:
PdfTextAnnotation annot = new PdfTextAnnotation(new Rectangle(50, 750, 200, 50))
.setTitle(new PdfString("作者"))
.setContents(new PdfString("此处需补充实验数据"))
.setOpen(true); // 默认展开弹出框
page.addAnnotation(annot);用 PDFBox 添加简单批注(如文字备注、高亮)
PDFBox 更轻量,对基础注释支持友好。其 PDAnnotation 子类(如 PDAnnotationText、PDAnnotationHighlight)可直接添加到页面的 annotations 列表。
- 加载 PDF:用
PDDocument.load() - 获取页面:
document.getPage(0) - 创建高亮注释:
PDAnnotationHighlight highlight = new PDAnnotationHighlight(); - 设置高亮区域(
COSArray形式的四边形坐标,按顺时针顺序:x1,y1,x2,y2,...x4,y4) - 设置颜色、不透明度,并添加进页面注释列表:
page.getAnnotations().add(highlight)
注意:PDFBox 的高亮坐标是四点定义的多边形,不是矩形,更适合真实高亮文本轮廓;若只需矩形标注,可用 PDAnnotationSquare 或 PDAnnotationCircle。
Writer
企业级AI内容创作工具
220
查看详情
添加注释前的关键准备事项
无论用哪个库
,以下几点容易被忽略但直接影响效果:
-
坐标系理解:PDF 页面坐标原点在左下角,y 向上增长;而屏幕或打印预览常以左上为原点——需做 y 转换:
y_pdf = pageHeight - y_screen -
字体与编码:中文注释内容需确保嵌入支持中文的字体(iText 中用
PdfFontFactory.createFont()加载 NotoSansCJK;PDFBox 中设置PDAnnotationText.setFont()并 embed 字体流) -
保存与权限:部分 PDF 启用编辑限制(如禁止注释),需先检查并移除密码或权限(
PDDocument.setAllSecurityToBeRemoved(true)或 iText 的setEncryption()解密)
选型建议:iText 还是 PDFBox?
如果项目已用 iText 生成 PDF,继续用它加注释更连贯,且对复杂注释(如带动作的按钮、3D 标注)支持更好;若仅需轻量批注、避免商业授权(iText 7 AGPL 要求开源或购买许可),PDFBox 是更自由的选择。
基本上就这些。实际添加时,建议先用 PDF 阅读器测量目标位置的坐标,再写代码微调——注释“看不见”往往只是坐标偏了。
以上就是J*a如何在PDF添加注释的详细内容,更多请关注其它相关文章!
# 时长
# seo制作网页
# 大美推广视频素材网站
# 商丘专业的网站建设价格
# 德江网站关键词排名公司
# 投资推广署网站导航
# 虚拟网站建设公司好吗
# 什么叫短视频营销推广呢
# 太谷抖音seo运营
# 丹灶网站推广教程
# 山东教师网站建设
# 弹出式
# 加载
# java
# 如何在
# 先用
# 明度
# 好了
# 弹出
# 下划线
# 子类
# cos
# pdf
# 编码
# apache
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
Django模型中自动计算可用余额的实现方法
C++指针和引用有什么区别_C++内存管理核心概念深度解析
菜鸟取件码是什么怎么查 最全查询渠道汇总
探索高级语言到原生C/C++的转译:挑战与内存管理策略
顺丰快件物流信息 官方网站查询入口
拼多多赚钱渠道_拼多多收益来源
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
Win11怎么关闭快速启动_Win11彻底关机设置教程
qq游戏跨平台入口_qq游戏多设备同步登录
QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
SteamMachine定价或为699美元 大家想入手吗?
必由学官方平台入口 必由学在线课堂登录地址
在命令行怎么运行html项目_命令行运行html项目方法【教程】
解决J*aScript中重复选择项的确认对话框显示问题
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
淘宝支付提示失败如何解决 淘宝支付流程优化方法
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
Pandas DataFrame 多条件优先级排序与排名
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
火锅吃太多会怎样 火锅吃太多会上火吗
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
押井守高度称赞《辐射4》:玩了八年都停不下来!
ArrayList与LinkedList核心操作的Big-O复杂度分析
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
德邦快递查询平台 德邦快递物流信息查询入口
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
Python中高效访问嵌套字典与列表中的键值对
Django通过AJAX异步上传图片并保存至模型的完整指南
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
Go语言中JSON数据解析与字段访问教程


2025-12-05
浏览次数:次
返回列表