获取和设置itext pdf文档的元数据

获取和设置itext pdf文档的元数据,pdf,metadata,itext,Pdf,Metadata,Itext,我有一个iTextDocument对象,我想将一些元数据写入其中或从中读取。 我该怎么做? 假设文档被传递到如下方法: public void prePreccess(Object document) { Document pdfDocument = ((Document) document); //What to do here with pdfDocument? } 是否要填充PDF的信息字典?这在示例中进行了解释: 是否要设置XMP元数据?在示例中对此进行了解释:

我有一个iText
Document
对象,我想将一些元数据写入其中或从中读取。
我该怎么做?

假设文档被传递到如下方法:

public void prePreccess(Object document) {
    Document pdfDocument =   ((Document) document);
    //What to do here with pdfDocument?
}

是否要填充PDF的信息字典?这在示例中进行了解释:

是否要设置XMP元数据?在示例中对此进行了解释:

请注意,此方法已被弃用:我们最近已替换了XMP功能,但我们仍需要使用新代码编写一些示例

也许您希望设置填充信息字典,同时创建XMP元数据:

// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
document.addTitle("Hello World example");
document.addSubject("This example shows how to add metadata & XMP");
document.addKeywords("Metadata, iText, step 3");
document.addCreator("My program using 'iText'");
document.addAuthor("Bruno Lowagie");
writer.createXmpMetadata();
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
如果我是你,我会使用这个选项,因为它是最完整的解决方案

您不应该从
文档
对象读取元数据

您可以从现有PDF中读取XMP流,如下所示:

public void readXmpMetadata(String src, String dest) throws IOException {
    PdfReader reader = new PdfReader(src);
    FileOutputStream fos = new FileOutputStream(dest);
    byte[] b = reader.getMetadata();
    fos.write(b, 0, b.length);
    fos.flush();
    fos.close();
    reader.close();
}
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Map<String, String> info = reader.getInfo();
您可以这样读取信息字典中的条目:

public void readXmpMetadata(String src, String dest) throws IOException {
    PdfReader reader = new PdfReader(src);
    FileOutputStream fos = new FileOutputStream(dest);
    byte[] b = reader.getMetadata();
    fos.write(b, 0, b.length);
    fos.flush();
    fos.close();
    reader.close();
}
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Map<String, String> info = reader.getInfo();
PdfReader阅读器=新的PdfReader(src);
PdfStamper stamper=新PdfStamper(读取器,新文件输出流(dest));
Map info=reader.getInfo();

info
对象将包含一系列键和值,这些键和值作为元数据存储在PDF中。

谢谢您的详细回答。但问题是,在我的方法中,我没有访问输出流的权限。还有,是否要将某种属性传递给文档对象并在以后检索它?否,
document
将元数据转发给其侦听器,并且您无法访问这些侦听器处理的元数据。至于版本,请让我们知道谁对这个决定负责。我可以直接从输入流中读取信息吗?我不知道文件的来源。@esu是的,您可以从
InputStream
创建
PdfReader
实例。请不要评论一个差不多4年前的问题。