Q:
How can I access file attachment data using the full API?
A:
Here is some sample code which show how to do this:
const doc = await instance.docViewer.getDocument().getPDFDoc();
const files = await PDFNet.NameTree.find(doc, "EmbeddedFiles");
if (await files.isValid()) {
// Traverse the list of embedded files.
const i = await files.getIteratorBegin();
for (var counter = 0; await i.hasNext(); await i.next(), ++counter) {
const entry_name = await i.key().then(key => key.getAsPDFText());
console.log("Part: " + entry_name);
const file_spec = await PDFNet.FileSpec.createFromObj(await i.value());
const stm = await file_spec.getFileData();
console.log(stm);
const filterReader = await PDFNet.FilterReader.create(stm);
const dataArray = [];
const chunkLength = 1024;
let retrievedLength = chunkLength;
while (chunkLength === retrievedLength) {
const bufferSubArray = await filterReader.read(chunkLength);
retrievedLength = bufferSubArray.length;
dataArray.push(bufferSubArray);
}
const bufferFinal = new Uint8Array(dataArray.length * chunkLength + retrievedLength);
for (let i = 0; i < dataArray.length; i++) {
const offset = i * chunkLength;
const currentArr = dataArray[i];
bufferFinal.set(currentArr, offset);
}
// example function from our sample which downloads the attachment
// you could also turn bufferFinal into a blob and open in WebViewer
window.saveBufferAsPDFDoc(bufferFinal, 'attachment.pdf');
}
}