more
This commit is contained in:
parent
1e6e63daba
commit
9224b2883e
|
@ -382,7 +382,8 @@ type args =
|
||||||
mutable creator : string option;
|
mutable creator : string option;
|
||||||
mutable producer : string option;
|
mutable producer : string option;
|
||||||
mutable embedfonts : bool;
|
mutable embedfonts : bool;
|
||||||
mutable change_font_size_shift : string}
|
mutable change_font_size_shift : string;
|
||||||
|
mutable change_font_size_color : float * float * float}
|
||||||
|
|
||||||
let args =
|
let args =
|
||||||
{op = None;
|
{op = None;
|
||||||
|
@ -466,7 +467,8 @@ let args =
|
||||||
producer = None;
|
producer = None;
|
||||||
creator = None;
|
creator = None;
|
||||||
embedfonts = true;
|
embedfonts = true;
|
||||||
change_font_size_shift = "0 0"}
|
change_font_size_shift = "0 0";
|
||||||
|
change_font_size_color = (0., 0., 0.)}
|
||||||
|
|
||||||
let reset_arguments () =
|
let reset_arguments () =
|
||||||
args.op <- None;
|
args.op <- None;
|
||||||
|
@ -1113,25 +1115,25 @@ let setfontsize f =
|
||||||
let setaddtext s =
|
let setaddtext s =
|
||||||
setop (AddText s) ()
|
setop (AddText s) ()
|
||||||
|
|
||||||
|
let parse_color s =
|
||||||
|
match String.lowercase s with
|
||||||
|
| "white" -> 1., 1., 1.
|
||||||
|
| "black" -> 0., 0., 0.
|
||||||
|
| "red" -> 1., 0., 0.
|
||||||
|
| "green" -> 0., 1., 0.
|
||||||
|
| "blue" -> 0., 0., 1.
|
||||||
|
| _ ->
|
||||||
|
let getnum = function
|
||||||
|
| Pdfgenlex.LexInt i -> float i
|
||||||
|
| Pdfgenlex.LexReal f -> f
|
||||||
|
| _ -> error "Bad color"
|
||||||
|
in
|
||||||
|
match Pdfgenlex.lex_string s with
|
||||||
|
| [a;b;c] -> getnum a, getnum b, getnum c
|
||||||
|
| _ -> error "Bad color"
|
||||||
|
|
||||||
let setcolor s =
|
let setcolor s =
|
||||||
let r, g, b =
|
args.color <- parse_color s
|
||||||
match String.lowercase s with
|
|
||||||
| "white" -> 1., 1., 1.
|
|
||||||
| "black" -> 0., 0., 0.
|
|
||||||
| "red" -> 1., 0., 0.
|
|
||||||
| "green" -> 0., 1., 0.
|
|
||||||
| "blue" -> 0., 0., 1.
|
|
||||||
| _ ->
|
|
||||||
let getnum = function
|
|
||||||
| Pdfgenlex.LexInt i -> float i
|
|
||||||
| Pdfgenlex.LexReal f -> f
|
|
||||||
| _ -> error "Bad color"
|
|
||||||
in
|
|
||||||
match Pdfgenlex.lex_string s with
|
|
||||||
| [a;b;c] -> getnum a, getnum b, getnum c
|
|
||||||
| _ -> error "Bad color"
|
|
||||||
in
|
|
||||||
args.color <- r, g, b
|
|
||||||
|
|
||||||
let setopacity o =
|
let setopacity o =
|
||||||
args.opacity <- o
|
args.opacity <- o
|
||||||
|
@ -1532,6 +1534,9 @@ let setchangefontsizeto i =
|
||||||
let setchangefontsizeshift s =
|
let setchangefontsizeshift s =
|
||||||
args.change_font_size_shift <- s
|
args.change_font_size_shift <- s
|
||||||
|
|
||||||
|
let setchangefontsizecolor s =
|
||||||
|
args.change_font_size_color <- parse_color s
|
||||||
|
|
||||||
(* Parse a control file, make an argv, and then make Arg parse it. *)
|
(* Parse a control file, make an argv, and then make Arg parse it. *)
|
||||||
let rec make_control_argv_and_parse filename =
|
let rec make_control_argv_and_parse filename =
|
||||||
control_args := !control_args @ parse_control_file filename
|
control_args := !control_args @ parse_control_file filename
|
||||||
|
@ -2078,7 +2083,9 @@ and specs =
|
||||||
("-fix-prince", Arg.Unit (setop RemoveUnusedResources), "");
|
("-fix-prince", Arg.Unit (setop RemoveUnusedResources), "");
|
||||||
("-extract-text", Arg.Unit (setop ExtractText), "");
|
("-extract-text", Arg.Unit (setop ExtractText), "");
|
||||||
("-change-font-size-to", Arg.Float setchangefontsizeto, "");
|
("-change-font-size-to", Arg.Float setchangefontsizeto, "");
|
||||||
("-change-font-size-shift", Arg.String setchangefontsizeshift, "")]
|
("-change-font-size-shift", Arg.String setchangefontsizeshift, "");
|
||||||
|
("-change-font-size-color", Arg.String setchangefontsizecolor, "")
|
||||||
|
]
|
||||||
|
|
||||||
and usage_msg =
|
and usage_msg =
|
||||||
"Syntax: cpdf <op> <op-specific arguments> [-o <output file>] <input files>\n\n\
|
"Syntax: cpdf <op> <op-specific arguments> [-o <output file>] <input files>\n\n\
|
||||||
|
@ -3192,29 +3199,28 @@ let remove_clipping pdf range =
|
||||||
in
|
in
|
||||||
Cpdf.process_pages remove_clipping_page pdf range
|
Cpdf.process_pages remove_clipping_page pdf range
|
||||||
|
|
||||||
let change_font_size_ops dx dy source_size target_size pdf resources content =
|
let change_font_size_ops (r, g, b) dx dy source_size target_size pdf resources content =
|
||||||
Printf.printf "dx = %f, dy = %f\n" dx dy;
|
|
||||||
let ops = Pdfops.parse_operators pdf resources content in
|
let ops = Pdfops.parse_operators pdf resources content in
|
||||||
let tr = Pdftransform.mktranslate dx dy in
|
let tr = Pdftransform.mktranslate dx dy in
|
||||||
let rec process a = function
|
let rec process a = function
|
||||||
Pdfops.Op_Tf (fontname, size)::t when fabs (size -. source_size) < 0.01 ->
|
Pdfops.Op_Tf (fontname, size)::t when fabs (size -. source_size) < 0.01 ->
|
||||||
process
|
process
|
||||||
(Pdfops.Op_Tf (fontname, target_size)::Pdfops.Op_cm tr::a)
|
(Pdfops.Op_rg (r, g, b)::Pdfops.Op_Tf (fontname, target_size)::Pdfops.Op_cm tr::a)
|
||||||
t
|
t
|
||||||
| h::t -> process (h::a) t
|
| h::t -> process (h::a) t
|
||||||
| [] -> rev a
|
| [] -> rev a
|
||||||
in
|
in
|
||||||
[Pdfops.stream_of_ops (process [] ops)]
|
[Pdfops.stream_of_ops (process [] ops)]
|
||||||
|
|
||||||
let change_font_size pdf range dx dy source_size target_size =
|
let change_font_size pdf range (r, g, b) dx dy source_size target_size =
|
||||||
let change_font_size_page _ page =
|
let change_font_size_page _ page =
|
||||||
let content' =
|
let content' =
|
||||||
change_font_size_ops
|
change_font_size_ops
|
||||||
dx dy source_size target_size pdf
|
(r, g, b) dx dy source_size target_size pdf
|
||||||
page.Pdfpage.resources page.Pdfpage.content
|
page.Pdfpage.resources page.Pdfpage.content
|
||||||
in
|
in
|
||||||
Cpdf.process_xobjects
|
Cpdf.process_xobjects
|
||||||
pdf page (change_font_size_ops dx dy source_size target_size);
|
pdf page (change_font_size_ops (r, g, b) dx dy source_size target_size);
|
||||||
{page with Pdfpage.content = content'}
|
{page with Pdfpage.content = content'}
|
||||||
in
|
in
|
||||||
Cpdf.process_pages change_font_size_page pdf range
|
Cpdf.process_pages change_font_size_page pdf range
|
||||||
|
@ -3973,7 +3979,7 @@ let go () =
|
||||||
let pdf = get_single_pdf args.op false in
|
let pdf = get_single_pdf args.op false in
|
||||||
let range = parse_pagespec pdf (get_pagespec ()) in
|
let range = parse_pagespec pdf (get_pagespec ()) in
|
||||||
let dx, dy = parse_coordinate pdf args.change_font_size_shift in
|
let dx, dy = parse_coordinate pdf args.change_font_size_shift in
|
||||||
write_pdf false (change_font_size pdf range dx dy args.fontsize target_size)
|
write_pdf false (change_font_size pdf range args.change_font_size_color dx dy args.fontsize target_size)
|
||||||
|
|
||||||
let parse_argv () =
|
let parse_argv () =
|
||||||
if args.debug then
|
if args.debug then
|
||||||
|
|
Loading…
Reference in New Issue