获取 itext 7 pdf 文档的自定义元数据
Get custom metadata for itext 7 pdf document
我使用下面给出的 link 在 itext 5 中获取元数据,使用:Get and set metadata for itext pdf document
目前,我也可以使用以下代码片段在 itext7 中获取元数据:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
info.getAuthor();
info.getCreator();
info.getProducer();
我不知道如何使用它来获取自定义属性。
我可以使用以下方法设置自定义元数据:
pdfDoc.getDocumentInfo().setMoreInfo("Test", "test");
如何在不对键名进行硬编码的情况下以编程方式获取此值?
另外,有没有办法在不实际写入的情况下获取这些元数据值(包括自定义元数据):
getAuthor, getCreator, etc?
不用担心,得到答案。
之前没有意识到:
PdfDictionary map = info.getPdfObject();
returns 地图类型对象。解析地图以获取所有键值对,包括自定义属性。
以下是完整的代码片段:
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfObject;
import com.itextpdf.kernel.pdf.PdfReader;
import java.io.File;
import java.io.IOException;
import java.util.Map.Entry;
public class GetInfo {
public static final String SRC = "hello.pdf";
public static void main(String[] args) throws IOException {
File file = new File(SRC);
file.getParentFile().mkdirs();
new GetInfo().manipulatePdf(SRC);
}
public void manipulatePdf(String src) throws IOException {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
PdfDictionary map = info.getPdfObject();
for(Entry<PdfName, PdfObject> entry : map.entrySet()){
System.out.println(entry.getKey().getValue() + " - " + entry.getValue() );
}
pdfDoc.close();
}
}
在 iText 7.0.8+ 中,您可以通过这种方式获取 pdf 元数据映射。
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
//get metadata map
PdfDictionary catalog = pdfDoc.getTrailer();
PdfDictionary map = catalog.getAsDictionary(PdfName.Info);
for (Map.Entry<PdfName, PdfObject> entry : map.entrySet()) {
System.out.println(entry.getKey().getValue() + " - " + entry.getValue());
}
pdfDoc.close();
您可以使用以下方式设置自定义元数据:
map.put(new PdfName("test"), new PdfString("test"));
我使用下面给出的 link 在 itext 5 中获取元数据,使用:Get and set metadata for itext pdf document
目前,我也可以使用以下代码片段在 itext7 中获取元数据:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
info.getAuthor();
info.getCreator();
info.getProducer();
我不知道如何使用它来获取自定义属性。 我可以使用以下方法设置自定义元数据:
pdfDoc.getDocumentInfo().setMoreInfo("Test", "test");
如何在不对键名进行硬编码的情况下以编程方式获取此值? 另外,有没有办法在不实际写入的情况下获取这些元数据值(包括自定义元数据):
getAuthor, getCreator, etc?
不用担心,得到答案。 之前没有意识到:
PdfDictionary map = info.getPdfObject();
returns 地图类型对象。解析地图以获取所有键值对,包括自定义属性。 以下是完整的代码片段:
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfObject;
import com.itextpdf.kernel.pdf.PdfReader;
import java.io.File;
import java.io.IOException;
import java.util.Map.Entry;
public class GetInfo {
public static final String SRC = "hello.pdf";
public static void main(String[] args) throws IOException {
File file = new File(SRC);
file.getParentFile().mkdirs();
new GetInfo().manipulatePdf(SRC);
}
public void manipulatePdf(String src) throws IOException {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
PdfDictionary map = info.getPdfObject();
for(Entry<PdfName, PdfObject> entry : map.entrySet()){
System.out.println(entry.getKey().getValue() + " - " + entry.getValue() );
}
pdfDoc.close();
}
}
在 iText 7.0.8+ 中,您可以通过这种方式获取 pdf 元数据映射。
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
//get metadata map
PdfDictionary catalog = pdfDoc.getTrailer();
PdfDictionary map = catalog.getAsDictionary(PdfName.Info);
for (Map.Entry<PdfName, PdfObject> entry : map.entrySet()) {
System.out.println(entry.getKey().getValue() + " - " + entry.getValue());
}
pdfDoc.close();
您可以使用以下方式设置自定义元数据:
map.put(new PdfName("test"), new PdfString("test"));