diff options
author | Masamichi Hosoda <trueroad@trueroad.jp> | 2019-09-28 15:07:00 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-10-22 22:16:16 +0200 |
commit | 46ac3e21b362a8d5c7fd45c9c0384a52fc86fb9e (patch) | |
tree | 08a0ae7867a5db4ea9a7657eb115455185152f05 /qpdf/test_xref.cc | |
parent | 06b818dcd39b5aeaeeee5c247483633a02a0222e (diff) | |
download | qpdf-46ac3e21b362a8d5c7fd45c9c0384a52fc86fb9e.tar.zst |
Add QPDF::getXRefTable()
Diffstat (limited to 'qpdf/test_xref.cc')
-rw-r--r-- | qpdf/test_xref.cc | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/qpdf/test_xref.cc b/qpdf/test_xref.cc new file mode 100644 index 00000000..9e04f3f7 --- /dev/null +++ b/qpdf/test_xref.cc @@ -0,0 +1,71 @@ +#include <qpdf/QPDF.hh> +#include <qpdf/QPDFObjGen.hh> +#include <qpdf/QPDFXRefEntry.hh> + +#include <iostream> +#include <map> +#include <string> +#include <cstdlib> + +int main(int argc, char *argv[]) +{ + if (argc != 2) + { + std::cerr << "usage: test_xref INPUT.pdf" << std::endl; + std::exit(2); + } + + try + { + QPDF qpdf; + qpdf.processFile(argv[1]); + + std::map<QPDFObjGen, QPDFXRefEntry> xref + = qpdf.getXRefTable(); + + for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = xref.begin(); + iter != xref.end(); ++iter) + { + std::cout + << iter->first.getObj() << "/" << iter->first.getGen() + << ", "; + switch (iter->second.getType()) + { + case 0: + std::cout + << "free entry" + << std::endl; + break; + case 1: + std::cout + << "uncompressed, offset = " + << iter->second.getOffset() + << " (0x" + << std::hex << iter->second.getOffset() << std::dec + << ")" + << std::endl; + break; + case 2: + std::cout + << "compressed, stream number = " + << iter->second.getObjStreamNumber() + << ", stream index = " + << iter->second.getObjStreamIndex() + << std::endl; + break; + default: + std::cerr + << "unknown" + << std::endl; + std::exit(2); + } + } + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + std::exit(2); + } + + return 0; +} |