summaryrefslogtreecommitdiff
path: root/crates/typst-pdf
diff options
context:
space:
mode:
authorGabriel Araújo <gabriel140492@gmail.com>2024-04-03 05:39:47 -0300
committerGitHub <noreply@github.com>2024-04-03 08:39:47 +0000
commit0b9878ed318d23e96a853ef025ea6b036673c2a8 (patch)
tree5d89c22dd9cc3ac325b88c56122aa4c143ddd23e /crates/typst-pdf
parentb3615ccd493c4791c3c7565fc7417cba50e8fd71 (diff)
Fix wrong PDF page labels (#3836) (#3837)
Diffstat (limited to 'crates/typst-pdf')
-rw-r--r--crates/typst-pdf/src/page.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/crates/typst-pdf/src/page.rs b/crates/typst-pdf/src/page.rs
index aa3c92cc..c31d1204 100644
--- a/crates/typst-pdf/src/page.rs
+++ b/crates/typst-pdf/src/page.rs
@@ -229,17 +229,24 @@ fn write_page(ctx: &mut PdfContext, i: usize, resources_ref: Ref) {
/// Write the page labels.
pub(crate) fn write_page_labels(ctx: &mut PdfContext) -> Vec<(NonZeroUsize, Ref)> {
+ // If there is no page labeled, we skip the writing
+ if !ctx.pages.iter().any(|p| {
+ p.label
+ .as_ref()
+ .is_some_and(|l| l.prefix.is_some() || l.style.is_some())
+ }) {
+ return Vec::new();
+ }
+
let mut result = vec![];
+ let empty_label = PdfPageLabel::default();
let mut prev: Option<&PdfPageLabel> = None;
for (i, page) in ctx.pages.iter().enumerate() {
let nr = NonZeroUsize::new(1 + i).unwrap();
- let Some(label) = &page.label else { continue };
-
- // Don't create a label if neither style nor prefix are specified.
- if label.prefix.is_none() && label.style.is_none() {
- continue;
- }
+ // If there are pages with empty labels between labeled pages, we must
+ // write empty PageLabel entries.
+ let label = page.label.as_ref().unwrap_or(&empty_label);
if let Some(pre) = prev {
if label.prefix == pre.prefix