From a522a15a66f737035cead527dc0eca14c3605deb Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 31 Mar 2019 15:47:57 +0200 Subject: =?UTF-8?q?Insert=20default=20glyph=20when=20subsetting=20?= =?UTF-8?q?=E2=9A=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/export/pdf.rs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src/export') diff --git a/src/export/pdf.rs b/src/export/pdf.rs index 2611f4ef..b466f225 100644 --- a/src/export/pdf.rs +++ b/src/export/pdf.rs @@ -164,35 +164,33 @@ impl<'d, W: Write> PdfEngine<'d, W> { let mut id = self.offsets.fonts.0; for font in &self.fonts { + let base_font = format!("ABCDEF+{}", font.name); + // Write the base font object referencing the CID font. self.writer.write_obj(id, Type0Font::new( - font.name.clone(), + base_font.clone(), CMapEncoding::Predefined("Identity-H".to_owned()), id + 1 - ).to_unicode(id + 2) + ).to_unicode(id + 3) )?; - let system_info = CIDSystemInfo::new("(Adobe)", "(Identity)", 0); + let system_info = CIDSystemInfo::new("Adobe", "Identity", 0); // Write the CID font referencing the font descriptor. self.writer.write_obj(id + 1, CIDFont::new( CIDFontType::Type2, - font.name.clone(), + base_font.clone(), system_info.clone(), - id + 3, + id + 2, ).widths(vec![WidthRecord::start(0, font.widths.clone())]) )?; - // The CMap, which maps glyphs to unicode codepoints. - let mapping = font.font.mapping.iter().map(|(&c, &cid)| (cid, c)); - self.writer.write_obj(id + 2, &CMap::new("Custom", system_info, mapping))?; - // Write the font descriptor (contains the global information about the font). - self.writer.write_obj(id + 3, + self.writer.write_obj(id + 2, FontDescriptor::new( - font.name.clone(), + base_font, font.flags, font.italic_angle, ) @@ -204,6 +202,10 @@ impl<'d, W: Write> PdfEngine<'d, W> { .font_file_3(id + 4) )?; + // The CMap, which maps glyphs to unicode codepoints. + let mapping = font.font.mapping.iter().map(|(&c, &cid)| (cid, c)); + self.writer.write_obj(id + 3, &CMap::new("Custom", system_info, mapping))?; + // Finally write the subsetted font program. self.writer.write_obj(id + 4, &FontStream::new( &font.program, @@ -249,7 +251,7 @@ impl PdfFont { let subsetted = font.subsetted( chars.iter().cloned(), &["head", "hhea", "maxp", "hmtx", "loca", "glyf"][..], - &["cvt ", "prep", "fpgm"][..], + &["cvt ", "prep", "fpgm", /* "OS/2", "cmap", "name", "post" */][..], )?; // Specify flags for the font -- cgit v1.2.3