Skip to content

Commit 1bde313

Browse files
committed
some hacks to reuse existing streams
1 parent e113662 commit 1bde313

File tree

4 files changed

+23
-14
lines changed

4 files changed

+23
-14
lines changed

examples/src/bin/add_annot.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn run() -> Result<(), PdfError> {
4646
// right: 300.961,
4747
// top: 742.55,
4848
// }),
49-
rect: None,
49+
rect: Some(Rectangle { left: 10., bottom: 10., right: 200., top: 200. }),
5050
contents: None,
5151
page: Some(old_page.clone()),
5252
border: None,
@@ -61,10 +61,10 @@ fn run() -> Result<(), PdfError> {
6161
ink_list: None,
6262
line: Some(Primitive::Array(
6363
vec![
64-
Primitive::Number(95.774),
65-
Primitive::Number(734.237),
66-
Primitive::Number(320.961),
67-
Primitive::Number(734.863)
64+
Primitive::Number(10.),
65+
Primitive::Number(100.),
66+
Primitive::Number(20.),
67+
Primitive::Number(200.)
6868
]
6969
)),
7070
// creation_date: None,
@@ -98,7 +98,7 @@ fn run() -> Result<(), PdfError> {
9898
old_file.update_ref(&r, annots).unwrap();
9999
}
100100
}
101-
old_file.save_to("/Users/apple/Downloads/test_pdf/out.pdf")?;
101+
old_file.save_to("out.pdf")?;
102102

103103
Ok(())
104104
}

pdf/src/content.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,10 @@ impl ObjectWrite for Content {
754754
fn to_primitive(&self, update: &mut impl Updater) -> Result<Primitive> {
755755
if self.parts.len() == 1 {
756756
let obj = self.parts[0].to_primitive(update)?;
757-
update.create(obj)?.to_primitive(update)
757+
match obj {
758+
Primitive::Reference(_) => Ok(obj),
759+
_ => update.create(obj)?.to_primitive(update)
760+
}
758761
} else {
759762
self.parts.to_primitive(update)
760763
}

pdf/src/object/stream.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,10 @@ impl<I: ObjectWrite> Stream<I> {
170170
}
171171
impl<I: ObjectWrite> ObjectWrite for Stream<I> {
172172
fn to_primitive(&self, update: &mut impl Updater) -> Result<Primitive> {
173-
self.to_pdf_stream(update).map(Primitive::Stream)
173+
match self.inner_data {
174+
StreamData::Original(_, id) => Ok(Primitive::Reference(id)),
175+
_ => self.to_pdf_stream(update).map(Primitive::Stream),
176+
}
174177
}
175178
}
176179
impl<I: DeepClone> DeepClone for Stream<I> {

pdf/src/primitive.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -268,23 +268,26 @@ impl Object for PdfStream {
268268
}
269269
impl ObjectWrite for PdfStream {
270270
fn to_primitive(&self, update: &mut impl Updater) -> Result<Primitive> {
271-
Ok(self.clone().into())
271+
match self.inner {
272+
StreamInner::InFile { id, .. } => Ok(Primitive::Reference(id)),
273+
StreamInner::Pending { .. } => Ok(self.clone().into()),
274+
}
272275
}
273276
}
274277
impl PdfStream {
275278
pub fn serialize(&self, out: &mut impl io::Write) -> Result<()> {
276-
self.info.serialize(out)?;
277279

278-
writeln!(out, "stream")?;
279280
match self.inner {
280-
StreamInner::InFile { .. } => {
281-
unimplemented!()
281+
StreamInner::InFile { id, .. } => {
282+
Primitive::Reference(id).serialize(out)?;
282283
}
283284
StreamInner::Pending { ref data } => {
285+
self.info.serialize(out)?;
286+
writeln!(out, "stream")?;
284287
out.write_all(data)?;
288+
writeln!(out, "\nendstream")?;
285289
}
286290
}
287-
writeln!(out, "\nendstream")?;
288291
Ok(())
289292
}
290293
pub fn raw_data(&self, resolve: &impl Resolve) -> Result<Arc<[u8]>> {

0 commit comments

Comments
 (0)