mirror of
https://github.com/qpdf/qpdf.git
synced 2024-09-21 17:49:08 +00:00
Add new functions qpdfjob_create_qpdf and qpdfjob_write_qpdf
This commit is contained in:
parent
c78f44798a
commit
41f79bedbc
@ -32,6 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <qpdf/DLL.h>
|
#include <qpdf/DLL.h>
|
||||||
|
#include <qpdf/qpdf-c.h>
|
||||||
#include <qpdf/qpdflogger-c.h>
|
#include <qpdf/qpdflogger-c.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifndef QPDF_NO_WCHAR_T
|
#ifndef QPDF_NO_WCHAR_T
|
||||||
@ -138,6 +139,28 @@ extern "C" {
|
|||||||
QPDF_DLL
|
QPDF_DLL
|
||||||
int qpdfjob_run(qpdfjob_handle j);
|
int qpdfjob_run(qpdfjob_handle j);
|
||||||
|
|
||||||
|
/* The following two functions allow a job to be run in two stages -
|
||||||
|
* creation of a qpdf_data object and writing of the qpdf_data object. This
|
||||||
|
* allows the qpdf_data object to be modified prior to writing it out. See
|
||||||
|
* examples/qpdfjob-remove-annotations for a C++ illustration of its use.
|
||||||
|
*
|
||||||
|
* This function wraps QPDFJob::createQPDF. It runs the first stage of the
|
||||||
|
* job. A nullptr is returned if the job did not produce any pdf file to be
|
||||||
|
* written.
|
||||||
|
*/
|
||||||
|
QPDF_DLL
|
||||||
|
qpdf_data qpdfjob_create_qpdf(qpdfjob_handle j);
|
||||||
|
|
||||||
|
/* This function wraps QPDFJob::writeQPDF. It returns the error code that
|
||||||
|
* qpdf would return with the equivalent command-line invocation. Exit code
|
||||||
|
* values are defined in Constants.h in the qpdf_exit_code_e type. NOTE it
|
||||||
|
* is the callers responsibility to clean up the resources associated
|
||||||
|
* qpdf_data object by calling qpdf_cleanup after the call to
|
||||||
|
* qpdfjob_write_qpdf.
|
||||||
|
*/
|
||||||
|
QPDF_DLL
|
||||||
|
int qpdfjob_write_qpdf(qpdfjob_handle j, qpdf_data qpdf);
|
||||||
|
|
||||||
/* Allow specification of a custom progress reporter. The progress
|
/* Allow specification of a custom progress reporter. The progress
|
||||||
* reporter is only used if progress is otherwise requested (with
|
* reporter is only used if progress is otherwise requested (with
|
||||||
* the --progress option or "progress": "" in the JSON).
|
* the --progress option or "progress": "" in the JSON).
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <qpdf/QPDFLogger.hh>
|
#include <qpdf/QPDFLogger.hh>
|
||||||
#include <qpdf/QPDFUsage.hh>
|
#include <qpdf/QPDFUsage.hh>
|
||||||
#include <qpdf/QUtil.hh>
|
#include <qpdf/QUtil.hh>
|
||||||
|
#include <qpdf/qpdf-c_impl.hh>
|
||||||
#include <qpdf/qpdflogger-c_impl.hh>
|
#include <qpdf/qpdflogger-c_impl.hh>
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
@ -98,6 +99,30 @@ qpdfjob_run(qpdfjob_handle j)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qpdf_data
|
||||||
|
qpdfjob_create_qpdf(qpdfjob_handle j)
|
||||||
|
{
|
||||||
|
QUtil::setLineBuf(stdout);
|
||||||
|
try {
|
||||||
|
auto qpdf = j->j.createQPDF();
|
||||||
|
return qpdf ? new _qpdf_data(std::move(qpdf)) : nullptr;
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
*j->j.getLogger()->getError()
|
||||||
|
<< j->j.getMessagePrefix() << ": " << e.what() << "\n";
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
qpdfjob_write_qpdf(qpdfjob_handle j, qpdf_data qpdf)
|
||||||
|
{
|
||||||
|
QUtil::setLineBuf(stdout);
|
||||||
|
return wrap_qpdfjob(j, [qpdf](qpdfjob_handle jh) {
|
||||||
|
jh->j.writeQPDF(*(qpdf->qpdf));
|
||||||
|
return jh->j.getExitCode();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
run_with_handle(std::function<int(qpdfjob_handle)> fn)
|
run_with_handle(std::function<int(qpdfjob_handle)> fn)
|
||||||
{
|
{
|
||||||
|
@ -97,6 +97,33 @@ run_tests()
|
|||||||
assert(qpdfjob_run(j) == 2);
|
assert(qpdfjob_run(j) == 2);
|
||||||
qpdfjob_cleanup(&j);
|
qpdfjob_cleanup(&j);
|
||||||
printf("json error test passed\n");
|
printf("json error test passed\n");
|
||||||
|
|
||||||
|
/* qpdfjob_create_qpdf and qpdfjob_write_qpdf test */
|
||||||
|
argv[0] = "qpdfjob";
|
||||||
|
argv[1] = "minimal.pdf";
|
||||||
|
argv[2] = "d.pdf";
|
||||||
|
argv[3] = "--deterministic-id";
|
||||||
|
argv[4] = "--progress";
|
||||||
|
argv[5] = NULL;
|
||||||
|
j = qpdfjob_init();
|
||||||
|
assert(qpdfjob_initialize_from_argv(j, argv) == 0);
|
||||||
|
qpdf_data qpdf = qpdfjob_create_qpdf(j);
|
||||||
|
assert(qpdfjob_write_qpdf(j, qpdf) == 0);
|
||||||
|
qpdf_cleanup(&qpdf);
|
||||||
|
qpdfjob_cleanup(&j);
|
||||||
|
|
||||||
|
/* Try to open a missing file to test case of QPDFJob::createQPDF returning
|
||||||
|
* nullptr.
|
||||||
|
*/
|
||||||
|
argv[0] = "qpdfjob";
|
||||||
|
argv[1] = "m.pdf";
|
||||||
|
argv[2] = "--check";
|
||||||
|
argv[3] = NULL;
|
||||||
|
j = qpdfjob_init();
|
||||||
|
assert(qpdfjob_initialize_from_argv(j, argv) == 0);
|
||||||
|
assert(qpdfjob_create_qpdf(j) == NULL);
|
||||||
|
qpdfjob_cleanup(&j);
|
||||||
|
printf("qpdfjob_create_qpdf and qpdfjob_write_qpdf test passed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -9,3 +9,8 @@ json warn test passed
|
|||||||
|custom|qpdfjob json|custom|: |custom|an output file name is required; use - for standard output|custom|
|
|custom|qpdfjob json|custom|: |custom|an output file name is required; use - for standard output|custom|
|
||||||
|custom|qpdfjob json|custom|: |custom|an output file name is required; use - for standard output|custom|
|
|custom|qpdfjob json|custom|: |custom|an output file name is required; use - for standard output|custom|
|
||||||
json error test passed
|
json error test passed
|
||||||
|
qpdfjob: d.pdf: write progress: 0%
|
||||||
|
....other write progress....
|
||||||
|
qpdfjob: d.pdf: write progress: 100%
|
||||||
|
qpdfjob: open m.pdf: No such file or directory
|
||||||
|
qpdfjob_create_qpdf and qpdfjob_write_qpdf test passed
|
||||||
|
BIN
qpdf/qtest/qpdf/qpdfjob-ctest4.pdf
Normal file
BIN
qpdf/qtest/qpdf/qpdfjob-ctest4.pdf
Normal file
Binary file not shown.
@ -43,7 +43,7 @@ my @good_json = (
|
|||||||
"underlay-overlay-password",
|
"underlay-overlay-password",
|
||||||
"misc-options",
|
"misc-options",
|
||||||
);
|
);
|
||||||
my $n_tests = 10 + scalar(@bad_json) + (2 * scalar(@good_json));
|
my $n_tests = 11 + scalar(@bad_json) + (2 * scalar(@good_json));
|
||||||
|
|
||||||
|
|
||||||
foreach my $i (@bad_json)
|
foreach my $i (@bad_json)
|
||||||
@ -104,7 +104,7 @@ $td->runtest("C job API",
|
|||||||
$td->FILTER => "perl filter-progress.pl"},
|
$td->FILTER => "perl filter-progress.pl"},
|
||||||
{$td->FILE => "qpdfjob-ctest.out", $td->EXIT_STATUS => 0},
|
{$td->FILE => "qpdfjob-ctest.out", $td->EXIT_STATUS => 0},
|
||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
foreach my $i (['a.pdf', 1], ['b.pdf', 2], ['c.pdf', 3])
|
foreach my $i (['a.pdf', 1], ['b.pdf', 2], ['c.pdf', 3], ['d.pdf', 4])
|
||||||
{
|
{
|
||||||
$td->runtest("check output",
|
$td->runtest("check output",
|
||||||
{$td->FILE => $i->[0]},
|
{$td->FILE => $i->[0]},
|
||||||
|
Loading…
Reference in New Issue
Block a user