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

Java中给PDF添加注释,主流方式是使用 iText(推荐 7.x 版本)或 Apache PDFBox。两者都支持添加文本注释(如“高亮”“下划线”“弹出式备注”)、图章、线条批注等,但 API 设计和注释类型支持略有差异。
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 更轻量,对基础注释支持友好。其 PDAnnotation 子类(如 PDAnnotationText、PDAnnotationHighlight)可直接添加到页面的 annotations 列表。
立即学习“Java免费学习笔记(深入)”;
PDDocument.load()
document.getPage(0)
PDAnnotationHighlight highlight = new PDAnnotationHighlight();
COSArray 形式的四边形坐标,按顺时针顺序:x1,y1,x2,y2,...x4,y4)page.getAnnotations().add(highlight)
注意:PDFBox 的高亮坐标是四点定义的多边形,不是矩形,更适合真实高亮文本轮廓;若只需矩形标注,可用 PDAnnotationSquare 或 PDAnnotationCircle。
无论用哪个库,以下几点容易被忽略但直接影响效果:
y_pdf = pageHeight - y_screen
PdfFontFactory.createFont() 加载 NotoSansCJK;PDFBox 中设置 PDAnnotationText.setFont() 并 embed 字体流)PDDocument.setAllSecurityToBeRemoved(true) 或 iText 的 setEncryption() 解密)如果项目已用 iText 生成 PDF,继续用它加注释更连贯,且对复杂注释(如带动作的按钮、3D 标注)支持更好;若仅需轻量批注、避免商业授权(iText 7 AGPL 要求开源或购买许可),PDFBox 是更自由的选择。
基本上就这些。实际添加时,建议先用 PDF 阅读器测量目标位置的坐标,再写代码微调——注释“看不见”往往只是坐标偏了。
以上就是Java如何在PDF添加注释的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号