summaryrefslogtreecommitdiff
path: root/src/pdf.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2019-02-16 18:57:50 +0100
committerLaurenz <laurmaedje@gmail.com>2019-02-16 20:17:31 +0100
commitae3af533ffba9e3bb3719eafb4e6339f0e23c1f0 (patch)
treebe0bf6339ea27a6fc845d1a2266d43e56a74fd33 /src/pdf.rs
parentf3f82f5f2b35f70d2cad934448c7e159aed2a3df (diff)
Extract opentype parser into crate 🧱
Diffstat (limited to 'src/pdf.rs')
-rw-r--r--src/pdf.rs36
1 files changed, 10 insertions, 26 deletions
diff --git a/src/pdf.rs b/src/pdf.rs
index 14feb2ab..09a4b7d8 100644
--- a/src/pdf.rs
+++ b/src/pdf.rs
@@ -1,8 +1,8 @@
//! Writing of documents in the _PDF_ format.
use std::io::{self, Write};
-use crate::doc::{Document, DocumentFont};
-use pdf::{PdfWriter, Id, Rect, Size, Version, DocumentCatalog, PageTree,
+use crate::doc::Document;
+use pdf::{PdfWriter, Id, Rect, Version, DocumentCatalog, PageTree,
Page, PageData, Resource, font::Type1Font, Text, Trailer};
@@ -25,12 +25,10 @@ impl<W: Write> WritePdf<Document> for W {
let pages_start = page_tree_id + 1;
let pages_end = pages_start + doc.pages.len() as Id;
- let resources_start = pages_end;
- let font_start = resources_start;
- let font_end = font_start + doc.fonts.len() as Id;
- let resources_end = font_end;
+ let font_start = pages_end;
+ let font_end = font_start + 1;
- let content_start = resources_end;
+ let content_start = font_end;
let content_end = content_start
+ doc.pages.iter().flat_map(|p| p.contents.iter()).count() as Id;
@@ -41,16 +39,12 @@ impl<W: Write> WritePdf<Document> for W {
page_tree: page_tree_id,
})?;
- let font_resources: Vec<_> = (1 ..= doc.fonts.len() as u32)
- .zip(font_start .. font_end)
- .map(|(nr, id)| Resource::Font(nr, id)).collect();
-
// Root page tree
writer.write_obj(page_tree_id, &PageTree {
parent: None,
kids: (pages_start .. pages_end).collect(),
data: PageData {
- resources: Some(font_resources),
+ resources: Some(vec![Resource::Font(1, font_start)]),
.. PageData::default()
},
})?;
@@ -73,20 +67,10 @@ impl<W: Write> WritePdf<Document> for W {
id += 1;
}
- // The resources (fonts)
- let mut id = font_start;
- for font in &doc.fonts {
- match font {
- DocumentFont::Builtin(font) => {
- writer.write_obj(id, &Type1Font {
- base_font: font.name().to_owned(),
- })?;
- },
- DocumentFont::Loaded(_) => unimplemented!(),
- }
-
- id += 1;
- }
+ // The resources, currently only one hardcoded font
+ writer.write_obj(font_start, &Type1Font {
+ base_font: "Helvetica".to_owned(),
+ })?;
// The page contents
let mut id = content_start;