aboutsummaryrefslogtreecommitdiffstats
path: root/qpdf/test_xref.cc
diff options
context:
space:
mode:
authorMasamichi Hosoda <trueroad@trueroad.jp>2019-09-28 15:07:00 +0200
committerJay Berkenbilt <ejb@ql.org>2019-10-22 22:16:16 +0200
commit46ac3e21b362a8d5c7fd45c9c0384a52fc86fb9e (patch)
tree08a0ae7867a5db4ea9a7657eb115455185152f05 /qpdf/test_xref.cc
parent06b818dcd39b5aeaeeee5c247483633a02a0222e (diff)
downloadqpdf-46ac3e21b362a8d5c7fd45c9c0384a52fc86fb9e.tar.zst
Add QPDF::getXRefTable()
Diffstat (limited to 'qpdf/test_xref.cc')
-rw-r--r--qpdf/test_xref.cc71
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;
+}