aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf-c.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-12-16 20:36:21 +0100
committerJay Berkenbilt <ejb@ql.org>2021-12-16 21:07:48 +0100
commit9bb6f570ec73c6154748596d04a6f10c41c57721 (patch)
treea677b2ca53d621cd9e2030196803397ab868d12c /libqpdf/qpdf-c.cc
parentf072be032fe921617ba5f78a004ee73c75caf6bd (diff)
downloadqpdf-9bb6f570ec73c6154748596d04a6f10c41c57721.tar.zst
C API: add functions for working with pages (fixes #594)
Diffstat (limited to 'libqpdf/qpdf-c.cc')
-rw-r--r--libqpdf/qpdf-c.cc99
1 files changed, 99 insertions, 0 deletions
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index c4428d10..0ce9c39e 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -1579,3 +1579,102 @@ char const* qpdf_oh_unparse_binary(qpdf_data qpdf, qpdf_oh oh)
return qpdf->tmp_string.c_str();
});
}
+
+int qpdf_get_num_pages(qpdf_data qpdf)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_num_pages");
+ int n = -1;
+ QPDF_ERROR_CODE code = trap_errors(qpdf, [&n](qpdf_data q) {
+ n = QIntC::to_int(q->qpdf->getAllPages().size());
+ });
+ if (code & QPDF_ERRORS)
+ {
+ return -1;
+ }
+ return n;
+}
+
+qpdf_oh qpdf_get_page_n(qpdf_data qpdf, size_t i)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_get_page_n");
+ qpdf_oh result = 0;
+ QPDF_ERROR_CODE code = trap_errors(qpdf, [&result, i](qpdf_data q) {
+ result = new_object(q, q->qpdf->getAllPages().at(i));
+ });
+ if ((code & QPDF_ERRORS) || (result == 0))
+ {
+ return qpdf_oh_new_uninitialized(qpdf);
+ }
+ return result;
+}
+
+QPDF_ERROR_CODE qpdf_update_all_pages_cache(qpdf_data qpdf)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_update_all_pages_cache");
+ return trap_errors(qpdf, [](qpdf_data q) {
+ q->qpdf->updateAllPagesCache();
+ });
+}
+
+int qpdf_find_page_by_id(qpdf_data qpdf, int objid, int generation)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_find_page_by_id");
+ int n = -1;
+ QPDFObjGen og(objid, generation);
+ QPDF_ERROR_CODE code = trap_errors(qpdf, [&n, &og](qpdf_data q) {
+ n = QIntC::to_int(q->qpdf->findPage(og));
+ });
+ if (code & QPDF_ERRORS)
+ {
+ return -1;
+ }
+ return n;
+}
+
+int qpdf_find_page_by_oh(qpdf_data qpdf, qpdf_oh oh)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_find_page_by_oh");
+ return do_with_oh<int>(
+ qpdf, oh, return_T<int>(-1), [qpdf](QPDFObjectHandle& o) {
+ return qpdf->qpdf->findPage(o);
+ });
+}
+
+QPDF_ERROR_CODE qpdf_push_inherited_attributes_to_page(qpdf_data qpdf)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_push_inherited_attributes_to_page");
+ return trap_errors(qpdf, [](qpdf_data q) {
+ q->qpdf->pushInheritedAttributesToPage();
+ });
+}
+
+QPDF_ERROR_CODE qpdf_add_page(
+ qpdf_data qpdf, qpdf_data newpage_qpdf, qpdf_oh newpage, QPDF_BOOL first)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_add_page");
+ auto page = qpdf_oh_item_internal(newpage_qpdf, newpage);
+ return trap_errors(qpdf, [&page, first](qpdf_data q) {
+ q->qpdf->addPage(page, first);
+ });
+}
+
+QPDF_ERROR_CODE qpdf_add_page_at(
+ qpdf_data qpdf, qpdf_data newpage_qpdf, qpdf_oh newpage,
+ QPDF_BOOL before, qpdf_oh refpage)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_add_page_at");
+ auto page = qpdf_oh_item_internal(newpage_qpdf, newpage);
+ auto ref = qpdf_oh_item_internal(qpdf, refpage);
+ return trap_errors(qpdf, [&page, before, &ref](qpdf_data q) {
+ q->qpdf->addPageAt(page, before, ref);
+ });
+}
+
+QPDF_ERROR_CODE qpdf_remove_page(qpdf_data qpdf, qpdf_oh page)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_remove_page");
+ auto p = qpdf_oh_item_internal(qpdf, page);
+ return trap_errors(qpdf, [&p](qpdf_data q) {
+ q->qpdf->removePage(p);
+ });
+}