2014-09-06 12 views
5

Ho un oggetto iText Document e voglio scrivere alcuni metadati o leggerlo da esso.
Come posso farlo?
Ottenere e impostare i metadati per il documento pdf itext

immaginare che il documento è beeing passato a un metodo come:

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

risposta

11

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.

+0

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

+0

a proposito, non sono io che decido quale versione dovremmo usare ... – Soosh

+0

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. –

Problemi correlati