你想填充一個PDF的信息詞典嗎?這在MetadataPdf示例中有解釋:
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.addTitle("Hello World example");
document.addAuthor("Bruno Lowagie");
document.addSubject("This example shows how to add metadata");
document.addKeywords("Metadata, iText, PDF");
document.addCreator("My program using iText");
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
是否要設置XMP元數據?這是在MetadataXmp例子解釋:
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT1));
ByteArrayOutputStream os = new ByteArrayOutputStream();
XmpWriter xmp = new XmpWriter(os);
XmpSchema dc = new com.itextpdf.text.xml.xmp.DublinCoreSchema();
XmpArray subject = new XmpArray(XmpArray.UNORDERED);
subject.add("Hello World");
subject.add("XMP & Metadata");
subject.add("Metadata");
dc.setProperty(DublinCoreSchema.SUBJECT, subject);
xmp.addRdfDescription(dc);
PdfSchema pdf = new PdfSchema();
pdf.setProperty(PdfSchema.KEYWORDS, "Hello World, XMP, Metadata");
pdf.setProperty(PdfSchema.VERSION, "1.4");
xmp.addRdfDescription(pdf);
xmp.close();
writer.setXmpMetadata(os.toByteArray());
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
注意,此方法已被棄用:我們最近更換了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();
如果我是你,我想是因爲它是最完整的解決方案使用此選項。
不應從Document
對象讀取元數據。
您可以從現有的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();
的info
對象將包含一系列在PDF中存儲爲元數據的鍵和值。
謝謝你的詳細解答。但問題是我沒有訪問我的方法中的輸出流。無論如何要將某種屬性傳遞給文檔對象並在以後檢索它? – Soosh 2014-09-06 10:23:11
順便說一下,決定我們應該使用哪個版本並不是我的... – Soosh 2014-09-06 10:45:22
不,'Document'將元數據轉發給它的監聽器,並且您無權訪問這些監聽器處理的元數據。至於版本,請告訴我們如何對此決定負責。 – 2014-09-06 11:15:10