From 4c9b65f0e13fd290c326b38cb97436fa50b930f5 Mon Sep 17 00:00:00 2001 From: Mike Corbin Date: Mon, 25 May 2015 03:45:20 +0100 Subject: [PATCH] Extract correct PDF format version from the catalog The 'Version' field of the most recent document catalog, if present, is intended to supersede the value in the file prologue. This is significant for incrementally-built PDF documents and generators that emit a low version in the prologue and later apply a format version based on PDF features used, such as Apple's CoreGraphics/Quartz PDF backend. Fixes the internal version variable, as well as the PDFFormatVersion reported by the API and consumed by viewers. --- src/core/core.js | 10 ++++++++-- test/pdfs/basicapi.pdf | Bin 105779 -> 105779 bytes test/unit/api_spec.js | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/core.js b/src/core/core.js index c81f5b7d3..2eb8fd57b 100644 --- a/src/core/core.js +++ b/src/core/core.js @@ -343,6 +343,10 @@ var PDFDocument = (function PDFDocumentClosure() { PDFDocument.prototype = { parse: function PDFDocument_parse(recoveryMode) { this.setup(recoveryMode); + var version = this.catalog.catDict.get('Version'); + if (isName(version)) { + this.pdfFormatVersion = version.name; + } try { // checking if AcroForm is present this.acroForm = this.catalog.catDict.get('AcroForm'); @@ -444,8 +448,10 @@ var PDFDocument = (function PDFDocumentClosure() { } version += String.fromCharCode(ch); } - // removing "%PDF-"-prefix - this.pdfFormatVersion = version.substring(5); + if (!this.pdfFormatVersion) { + // removing "%PDF-"-prefix + this.pdfFormatVersion = version.substring(5); + } return; } // May not be a PDF file, continue anyway. diff --git a/test/pdfs/basicapi.pdf b/test/pdfs/basicapi.pdf index 31ffcfe9feb708602cb42c25534eaa6ef12b2c25..2f16483d5624f8ac385ddc22892dbff480e6aee1 100644 GIT binary patch delta 22 dcmdnIi*55RHV)MQ7dKr)J+nrRtsIQna{*U52EPCR delta 22 dcmdnIi*55RHV)MQ7dKr)J@ZD6tsIQna{*UD2EYIS diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 75905f76d..2d5d17bf7 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -156,6 +156,7 @@ describe('api', function() { var promise = doc.getMetadata(); waitsForPromiseResolved(promise, function(metadata) { expect(metadata.info['Title']).toEqual('Basic API Test'); + expect(metadata.info['PDFFormatVersion']).toEqual('1.7'); expect(metadata.metadata.get('dc:title')).toEqual('Basic API Test'); }); });