diff --git a/src/core/document.js b/src/core/document.js index 3e0a20299..b525bace9 100644 --- a/src/core/document.js +++ b/src/core/document.js @@ -401,8 +401,7 @@ class PDFDocument { if (this.acroForm) { this.xfa = this.acroForm.get('XFA'); const fields = this.acroForm.get('Fields'); - if ((!fields || !Array.isArray(fields) || fields.length === 0) && - !this.xfa) { + if ((!Array.isArray(fields) || fields.length === 0) && !this.xfa) { this.acroForm = null; // No fields and no XFA, so it's not a form. } } @@ -413,6 +412,19 @@ class PDFDocument { info('Cannot fetch AcroForm entry; assuming no AcroForms are present'); this.acroForm = null; } + + // Check if a Collection dictionary is present in the document. + try { + const collection = this.catalog.catDict.get('Collection'); + if (isDict(collection) && collection.getKeys().length > 0) { + this.collection = collection; + } + } catch (ex) { + if (ex instanceof MissingDataException) { + throw ex; + } + info('Cannot fetch Collection dictionary.'); + } } get linearization() { @@ -534,6 +546,7 @@ class PDFDocument { IsLinearized: !!this.linearization, IsAcroFormPresent: !!this.acroForm, IsXFAPresent: !!this.xfa, + IsCollectionPresent: !!this.collection, }; let infoDict; diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 851137089..073634517 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -846,6 +846,7 @@ describe('api', function() { expect(info['IsLinearized']).toEqual(false); expect(info['IsAcroFormPresent']).toEqual(false); expect(info['IsXFAPresent']).toEqual(false); + expect(info['IsCollectionPresent']).toEqual(false); expect(metadata instanceof Metadata).toEqual(true); expect(metadata.get('dc:title')).toEqual('Basic API Test'); @@ -874,6 +875,7 @@ describe('api', function() { expect(info['IsLinearized']).toEqual(false); expect(info['IsAcroFormPresent']).toEqual(false); expect(info['IsXFAPresent']).toEqual(false); + expect(info['IsCollectionPresent']).toEqual(false); expect(metadata).toEqual(null); expect(contentDispositionFilename).toEqual(null);