galkahana / HummusJS

Node.js module for high performance creation, modification and parsing of PDF files and streams
http://www.pdfhummus.com
Other
1.14k stars 169 forks source link

Pdf Metadata is not saving #427

Open john-attrium-204 opened 4 years ago

john-attrium-204 commented 4 years ago

Thanks for writing this awesome library.

Hummus allows us to write JOSN metadata in infoDictionary with addAdditionalInfoEntry() method. It is running successfully. But I want to add this data in XML format to the file in XMP metadata.

I am trying to save metadata to a file using the following code. It runs without any error. But when checking the metadata using some viewer, it is not showing anything.

const pdfWriter = hummus.createWriterToModify(filename); const data = new Buffer(metadata, 'utf-8'); const parser = pdfWriter.getModifiedFileParser(); const objectsContext = pdfWriter.getObjectsContext(); const aDictionary = parser.queryDictionaryObject(parser.getTrailer(),'Root').toPDFDictionary().toJSObject(); if(aDictionary["Metadata"]) { const objectId = aDictionary["Metadata"].toPDFIndirectObjectReference().getObjectID(); objectsContext.startModifiedIndirectObject(objectId);
} else { const objectId = objectsContext.startNewIndirectObject(); pdfWriter.requireCatalogUpdate(); pdfWriter.getEvents().on('OnCatalogWrite',function(dictionaryContext){ dictionaryContext.catalogDictionaryContext.writeKey('Metadata'); dictionaryContext.catalogDictionaryContext.writeObjectReferenceValue(objectId); }); }

const pdfStream = objectsContext.startUnfilteredPDFStream();
pdfStream.getWriteStream().write([...data]);
objectsContext.endPDFStream(pdfStream);
objectsContext.endIndirectObject();
pdfWriter.end(); 

Appreciate in advance.