使用iText 2.1.7复制带批注PDF时批注丢失的解决办法
解决iText 2.1.7复制PDF页面丢失批注的问题
问题根源
你当前的代码是将PDF页面转换为Image对象后写入新文档,这种方式只会保留页面的像素内容,批注、表单字段这类交互式/结构化元素会被完全丢弃——因为图像无法承载这些PDF原生元素。
解决方案
改用PdfCopy类直接复制页面(而非转成图像),它会完整保留原页面的所有内容,包括批注。以下是修改后的代码:
for (Integer page : pages) { String outFile = out + "_" + page; try { // 初始化原PDF读取器和复制工具 PdfReader reader = new PdfReader(/* 替换为你的原PDF路径或输入流 */); Document document = new Document(); PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile)); document.open(); // 直接复制指定页面,完整保留所有元素(含批注) copy.addPage(copy.getImportedPage(reader, page)); // 关闭资源 document.close(); reader.close(); file.add(FileUtilities.getFile(outFile)); } catch (Exception e) { e.printStackTrace(); } }
补充说明
PdfCopy会自动继承原页面的旋转属性,无需额外处理图像旋转逻辑。- 若需调整页眉等页面内容,不要通过图像裁剪实现,建议先用
PdfStamper修改原页面内容,再用PdfCopy复制,避免丢失批注。
内容的提问来源于stack exchange,提问作者Subharoop Ghosh
相关产品推荐
相关产品推荐

