2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-13 07:32:22 +00:00
qpdf/examples/qpdf-job.cc
Jay Berkenbilt 4ee393d1fa Remove compression from linearization tests where possible
By combining --linearize with --compress-streams=n, we ensure that no
new compressed data will appear in linearized output, which makes the
output independent of zlib's output. There are other tests to ensure
that linearization works correctly with compression. This commit
involves changing some test outputs and test code as well just
updating test suites.
2023-12-20 15:46:20 -05:00

104 lines
2.6 KiB
C++

#include <qpdf/QPDFJob.hh>
#include <qpdf/QUtil.hh>
#include <iostream>
// This program is a simple demonstration of different ways to use the QPDFJob API.
static char const* whoami = nullptr;
static void
usage()
{
std::cerr << "Usage: " << whoami << std::endl
<< "This program linearizes the first page of in.pdf to out1.pdf,"
<< " out2.pdf, and" << std::endl
<< " out3.pdf, each demonstrating a different way to use the"
<< " QPDFJob API" << std::endl;
exit(2);
}
int
main(int argc, char* argv[])
{
whoami = QUtil::getWhoami(argv[0]);
if (argc != 1) {
usage();
}
// The examples below all catch std::exception. Note that QPDFUsage can be caught separately to
// report on errors in using the API itself. For CLI, this is command-line usage. For JSON or
// the API, it would be errors from the equivalent invocation.
// Note that staticId is used for testing only.
try {
// Use the config API
QPDFJob j;
j.config()
->inputFile("in.pdf")
->outputFile("out1.pdf")
->pages()
->pageSpec(".", "1")
->endPages()
->linearize()
->staticId() // for testing only
->compressStreams("n") // avoid dependency on zlib output
->checkConfiguration();
j.run();
std::cout << "out1 status: " << j.getExitCode() << std::endl;
} catch (std::exception& e) {
std::cerr << "exception: " << e.what() << std::endl;
return 2;
}
try {
char const* new_argv[] = {
whoami,
"in.pdf",
"out2.pdf",
"--linearize",
"--pages",
".",
"1",
"--",
"--static-id",
"--compress-streams=n", // avoid dependency on zlib output
nullptr};
QPDFJob j;
j.initializeFromArgv(new_argv);
j.run();
std::cout << "out2 status: " << j.getExitCode() << std::endl;
} catch (std::exception& e) {
std::cerr << "exception: " << e.what() << std::endl;
return 2;
}
try {
// Use the JSON API
QPDFJob j;
j.initializeFromJson(R"({
"inputFile": "in.pdf",
"outputFile": "out3.pdf",
"staticId": "",
"linearize": "",
"compressStreams": "n",
"pages": [
{
"file": ".",
"range": "1"
}
]
}
)");
j.run();
std::cout << "out3 status: " << j.getExitCode() << std::endl;
} catch (std::exception& e) {
std::cerr << "exception: " << e.what() << std::endl;
return 2;
}
return 0;
}