java - 如何使用 iText 删除 PDF 中信息 map 的某些值

标签 java itext

使用iText可以轻松获取PDF文件的标题、作者等信息:

Map<String, String> info = pdfReader.getInfo();

但是如何从该映射中删除和修改某些键/值?

例如,info.remove("Title") 并不能解决问题。

最佳答案

我假设您正在使用 setMoreInfo() PdfStamper 上的方法实例。此方法循环遍历 Map 的条目您提供,并根据 Map 中存储的 key 更改现有元数据。如果您删除 key ,则不会发生任何事情(这就是您所注意到的)。

删除条目的技巧是将该条目设置为 null :

PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Map<String, String> info = reader.getInfo();
info.put("Title", null);
stamper.setMoreInfo(info);
stamper.close();
reader.close();

您甚至不需要从 PdfReader 检索原始元数据;你可以创建一个 new HashMap<String, String>()并添加 null条目 "Title" ;这将具有相同的效果:

PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Map<String, String> info = new HashMap<String, String>();
info.put("Title", null);
stamper.setMoreInfo(info);
stamper.close();
reader.close();

正如您将看到的,使用空 Map首先不会删除任何元数据条目(当然,除非您添加值为 null 的条目)。

关于java - 如何使用 iText 删除 PDF 中信息 map 的某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610132/

相关文章:

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 如何将简单的 Curl 调用转换为 Java HttpURLConnection

c# - 每次迭代或循环浏览文档列表时如何创建新的 PDF 文件?

c# - 是否可以在 C# 中使用 iTextSharp 修改 PDF 中的专色名称?

pdf - PDF 文件中较低索引字母(如 : j, p、q、g 等)的大小问题

java - Android - 有效的性能和内存管理

java - 比较Java中的两个字符串

c# - 使用 iTextSharp 更改 PDF 的字体

c# - 使用 C# 代码使用 iTextSharp 将页面书签添加到现有 PDF

java - 在控制台上打印数组引用变量