Vuoi popolare il dizionario informazioni di un file PDF? Questo è spiegato nell'esempio 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();
Vuoi impostare i metadati XMP? Questo è spiegato nell'esempio 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();
Nota che questo metodo è deprecato: abbiamo sostituito la funzionalità XMP di recente, ma dobbiamo ancora scrivere alcuni esempi che utilizzano il nuovo codice.
Forse si vuole impostare popolare il dizionario informazioni e creano i metadati XMP, allo stesso tempo:
// 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();
Se fossi in te, mi piacerebbe utilizzare questa opzione perché è la soluzione più completa.
Non leggere i metadati da un oggetto Document
.
È possibile leggere il flusso XMP da un PDF esistente in questo modo:
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();
}
è possibile leggere le voci del dizionario informazioni in questo modo:
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Map<String, String> info = reader.getInfo();
L'oggetto info
conterrà una serie di chiavi e valori che sono memorizzati come metadati all'interno del PDF.
Grazie per la risposta dettagliata. Ma il problema è che non ho accesso al flusso di output nel mio metodo. e c'è comunque un modo per passare un qualche tipo di proprietà all'oggetto del documento e recuperarlo in seguito? – Soosh
a proposito, non sono io che decido quale versione dovremmo usare ... – Soosh
No, 'Document' inoltra i metadati ai suoi ascoltatori e non hai accesso ai metadati che vengono elaborati da questi listener. Per quanto riguarda la versione, fateci sapere come è responsabile per quella decisione. –