Commit ce5c3bcad81c264c90a429ec505a581680ce35a1
1 parent
877694a5
QPDFJob: pass capture output streams through to underlying QPDF
Showing
3 changed files
with
32 additions
and
1 deletions
libqpdf/QPDFJob.cc
| @@ -703,6 +703,7 @@ QPDFJob::getEncryptionStatus() | @@ -703,6 +703,7 @@ QPDFJob::getEncryptionStatus() | ||
| 703 | void | 703 | void |
| 704 | QPDFJob::setQPDFOptions(QPDF& pdf) | 704 | QPDFJob::setQPDFOptions(QPDF& pdf) |
| 705 | { | 705 | { |
| 706 | + pdf.setOutputStreams(this->m->cout, this->m->cerr); | ||
| 706 | if (m->ignore_xref_streams) { | 707 | if (m->ignore_xref_streams) { |
| 707 | pdf.setIgnoreXRefStreams(true); | 708 | pdf.setIgnoreXRefStreams(true); |
| 708 | } | 709 | } |
qpdf/qtest/qpdf/job-api.out
| @@ -5,4 +5,15 @@ usage: an input file name is required | @@ -5,4 +5,15 @@ usage: an input file name is required | ||
| 5 | error caught by run | 5 | error caught by run |
| 6 | finished config | 6 | finished config |
| 7 | usage: an input file name is required | 7 | usage: an input file name is required |
| 8 | +output capture | ||
| 9 | +calling run | ||
| 10 | +captured stdout | ||
| 11 | +Object is stream. Dictionary: | ||
| 12 | +<< /Length 44 >> | ||
| 13 | +captured stderr | ||
| 14 | +WARNING: bad2.pdf: file is damaged | ||
| 15 | +WARNING: bad2.pdf: can't find startxref | ||
| 16 | +WARNING: bad2.pdf: Attempting to reconstruct cross-reference table | ||
| 17 | +WARNING: bad2.pdf (object 4 0, offset 389): expected endobj | ||
| 18 | +qpdf: operation succeeded with warnings | ||
| 8 | test 84 done | 19 | test 84 done |
qpdf/test_driver.cc
| @@ -1734,7 +1734,8 @@ test_46(QPDF& pdf, char const* arg2) | @@ -1734,7 +1734,8 @@ test_46(QPDF& pdf, char const* arg2) | ||
| 1734 | } | 1734 | } |
| 1735 | 1735 | ||
| 1736 | std::cout << "/Bad1" << std::endl; | 1736 | std::cout << "/Bad1" << std::endl; |
| 1737 | - auto bad1 = QPDFNumberTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf); | 1737 | + auto bad1 = |
| 1738 | + QPDFNumberTreeObjectHelper(pdf.getTrailer().getKey("/Bad1"), pdf); | ||
| 1738 | assert(bad1.begin() == bad1.end()); | 1739 | assert(bad1.begin() == bad1.end()); |
| 1739 | assert(bad1.last() == bad1.end()); | 1740 | assert(bad1.last() == bad1.end()); |
| 1740 | 1741 | ||
| @@ -3023,6 +3024,24 @@ test_84(QPDF& pdf, char const* arg2) | @@ -3023,6 +3024,24 @@ test_84(QPDF& pdf, char const* arg2) | ||
| 3023 | } catch (QPDFUsage& e) { | 3024 | } catch (QPDFUsage& e) { |
| 3024 | std::cout << "usage: " << e.what() << std::endl; | 3025 | std::cout << "usage: " << e.what() << std::endl; |
| 3025 | } | 3026 | } |
| 3027 | + | ||
| 3028 | + std::cout << "output capture" << std::endl; | ||
| 3029 | + std::ostringstream cout; | ||
| 3030 | + std::ostringstream cerr; | ||
| 3031 | + { | ||
| 3032 | + QPDFJob j; | ||
| 3033 | + j.setOutputStreams(&cout, &cerr); | ||
| 3034 | + j.config() | ||
| 3035 | + ->inputFile("bad2.pdf") | ||
| 3036 | + ->showObject("4,0") | ||
| 3037 | + ->checkConfiguration(); | ||
| 3038 | + std::cout << "calling run" << std::endl; | ||
| 3039 | + j.run(); | ||
| 3040 | + std::cout << "captured stdout" << std::endl; | ||
| 3041 | + std::cout << cout.str(); | ||
| 3042 | + std::cout << "captured stderr" << std::endl; | ||
| 3043 | + std::cout << cerr.str(); | ||
| 3044 | + } | ||
| 3026 | } | 3045 | } |
| 3027 | 3046 | ||
| 3028 | static void | 3047 | static void |