more on fonts
This commit is contained in:
parent
a19a78c9b2
commit
05b260763b
|
@ -3990,7 +3990,8 @@ let go () =
|
||||||
let font =
|
let font =
|
||||||
match args.font with
|
match args.font with
|
||||||
| StandardFont f -> Pdftext.StandardFont (f, Pdftext.WinAnsiEncoding)
|
| StandardFont f -> Pdftext.StandardFont (f, Pdftext.WinAnsiEncoding)
|
||||||
| FontToEmbed (fontfile, encoding) -> Cpdfembed.font_of_truetype ~fontfile ~fontname:args.fontname ~encoding
|
(* FIXME we don't have text here, so we don't really want embed_truetype: separate functions again? *)
|
||||||
|
| FontToEmbed (fontfile, encoding) -> Cpdfembed.embed_truetype pdf ~fontfile ~fontname:args.fontname ~text:"" ~encoding
|
||||||
| _ -> error "TOC: not a standard or embedded font"
|
| _ -> error "TOC: not a standard or embedded font"
|
||||||
in
|
in
|
||||||
let pdf = Cpdftoc.typeset_table_of_contents ~font ~fontsize:args.fontsize ~title:args.toc_title ~bookmark:args.toc_bookmark pdf in
|
let pdf = Cpdftoc.typeset_table_of_contents ~font ~fontsize:args.fontsize ~title:args.toc_title ~bookmark:args.toc_bookmark pdf in
|
||||||
|
@ -4000,7 +4001,8 @@ let go () =
|
||||||
let font =
|
let font =
|
||||||
match args.font with
|
match args.font with
|
||||||
| StandardFont f -> Pdftext.StandardFont (f, Pdftext.WinAnsiEncoding)
|
| StandardFont f -> Pdftext.StandardFont (f, Pdftext.WinAnsiEncoding)
|
||||||
| FontToEmbed (fontfile, encoding) -> Cpdfembed.font_of_truetype ~fontfile ~fontname:args.fontname ~encoding
|
(* We don't have the PDF yet to do the embeddeding of the font. FIXME: next up - do we need separate functions? *)
|
||||||
|
| FontToEmbed (fontfile, encoding) -> Cpdfembed.embed_truetype (Pdf.empty ()) ~fontfile ~fontname:args.fontname ~text:"" ~encoding
|
||||||
| _ -> error "text to PDF: not a standard or embedded font"
|
| _ -> error "text to PDF: not a standard or embedded font"
|
||||||
in
|
in
|
||||||
let pdf =
|
let pdf =
|
||||||
|
|
38
cpdfembed.ml
38
cpdfembed.ml
|
@ -63,11 +63,6 @@ let embed_truetype pdf ~fontfile ~fontname ~text ~encoding =
|
||||||
encoding_table glyphlist_table unicodepoints)
|
encoding_table glyphlist_table unicodepoints)
|
||||||
in
|
in
|
||||||
let f = Cpdftruetype.parse ~subset:accepted_unicodepoints fontfile in
|
let f = Cpdftruetype.parse ~subset:accepted_unicodepoints fontfile in
|
||||||
let widths =
|
|
||||||
Pdf.Array
|
|
||||||
(map (fun x -> Pdf.Integer x)
|
|
||||||
(Array.to_list f.Cpdftruetype.widths))
|
|
||||||
in
|
|
||||||
let name_1 = basename () in
|
let name_1 = basename () in
|
||||||
let fontfile =
|
let fontfile =
|
||||||
let len = Pdfio.bytes_size fontfile in
|
let len = Pdfio.bytes_size fontfile in
|
||||||
|
@ -79,6 +74,31 @@ let embed_truetype pdf ~fontfile ~fontname ~text ~encoding =
|
||||||
in
|
in
|
||||||
let fontfile_num = Pdf.addobj pdf fontfile in
|
let fontfile_num = Pdf.addobj pdf fontfile in
|
||||||
let module TT = Cpdftruetype in
|
let module TT = Cpdftruetype in
|
||||||
|
let open Pdftext in
|
||||||
|
SimpleFont
|
||||||
|
{fonttype = Truetype;
|
||||||
|
basefont = Printf.sprintf "/%s+%s" name_1 fontname;
|
||||||
|
fontmetrics = None;
|
||||||
|
firstchar = f.TT.firstchar;
|
||||||
|
lastchar = f.TT.lastchar;
|
||||||
|
widths = f.TT.widths;
|
||||||
|
fontdescriptor = Some
|
||||||
|
{ascent = float_of_int f.TT.ascent;
|
||||||
|
descent = float_of_int f.TT.descent;
|
||||||
|
avgwidth = float_of_int f.TT.avgwidth;
|
||||||
|
maxwidth = float_of_int f.TT.maxwidth;
|
||||||
|
flags = f.TT.flags;
|
||||||
|
italicangle = float_of_int f.TT.italicangle;
|
||||||
|
capheight = float_of_int f.TT.capheight;
|
||||||
|
xheight = float_of_int f.TT.xheight;
|
||||||
|
stemv = float_of_int f.TT.stemv;
|
||||||
|
fontbbox = (float_of_int f.TT.minx, float_of_int f.TT.miny,
|
||||||
|
float_of_int f.TT.maxx, float_of_int f.TT.maxy);
|
||||||
|
fontfile = Some (FontFile2 fontfile_num);
|
||||||
|
charset = None;
|
||||||
|
tounicode = None};
|
||||||
|
encoding}
|
||||||
|
(*
|
||||||
let fontdescriptor =
|
let fontdescriptor =
|
||||||
Pdfread.parse_single_object
|
Pdfread.parse_single_object
|
||||||
(Printf.sprintf
|
(Printf.sprintf
|
||||||
|
@ -101,10 +121,4 @@ let embed_truetype pdf ~fontfile ~fontname ~text ~encoding =
|
||||||
"/Widths"
|
"/Widths"
|
||||||
widths
|
widths
|
||||||
in
|
in
|
||||||
Pdf.addobj pdf font
|
Pdf.addobj pdf font*)
|
||||||
|
|
||||||
(* For now, to get a Pdftext.font, put it in an empty PDF and then read it back. This will be fixed later. We just need it so that existing code which uses a charcode extractor can be reused. *)
|
|
||||||
let font_of_truetype ~fontfile ~fontname ~encoding =
|
|
||||||
let pdf = Pdf.empty () in
|
|
||||||
let fontobjnum = embed_truetype pdf ~fontfile ~fontname ~text:"" ~encoding in
|
|
||||||
Pdftext.read_font pdf (Pdf.lookup_obj pdf fontobjnum)
|
|
||||||
|
|
|
@ -3,9 +3,4 @@
|
||||||
that object. *)
|
that object. *)
|
||||||
val embed_truetype :
|
val embed_truetype :
|
||||||
Pdf.t -> fontfile:Pdfio.bytes -> fontname:string -> text:string ->
|
Pdf.t -> fontfile:Pdfio.bytes -> fontname:string -> text:string ->
|
||||||
encoding:Pdftext.encoding -> int
|
encoding:Pdftext.encoding -> Pdftext.font
|
||||||
|
|
||||||
(* Eventually, we will just have this, and a subsetting function. Then we will
|
|
||||||
use Pdftext.write_font to write it. *)
|
|
||||||
val font_of_truetype :
|
|
||||||
fontfile:Pdfio.bytes -> fontname:string -> encoding:Pdftext.encoding -> Pdftext.font
|
|
||||||
|
|
Loading…
Reference in New Issue