diff options
| author | Gabriel Araújo <gabriel140492@gmail.com> | 2024-04-03 05:39:47 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-03 08:39:47 +0000 |
| commit | 0b9878ed318d23e96a853ef025ea6b036673c2a8 (patch) | |
| tree | 5d89c22dd9cc3ac325b88c56122aa4c143ddd23e | |
| parent | b3615ccd493c4791c3c7565fc7417cba50e8fd71 (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 |
