Commit cfd5147d922ee4e29e10f116dfca79325398a6db

Authored by Jay Berkenbilt
1 parent 8082af09

Add QPDF::getVersionAsPDFVersion

Showing 79 changed files with 138 additions and 21 deletions
ChangeLog
@@ -3,6 +3,9 @@ @@ -3,6 +3,9 @@
3 * Add new class PDFVersion for more convenient comparison of PDF 3 * Add new class PDFVersion for more convenient comparison of PDF
4 version numbers from the %!PDF header. 4 version numbers from the %!PDF header.
5 5
  6 + * Add QPDF::getVersionAsPDFVersion() to return the PDF version and
  7 + extension together as a PDFVersion object instead of a string.
  8 +
6 2022-02-06 Jay Berkenbilt <ejb@ql.org> 9 2022-02-06 Jay Berkenbilt <ejb@ql.org>
7 10
8 * Pl_Buffer and QPDFWriter: add getBufferSharedPointer(), which 11 * Pl_Buffer and QPDFWriter: add getBufferSharedPointer(), which
include/qpdf/PDFVersion.hh
@@ -65,9 +65,9 @@ class PDFVersion @@ -65,9 +65,9 @@ class PDFVersion
65 int getExtensionLevel() const; 65 int getExtensionLevel() const;
66 66
67 private: 67 private:
68 - int major;  
69 - int minor;  
70 - int extension; 68 + int major_version;
  69 + int minor_version;
  70 + int extension_level;
71 }; 71 };
72 72
73 #endif // PDFVERSION_HH 73 #endif // PDFVERSION_HH
include/qpdf/QPDF.hh
@@ -44,6 +44,7 @@ @@ -44,6 +44,7 @@
44 #include <qpdf/QPDFStreamFilter.hh> 44 #include <qpdf/QPDFStreamFilter.hh>
45 #include <qpdf/Buffer.hh> 45 #include <qpdf/Buffer.hh>
46 #include <qpdf/InputSource.hh> 46 #include <qpdf/InputSource.hh>
  47 +#include <qpdf/PDFVersion.hh>
47 48
48 class QPDF_Stream; 49 class QPDF_Stream;
49 class BitStream; 50 class BitStream;
@@ -260,6 +261,10 @@ class QPDF @@ -260,6 +261,10 @@ class QPDF
260 261
261 QPDF_DLL 262 QPDF_DLL
262 std::string getFilename() const; 263 std::string getFilename() const;
  264 + // Return PDF Version and extension level together as a PDFVersion object
  265 + QPDF_DLL
  266 + PDFVersion getVersionAsPDFVersion();
  267 + // Return just the PDF version from the file
263 QPDF_DLL 268 QPDF_DLL
264 std::string getPDFVersion() const; 269 std::string getPDFVersion() const;
265 QPDF_DLL 270 QPDF_DLL
libqpdf/PDFVersion.cc
@@ -7,30 +7,30 @@ PDFVersion::PDFVersion() : @@ -7,30 +7,30 @@ PDFVersion::PDFVersion() :
7 { 7 {
8 } 8 }
9 9
10 -PDFVersion::PDFVersion(int major, int minor, int extension) :  
11 - major(major),  
12 - minor(minor),  
13 - extension(extension) 10 +PDFVersion::PDFVersion(int major_version, int minor_version, int extension_level) :
  11 + major_version(major_version),
  12 + minor_version(minor_version),
  13 + extension_level(extension_level)
