mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-28 11:47:21 -06:00
M4.82: PDF export writes top-level layers as PDF layers
Create PDF layers from top-level layers (document.exportPdf createLayers, the Save PDF dialog's General option) now writes an optional content group per top-level layer (template layers are left out): named as the layer, off when the layer is hidden, /PrintState /OFF when its Print option is off, locked when it is locked, listed top first, with a print auto-state (not under a standard). The file reopens with those layers. The PDF writer has no optional content, so each layer is drawn as a form of its own (no transparency group, so it draws as in place) starting with a mark; after writing, the uses of the layers' forms are wrapped in /OC ... BDC/EMC and the catalog gets /OCProperties (crates/pdf/src/forms.rs, through the shared patch writer and the PDF syntax reader of encrypt.rs). PDF 1.4 and a knockout page group write plain page content with a warning; the dialog greys the option at 1.4. The "not written yet" warning is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d7e9f2a47a
commit
0e4d3f6871
@@ -48,8 +48,13 @@ impl Xref {
|
||||
Some(Self { at, entries, count, trailer: (start, end) })
|
||||
}
|
||||
|
||||
/// Number of entries (objects `0..count`).
|
||||
pub fn count(&self) -> usize {
|
||||
self.count
|
||||
}
|
||||
|
||||
/// Where in-use object `n` starts.
|
||||
fn offset(&self, pdf: &[u8], n: u32) -> Option<usize> {
|
||||
pub fn offset(&self, pdf: &[u8], n: u32) -> Option<usize> {
|
||||
let e = self.entries + 20 * usize::try_from(n).ok().filter(|n| *n < self.count)?;
|
||||
let entry = pdf.get(e..e + 20)?;
|
||||
(entry.get(17) == Some(&b'n')).then_some(())?;
|
||||
|
||||
Reference in New Issue
Block a user