Use -objstm-create for squeeze

This commit is contained in:
John Whitington 2014-09-20 20:16:08 +01:00
parent 2fd9c2ec0f
commit ed90fb4c92
1 changed files with 22 additions and 3 deletions

View File

@ -1014,7 +1014,8 @@ let setscalecontents f =
args.position <- Cpdf.Diagonal (* Will be center *) args.position <- Cpdf.Diagonal (* Will be center *)
let setsqueeze () = let setsqueeze () =
args.squeeze <- true args.squeeze <- true;
args.create_objstm <- true
(* Parsing the control file *) (* Parsing the control file *)
let rec getuntilendquote prev = function let rec getuntilendquote prev = function
@ -1772,9 +1773,17 @@ let pdfobjeq pdf x y =
and y = Pdf.lookup_obj pdf y in and y = Pdf.lookup_obj pdf y in
begin match x with Pdf.Stream _ -> Pdf.getstream x | _ -> () end; begin match x with Pdf.Stream _ -> Pdf.getstream x | _ -> () end;
begin match y with Pdf.Stream _ -> Pdf.getstream y | _ -> () end; begin match y with Pdf.Stream _ -> Pdf.getstream y | _ -> () end;
compare x y match x with
(*Pdf.Dictionary _
when
Pdf.lookup_direct pdf "/Type" x = Some (Pdf.Name "/Page")
->
(-1)*) (* FIXME *)
| _ -> compare x y
let squeeze pdf = (* FIXME: We need to be able to do squeeze on encrypted files, which at the
* moment thinks it has a permissions problem. *)
let really_squeeze pdf =
let objs = ref [] in let objs = ref [] in
Pdf.objiter (fun objnum _ -> objs := objnum :: !objs) pdf; Pdf.objiter (fun objnum _ -> objs := objnum :: !objs) pdf;
let toprocess = let toprocess =
@ -1802,6 +1811,16 @@ let squeeze pdf =
pdf.Pdf.objects <- !pdfr.Pdf.objects; pdf.Pdf.objects <- !pdfr.Pdf.objects;
pdf.Pdf.trailerdict <- !pdfr.Pdf.trailerdict pdf.Pdf.trailerdict <- !pdfr.Pdf.trailerdict
(* We run squeeze enough times to reach a fixed point in the cardinality of the
* object map *)
let squeeze pdf =
let n = ref (Pdf.objcard pdf) in
Printf.printf "Beginning squeeze: %i objects\n%!" (Pdf.objcard pdf);
while !n > (ignore (really_squeeze pdf); Pdf.objcard pdf) do
n := Pdf.objcard pdf;
Printf.printf "Squeezing... Down to %i objects\n%!" (Pdf.objcard pdf);
done
let write_pdf mk_id pdf = let write_pdf mk_id pdf =
if args.create_objstm && not args.keepversion if args.create_objstm && not args.keepversion
then pdf.Pdf.minor <- max pdf.Pdf.minor 5; then pdf.Pdf.minor <- max pdf.Pdf.minor 5;