14 { 14 {
15 } 15 }
16 16
17 bool 17 bool
18 PDFVersion::operator<(PDFVersion const& rhs) const 18 PDFVersion::operator<(PDFVersion const& rhs) const
19 { 19 {
20 - return ((this->major < rhs.major) ? true :  
21 - (this->major > rhs.major) ? false :  
22 - (this->minor < rhs.minor) ? true :  
23 - (this->minor > rhs.minor) ? false :  
24 - (this->extension < rhs.minor) ? true : 20 + return ((this->major_version < rhs.major_version) ? true :
  21 + (this->major_version > rhs.major_version) ? false :
  22 + (this->minor_version < rhs.minor_version) ? true :
  23 + (this->minor_version > rhs.minor_version) ? false :
  24 + (this->extension_level < rhs.extension_level) ? true :
25 false); 25 false);
26 } 26 }
27 27
28 bool 28 bool
29 PDFVersion::operator==(PDFVersion const& rhs) const 29 PDFVersion::operator==(PDFVersion const& rhs) const
30 { 30 {
31 - return ((this->major == rhs.major) &&  
32 - (this->minor == rhs.minor) &&  
33 - (this->extension == rhs.extension)); 31 + return ((this->major_version == rhs.major_version) &&
  32 + (this->minor_version == rhs.minor_version) &&
  33 + (this->extension_level == rhs.extension_level));
34 } 34 }
35 35
36 void 36 void
@@ -45,25 +45,25 @@ PDFVersion::updateIfGreater(PDFVersion const&amp; other) @@ -45,25 +45,25 @@ PDFVersion::updateIfGreater(PDFVersion const&amp; other)
45 void 45 void
46 PDFVersion::getVersion(std::string& version, int& extension_level) const 46 PDFVersion::getVersion(std::string& version, int& extension_level) const
47 { 47 {
48 - extension_level = this->extension;  
49 - version = QUtil::int_to_string(this->major) + "." +  
50 - QUtil::int_to_string(this->minor); 48 + extension_level = this->extension_level;
  49 + version = QUtil::int_to_string(this->major_version) + "." +
  50 + QUtil::int_to_string(this->minor_version);
51 } 51 }
52 52
53 int 53 int
54 PDFVersion::getMajor() const 54 PDFVersion::getMajor() const
55 { 55 {
56 - return this->major; 56 + return this->major_version;
57 } 57 }
58 58
59 int 59 int
60 PDFVersion::getMinor() const 60 PDFVersion::getMinor() const
61 { 61 {
62 - return this->minor; 62 + return this->minor_version;
63 } 63 }
64 64
65 int 65 int
66 PDFVersion::getExtensionLevel() const 66 PDFVersion::getExtensionLevel() const
67 { 67 {
68 - return this->extension; 68 + return this->extension_level;
69 } 69 }
libqpdf/QPDF.cc
@@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@
11 #include <stdlib.h> 11 #include <stdlib.h>
12 #include <string.h> 12 #include <string.h>
13 #include <memory.h> 13 #include <memory.h>
  14 +#include <regex>
14 15
15 #include <qpdf/QTC.hh> 16 #include <qpdf/QTC.hh>
16 #include <qpdf/QUtil.hh> 17 #include <qpdf/QUtil.hh>
@@ -2742,6 +2743,24 @@ QPDF::getFilename() const @@ -2742,6 +2743,24 @@ QPDF::getFilename() const
2742 return this->m->file->getName(); 2743 return this->m->file->getName();
2743 } 2744 }
2744 2745
  2746 +PDFVersion
  2747 +QPDF::getVersionAsPDFVersion()
  2748 +{
  2749 + int major = 1;
  2750 + int minor = 3;
  2751 + int extension_level = getExtensionLevel();
  2752 +
  2753 + std::regex v("^[[:space:]]*([0-9]+)\\.([0-9]+)");
  2754 + std::smatch m;
  2755 + if (std::regex_search(this->m->pdf_version, m, v))
  2756 + {
  2757 + major = QUtil::string_to_int(m[1].str().c_str());
  2758 + minor = QUtil::string_to_int(m[2].str().c_str());
  2759 + }
  2760 +
  2761 + return PDFVersion(major, minor, extension_level);
  2762 +}
  2763 +
