diff options
| author | Gabriel Araújo <gabriel140492@gmail.com> | 2024-04-03 05:39:47 -0300 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2024-05-17 14:27:58 +0200 |
| commit | ca0754d80f1870f485ab513690fc53a7d38665dd (patch) | |
| tree | 591094bafb7d9d9e432322ad5e1a545cc335a784 | |
| parent | f246f0a245a375e013052c701901e233eda32ee1 (diff) | |
Fix wrong PDF page labels (#3836) (#3837)
| -rw-r--r-- | crates/typst-pdf/src/page.rs | 19 |
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 |
