Commit cfd5147d922ee4e29e10f116dfca79325398a6db
1 parent
8082af09
Add QPDF::getVersionAsPDFVersion
Showing
79 changed files
with
138 additions
and
21 deletions
ChangeLog
| ... | ... | @@ -3,6 +3,9 @@ |
| 3 | 3 | * Add new class PDFVersion for more convenient comparison of PDF |
| 4 | 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 | 9 | 2022-02-06 Jay Berkenbilt <ejb@ql.org> |
| 7 | 10 | |
| 8 | 11 | * Pl_Buffer and QPDFWriter: add getBufferSharedPointer(), which | ... | ... |
include/qpdf/PDFVersion.hh
include/qpdf/QPDF.hh
| ... | ... | @@ -44,6 +44,7 @@ |
| 44 | 44 | #include <qpdf/QPDFStreamFilter.hh> |
| 45 | 45 | #include <qpdf/Buffer.hh> |
| 46 | 46 | #include <qpdf/InputSource.hh> |
| 47 | +#include <qpdf/PDFVersion.hh> | |
| 47 | 48 | |
| 48 | 49 | class QPDF_Stream; |
| 49 | 50 | class BitStream; |
| ... | ... | @@ -260,6 +261,10 @@ class QPDF |
| 260 | 261 | |
| 261 | 262 | QPDF_DLL |
| 262 | 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 | 268 | QPDF_DLL |
| 264 | 269 | std::string getPDFVersion() const; |
| 265 | 270 | QPDF_DLL | ... | ... |
libqpdf/PDFVersion.cc
| ... | ... | @@ -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 | 17 | bool |
| 18 | 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 | 25 | false); |
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | bool |
| 29 | 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 | 36 | void |
| ... | ... | @@ -45,25 +45,25 @@ PDFVersion::updateIfGreater(PDFVersion const& other) |
| 45 | 45 | void |
| 46 | 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 | 53 | int |
| 54 | 54 | PDFVersion::getMajor() const |
| 55 | 55 | { |
| 56 | - return this->major; | |
| 56 | + return this->major_version; | |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | int |
| 60 | 60 | PDFVersion::getMinor() const |
| 61 | 61 | { |
| 62 | - return this->minor; | |
| 62 | + return this->minor_version; | |
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | int |
| 66 | 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 | 11 | #include <stdlib.h> |
| 12 | 12 | #include <string.h> |
| 13 | 13 | #include <memory.h> |
| 14 | +#include <regex> | |
| 14 | 15 | |
| 15 | 16 | #include <qpdf/QTC.hh> |
| 16 | 17 | #include <qpdf/QUtil.hh> |
| ... | ... | @@ -2742,6 +2743,24 @@ QPDF::getFilename() const |
| 2742 | 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 | 2764 | std::string |
| 2746 | 2765 | QPDF::getPDFVersion() const |
| 2747 | 2766 | { | ... | ... |
libtests/pdf_version.cc
| ... | ... | @@ -34,6 +34,18 @@ int main() |
| 34 | 34 | v2.getVersion(version, extension_level); |
| 35 | 35 | assert(version == "1.7"); |
| 36 | 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 | 49 | std::cout << "PDFVersion assertions passed" << std::endl; |
| 38 | 50 | return 0; |
| 39 | 51 | } | ... | ... |
qpdf/qtest/qpdf/extensions-adbe-force-1.3.out
qpdf/qtest/qpdf/extensions-adbe-force-1.6.out
qpdf/qtest/qpdf/extensions-adbe-force-1.7.1.out
qpdf/qtest/qpdf/extensions-adbe-force-1.7.2.out
qpdf/qtest/qpdf/extensions-adbe-force-1.7.3.out
qpdf/qtest/qpdf/extensions-adbe-force-1.8.0.out
qpdf/qtest/qpdf/extensions-adbe-force-1.8.2.out
qpdf/qtest/qpdf/extensions-adbe-force-1.8.5.out
qpdf/qtest/qpdf/extensions-adbe-force-1.8.out
qpdf/qtest/qpdf/extensions-adbe-min-1.3.out
qpdf/qtest/qpdf/extensions-adbe-min-1.6.out
qpdf/qtest/qpdf/extensions-adbe-min-1.7.1.out
qpdf/qtest/qpdf/extensions-adbe-min-1.7.2.out
qpdf/qtest/qpdf/extensions-adbe-min-1.7.3.out
qpdf/qtest/qpdf/extensions-adbe-min-1.8.0.out
qpdf/qtest/qpdf/extensions-adbe-min-1.8.2.out
qpdf/qtest/qpdf/extensions-adbe-min-1.8.5.out
qpdf/qtest/qpdf/extensions-adbe-min-1.8.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.3.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.6.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.1.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.2.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.7.3.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.0.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.2.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.5.out
qpdf/qtest/qpdf/extensions-adbe-other-force-1.8.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.3.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.6.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.1.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.2.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.7.3.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.0.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.2.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.5.out
qpdf/qtest/qpdf/extensions-adbe-other-min-1.8.out
qpdf/qtest/qpdf/extensions-none-force-1.3.out
qpdf/qtest/qpdf/extensions-none-force-1.6.out
qpdf/qtest/qpdf/extensions-none-force-1.7.1.out
qpdf/qtest/qpdf/extensions-none-force-1.7.2.out
qpdf/qtest/qpdf/extensions-none-force-1.7.3.out
qpdf/qtest/qpdf/extensions-none-force-1.8.0.out
qpdf/qtest/qpdf/extensions-none-force-1.8.2.out
qpdf/qtest/qpdf/extensions-none-force-1.8.5.out
qpdf/qtest/qpdf/extensions-none-force-1.8.out
qpdf/qtest/qpdf/extensions-none-min-1.3.out
qpdf/qtest/qpdf/extensions-none-min-1.6.out
qpdf/qtest/qpdf/extensions-none-min-1.7.1.out
qpdf/qtest/qpdf/extensions-none-min-1.7.2.out
qpdf/qtest/qpdf/extensions-none-min-1.7.3.out
qpdf/qtest/qpdf/extensions-none-min-1.8.0.out
qpdf/qtest/qpdf/extensions-none-min-1.8.2.out
qpdf/qtest/qpdf/extensions-none-min-1.8.5.out
qpdf/qtest/qpdf/extensions-none-min-1.8.out
qpdf/qtest/qpdf/extensions-other-force-1.3.out
qpdf/qtest/qpdf/extensions-other-force-1.6.out
qpdf/qtest/qpdf/extensions-other-force-1.7.1.out
qpdf/qtest/qpdf/extensions-other-force-1.7.2.out
qpdf/qtest/qpdf/extensions-other-force-1.7.3.out
qpdf/qtest/qpdf/extensions-other-force-1.8.0.out
qpdf/qtest/qpdf/extensions-other-force-1.8.2.out
qpdf/qtest/qpdf/extensions-other-force-1.8.5.out
qpdf/qtest/qpdf/extensions-other-force-1.8.out
qpdf/qtest/qpdf/extensions-other-min-1.3.out
qpdf/qtest/qpdf/extensions-other-min-1.6.out
qpdf/qtest/qpdf/extensions-other-min-1.7.1.out
qpdf/qtest/qpdf/extensions-other-min-1.7.2.out
qpdf/qtest/qpdf/extensions-other-min-1.7.3.out
qpdf/qtest/qpdf/extensions-other-min-1.8.0.out
qpdf/qtest/qpdf/extensions-other-min-1.8.2.out
qpdf/qtest/qpdf/extensions-other-min-1.8.5.out
qpdf/qtest/qpdf/extensions-other-min-1.8.out
qpdf/test_driver.cc
| ... | ... | @@ -1327,6 +1327,12 @@ static void test_34(QPDF& pdf, char const* arg2) |
| 1327 | 1327 | std::cout << "version: " << pdf.getPDFVersion() << std::endl |
| 1328 | 1328 | << "extension level: " << pdf.getExtensionLevel() << std::endl |
| 1329 | 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 | 1338 | static void test_35(QPDF& pdf, char const* arg2) | ... | ... |