2745 std::string 2764 std::string
2746 QPDF::getPDFVersion() const 2765 QPDF::getPDFVersion() const
2747 { 2766 {
libtests/pdf_version.cc
@@ -34,6 +34,18 @@ int main() @@ -34,6 +34,18 @@ int main()
34 v2.getVersion(version, extension_level); 34 v2.getVersion(version, extension_level);
35 assert(version == "1.7"); 35 assert(version == "1.7");
36 assert(extension_level == 8); 36 assert(extension_level == 8);
  37 + assert(PDFVersion(1, 2) < PDFVersion(1, 3));
  38 + assert(PDFVersion(1, 2) < PDFVersion(1, 2, 1));
  39 + assert(PDFVersion(1, 2, 1) < PDFVersion(1, 2, 2));
  40 + assert(! (PDFVersion(1, 2, 2) < PDFVersion(1, 2, 2)));
  41 + assert(! (PDFVersion(1, 2, 3) < PDFVersion(1, 2, 2)));
  42 + assert(PDFVersion(1, 1) < PDFVersion(1, 2, 2));
  43 + assert(! (PDFVersion(1, 3) < PDFVersion(1, 2, 2)));
  44 + assert(! (PDFVersion(2, 0) < PDFVersion(1, 9, 9)));
  45 + assert(! (PDFVersion(2, 0) < PDFVersion(2, 0)));
  46 + assert(PDFVersion(2, 0) == PDFVersion(2, 0));
  47 + assert(PDFVersion(2, 0, 1) == PDFVersion(2, 0, 1));
  48 +
37 std::cout << "PDFVersion assertions passed" << std::endl; 49 std::cout << "PDFVersion assertions passed" << std::endl;
38 return 0; 50 return 0;
39 } 51 }
qpdf/qtest/qpdf/extensions-adbe-force-1.3.out
1 version: 1.3 1 version: 1.3
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.3/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-force-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.6.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 /URL (http://something.adobe.com) >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-min-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.3.out
1 version: 1.3 1 version: 1.3
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.3/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.6.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.3.out
1 version: 1.3 1 version: 1.3
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.3/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-force-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.3.out
1 version: 1.3 1 version: 1.3
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.3/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-none-min-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 null 3 null
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.3.out
1 version: 1.3 1 version: 1.3
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.3/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-force-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.3.out
1 version: 1.5 1 version: 1.5
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.5/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.6.out
1 version: 1.6 1 version: 1.6
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.6/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.7.1.out
1 version: 1.7 1 version: 1.7
2 extension level: 1 2 extension level: 1
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 1 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/1
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.7.2.out
1 version: 1.7 1 version: 1.7
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.7.3.out
1 version: 1.7 1 version: 1.7
2 extension level: 3 2 extension level: 3
3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.7 /ExtensionLevel 3 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.7/3
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.8.0.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.8.2.out
1 version: 1.8 1 version: 1.8
2 extension level: 2 2 extension level: 2
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 2 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/2
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.8.5.out
1 version: 1.8 1 version: 1.8
2 extension level: 5 2 extension level: 5
3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /ADBE << /BaseVersion /1.8 /ExtensionLevel 5 >> /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/5
4 test 34 done 5 test 34 done
qpdf/qtest/qpdf/extensions-other-min-1.8.out
1 version: 1.8 1 version: 1.8
2 extension level: 0 2 extension level: 0
3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >> 3 << /Potato << /BaseVersion /3.14159 /ExtensionLevel 16059 >> >>
  4 +As PDFVersion: 1.8/0
4 test 34 done 5 test 34 done
qpdf/test_driver.cc
@@ -1327,6 +1327,12 @@ static void test_34(QPDF&amp; pdf, char const* arg2) @@ -1327,6 +1327,12 @@ static void test_34(QPDF&amp; pdf, char const* arg2)
1327 std::cout << "version: " << pdf.getPDFVersion() << std::endl 1327 std::cout << "version: " << pdf.getPDFVersion() << std::endl
1328 << "extension level: " << pdf.getExtensionLevel() << std::endl 1328 << "extension level: " << pdf.getExtensionLevel() << std::endl
1329 << pdf.getRoot().getKey("/Extensions").unparse() << std::endl; 1329 << pdf.getRoot().getKey("/Extensions").unparse() << std::endl;
  1330 + auto v = pdf.getVersionAsPDFVersion();
  1331 + std::string v_string;
  1332 + int extension_level;
  1333 + v.getVersion(v_string, extension_level);
  1334 + std::cout << "As PDFVersion: " << v_string << "/" << extension_level
  1335 + << std::endl;
1330 } 1336 }
1331 1337
1332 static void test_35(QPDF& pdf, char const* arg2) 1338 static void test_35(QPDF& pdf, char const* arg2)