Skip to content

Commit f339688

Browse files
committed
Don't write empty resource dictionaries
1 parent 8bb340f commit f339688

File tree

9 files changed

+32
-15
lines changed

9 files changed

+32
-15
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2021"
77
image = { version = "0.25.1", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
88
miniz_oxide = "0.7.4"
99
once_cell = "1.19.0"
10-
pdf-writer = {git = "https://github.com/LaurenzV/pdf-writer", rev = "5aa89f5"}
10+
pdf-writer = {path = "../pdf-writer"}
1111
resvg = {git = "https://github.com/LaurenzV/resvg", rev = "1c2b6bd0"}
1212
siphasher = "1.0.1"
1313
skrifa = {git="https://github.com/LaurenzV/fontations", rev="0ed7955"}

src/object/page.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl Object for Page {
3232
let mut page = chunk.page(root_ref);
3333
self.stream
3434
.resource_dictionary
35-
.to_pdf_resources(sc, &mut page.resources());
35+
.to_pdf_resources(sc, &mut page);
3636

3737
page.media_box(self.media_box.to_pdf_rect());
3838
page.parent(sc.page_tree_ref());

src/object/tiling_pattern.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ impl Object for TilingPattern {
6565

6666
self.stream
6767
.resource_dictionary
68-
.to_pdf_resources(sc, &mut tiling_pattern.resources());
68+
.to_pdf_resources(sc, &mut tiling_pattern);
6969

7070
let final_bbox = pdf_writer::Rect::new(0.0, 0.0, self.width.get(), self.height.get());
7171

src/object/type3_font.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ impl Object for Type3Font {
184184
font_descriptor.finish();
185185

186186
let mut type3_font = chunk.type3_font(root_ref);
187-
resource_dictionary.to_pdf_resources(sc, &mut type3_font.resources());
187+
resource_dictionary.to_pdf_resources(sc, &mut type3_font);
188188

189189
type3_font.bbox(bbox.to_pdf_rect());
190190
type3_font.to_unicode(cmap_ref);

src/object/xobject.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl Object for XObject {
4747

4848
self.stream
4949
.resource_dictionary
50-
.to_pdf_resources(sc, &mut x_object.resources());
50+
.to_pdf_resources(sc, &mut x_object);
5151
x_object.bbox(self.custom_bbox.unwrap_or(self.stream.bbox).to_pdf_rect());
5252

5353
if self.isolated || self.transparency_group_color_space {

src/resource.rs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::object::tiling_pattern::TilingPattern;
1111
use crate::object::xobject::XObject;
1212
use crate::serialize::{hash_item, Object, RegisterableObject, SerializerContext};
1313
use crate::util::NameExt;
14+
use pdf_writer::traits::ResourcesExt;
1415
use pdf_writer::writers::Resources;
1516
use pdf_writer::{Chunk, Dict, Finish, Ref};
1617
use std::collections::HashMap;
@@ -217,13 +218,28 @@ pub(crate) struct ResourceDictionary {
217218
}
218219

219220
impl ResourceDictionary {
220-
pub fn to_pdf_resources(self, sc: &mut SerializerContext, resources: &mut Resources) {
221-
write_resource_type(sc, resources, self.color_spaces, false);
222-
write_resource_type(sc, resources, self.ext_g_states, false);
223-
write_resource_type(sc, resources, self.patterns, false);
224-
write_resource_type(sc, resources, self.x_objects, false);
225-
write_resource_type(sc, resources, self.shadings, false);
226-
write_resource_type(sc, resources, self.fonts, true);
221+
pub fn to_pdf_resources<T>(self, sc: &mut SerializerContext, parent: &mut T)
222+
where
223+
T: ResourcesExt,
224+
{
225+
if !self.is_empty() {
226+
let resources = &mut parent.resources();
227+
write_resource_type(sc, resources, self.color_spaces, false);
228+
write_resource_type(sc, resources, self.ext_g_states, false);
229+
write_resource_type(sc, resources, self.patterns, false);
230+
write_resource_type(sc, resources, self.x_objects, false);
231+
write_resource_type(sc, resources, self.shadings, false);
232+
write_resource_type(sc, resources, self.fonts, true);
233+
}
234+
}
235+
236+
pub fn is_empty(&self) -> bool {
237+
self.color_spaces.is_empty()
238+
&& self.ext_g_states.is_empty()
239+
&& self.patterns.is_empty()
240+
&& self.x_objects.is_empty()
241+
&& self.shadings.is_empty()
242+
&& self.fonts.is_empty()
227243
}
228244
}
229245

@@ -266,6 +282,10 @@ where
266282
self.entries.len() as u32
267283
}
268284

285+
pub fn is_empty(&self) -> bool {
286+
self.len() == 0
287+
}
288+
269289
fn name_from_number(num: ResourceNumber) -> String {
270290
format!("{}{}", T::get_prefix(), num)
271291
}

tests/snapshots/ext_g_state/all_set.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
/Length 0
77
/Type /XObject
88
/Subtype /Form
9-
/Resources <<>>
109
/BBox [0 0 0 0]
1110
/Group <<
1211
/Type /Group

tests/snapshots/page/simple_page.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ endobj
1919
3 0 obj
2020
<<
2121
/Type /Page
22-
/Resources <<>>
2322
/MediaBox [0 0 200 200]
2423
/Parent 2 0 R
2524
/Contents 4 0 R

0 commit comments

Comments
 (0)