aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFPageLabelDocumentHelper.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2024-01-05 22:11:09 +0100
committerJay Berkenbilt <ejb@ql.org>2024-01-05 23:12:12 +0100
commit7cac433e2d9256fb8361aa53d136d4eaacfda6fe (patch)
tree91e18e06655d5d83dd745032641cdd7406785ced /libqpdf/QPDFPageLabelDocumentHelper.cc
parent543038c52a3e0dc166565142ed7efb183e461948 (diff)
downloadqpdf-7cac433e2d9256fb8361aa53d136d4eaacfda6fe.tar.zst
Implement --set-page-labels and supporting API (fixes #939)
Diffstat (limited to 'libqpdf/QPDFPageLabelDocumentHelper.cc')
-rw-r--r--libqpdf/QPDFPageLabelDocumentHelper.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/libqpdf/QPDFPageLabelDocumentHelper.cc b/libqpdf/QPDFPageLabelDocumentHelper.cc
index d94c41fd..e291e9aa 100644
--- a/libqpdf/QPDFPageLabelDocumentHelper.cc
+++ b/libqpdf/QPDFPageLabelDocumentHelper.cc
@@ -99,3 +99,36 @@ QPDFPageLabelDocumentHelper::getLabelsForPageRange(
}
}
}
+
+QPDFObjectHandle
+QPDFPageLabelDocumentHelper::pageLabelDict(
+ qpdf_page_label_e label_type, int start_num, std::string_view prefix)
+{
+ auto num = "<< /Type /PageLabel >>"_qpdf;
+ switch (label_type) {
+ case pl_none:
+ break;
+ case pl_digits:
+ num.replaceKey("/S", "/D"_qpdf);
+ break;
+ case pl_alpha_lower:
+ num.replaceKey("/S", "/a"_qpdf);
+ break;
+ case pl_alpha_upper:
+ num.replaceKey("/S", "/A"_qpdf);
+ break;
+ case pl_roman_lower:
+ num.replaceKey("/S", "/r"_qpdf);
+ break;
+ case pl_roman_upper:
+ num.replaceKey("/S", "/R"_qpdf);
+ break;
+ }
+ if (!prefix.empty()) {
+ num.replaceKey("/P", QPDFObjectHandle::newUnicodeString(std::string(prefix)));
+ }
+ if (start_num != 1) {
+ num.replaceKey("/St", QPDFObjectHandle::newInteger(start_num));
+ }
+ return num;
+}