使用Java删除PDF元数据

时间:2014-01-22 22:32:18

标签: pdf itext pdfbox

如何使用Java删除PDF上的元数据?

IText会做什么或任何其他框架都有能力做到这一点? 我没有找到任何使用IText删除元数据的示例或类。如果有人在此之前做过这个或有任何想法吗?

请分享您的观点。

提前致谢。

3 个答案:

答案 0 :(得分:5)

首先,您需要区分,因为PDF中有两种类型的元数据:

  1. XMP元数据
  2. DID(文件信息词典,旧方式)
  3. 您首先删除的内容如下:

    PdfReader reader = stamper.getReader();
    reader.getCatalog().remove(PdfName.METADATA);
    reader.removeUnusedObjects();
    

    你删除的第二个像SANN3一样提到:

    HashMap<String, String> info = super.reader.getInfo();
    info.put("Title", null);
    info.put("Author", null);
    info.put("Subject", null);
    info.put("Keywords", null);
    info.put("Creator", null);
    info.put("Producer", null;
    info.put("CreationDate", null);
    info.put("ModDate", null);
    info.put("Trapped", null);
    stamper.setMoreInfo(info);
    

    如果您使用文本编辑器搜索PDF,则无法找到/ INFO字典或XMP元数据...

答案 1 :(得分:3)

试试此代码

PdfReader readInputPDF = new PdfReader("sample.pdf");
HashMap<String, String> hMap = readInputPDF.getInfo();
PdfStamper stamper = new PdfStamper(readInputPDF, new FileOutputStream("sample1.pdf"));
hMap.put("Author", null);
stamper.setMoreInfo(hMap);
stamper.close();

将元数据属性添加到要从PDF中删除的地图。

答案 2 :(得分:1)

为使用 PdfBox 2.x 的用户更新

File pdf = new File("student-scorecard.pdf";
PDDocument document = PDDocument.load(pdf);
PDDocumentInformation information = document.getDocumentInformation();
if(information != null) {
  document.setDocumentInformation(new PDDocumentInformation());
  document.save("student-scorecard-anonymized.pdf");
}
document.getDocumentCatalog().setMetadata(null); // Tilman Hausherr 
document.close();