mirror of
				https://github.com/johnwhitington/cpdf-source.git
				synced 2025-06-05 22:09:39 +02:00 
			
		
		
		
	Linearization on outputs done.
This commit is contained in:
		@@ -8,8 +8,6 @@ let version_date = "(unreleased, 16th September 2014)"
 | 
			
		||||
open Pdfutil
 | 
			
		||||
open Pdfio
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(* Wrap up the file reading functions to exit with code 1 when an encryption
 | 
			
		||||
problem occurs. This happens when object streams are in an encrypted document
 | 
			
		||||
and so it can't be read without the right password... The existing error
 | 
			
		||||
@@ -1797,7 +1795,7 @@ let really_write_pdf ?(encryption = None) mk_id pdf outname =
 | 
			
		||||
                raise (Pdf.PDFError "linearizer failed")
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
let write_pdf ?(encryption = None) mk_id pdf =
 | 
			
		||||
let write_pdf ?(encryption = None) ?(is_decompress=false) mk_id pdf =
 | 
			
		||||
  if args.create_objstm && not args.keepversion
 | 
			
		||||
    then pdf.Pdf.minor <- max pdf.Pdf.minor 5;
 | 
			
		||||
  let mk_id = args.makenewid || mk_id in
 | 
			
		||||
@@ -1808,10 +1806,14 @@ let write_pdf ?(encryption = None) mk_id pdf =
 | 
			
		||||
        let outname = writing_ok outname in
 | 
			
		||||
          begin match encryption with
 | 
			
		||||
            None ->
 | 
			
		||||
              let pdf = Cpdf.recompress_pdf <| nobble pdf in
 | 
			
		||||
                if args.squeeze then Cpdf.squeeze pdf;
 | 
			
		||||
                Pdf.remove_unreferenced pdf;
 | 
			
		||||
                really_write_pdf mk_id pdf outname
 | 
			
		||||
              ignore (nobble pdf);
 | 
			
		||||
              if not is_decompress then
 | 
			
		||||
                begin
 | 
			
		||||
                  ignore (Cpdf.recompress_pdf pdf);
 | 
			
		||||
                  if args.squeeze then Cpdf.squeeze pdf;
 | 
			
		||||
                  Pdf.remove_unreferenced pdf
 | 
			
		||||
                end;
 | 
			
		||||
              really_write_pdf mk_id pdf outname
 | 
			
		||||
          | Some _ ->
 | 
			
		||||
              really_write_pdf ~encryption mk_id pdf outname
 | 
			
		||||
          end
 | 
			
		||||
@@ -1819,9 +1821,13 @@ let write_pdf ?(encryption = None) mk_id pdf =
 | 
			
		||||
        let temp = Filename.temp_file "cpdflin" ".pdf" in
 | 
			
		||||
          begin match encryption with
 | 
			
		||||
            None -> 
 | 
			
		||||
              let pdf = Cpdf.recompress_pdf <| nobble pdf in
 | 
			
		||||
                if args.squeeze then Cpdf.squeeze pdf;
 | 
			
		||||
                Pdf.remove_unreferenced pdf;
 | 
			
		||||
              ignore (nobble pdf);
 | 
			
		||||
              if not is_decompress then
 | 
			
		||||
                begin
 | 
			
		||||
                  ignore (Cpdf.recompress_pdf pdf);
 | 
			
		||||
                  if args.squeeze then Cpdf.squeeze pdf;
 | 
			
		||||
                  Pdf.remove_unreferenced pdf
 | 
			
		||||
                end;
 | 
			
		||||
                really_write_pdf ~encryption mk_id pdf temp;
 | 
			
		||||
          | Some _ ->
 | 
			
		||||
              really_write_pdf ~encryption mk_id pdf temp
 | 
			
		||||
@@ -2949,16 +2955,7 @@ let go () =
 | 
			
		||||
             try Pdfcodec.decode_pdfstream_until_unknown pdf stream with
 | 
			
		||||
               e -> Printf.eprintf "Decode failure: %s. Carrying on...\n" (Printexc.to_string e); ())
 | 
			
		||||
          pdf;
 | 
			
		||||
        begin match args.out with
 | 
			
		||||
        | NoOutputSpecified ->
 | 
			
		||||
            error "no output specified"
 | 
			
		||||
        | File outname ->
 | 
			
		||||
            let outname = writing_ok outname in
 | 
			
		||||
              Pdfwrite.pdf_to_file_options (*FIXLIN args.linearize*) false None args.makenewid pdf outname
 | 
			
		||||
        | Stdout ->
 | 
			
		||||
            Pdfwrite.pdf_to_channel (*FIXLIN args.linearize *) false None args.makenewid pdf stdout;
 | 
			
		||||
            flush stdout
 | 
			
		||||
        end
 | 
			
		||||
        write_pdf ~is_decompress:true args.makenewid pdf
 | 
			
		||||
  | Some Compress ->
 | 
			
		||||
      let pdf = get_single_pdf (Some Compress) false in
 | 
			
		||||
        if args.remove_duplicate_streams then
 | 
			
		||||
@@ -3129,18 +3126,10 @@ let go () =
 | 
			
		||||
      begin match args.inputs, args.out with
 | 
			
		||||
      | [(k, _, _, _, _) as input], File s ->
 | 
			
		||||
          let pdf = get_pdf_from_input_kind input args.op k in
 | 
			
		||||
            let s = writing_ok s in
 | 
			
		||||
              Pdfwrite.pdf_to_file_options
 | 
			
		||||
                ~preserve_objstm:args.preserve_objstm
 | 
			
		||||
                ~generate_objstm:args.create_objstm
 | 
			
		||||
                (*FIXLIN args.linearize*) false None true pdf s
 | 
			
		||||
            write_pdf true pdf
 | 
			
		||||
      | [(k, _, _, _, _) as input], Stdout ->
 | 
			
		||||
          let pdf = get_pdf_from_input_kind input args.op k in
 | 
			
		||||
            Pdfwrite.pdf_to_channel
 | 
			
		||||
              ~preserve_objstm:args.preserve_objstm
 | 
			
		||||
              ~generate_objstm:args.create_objstm
 | 
			
		||||
              (*FIXLIN args.linearize*) false None true pdf stdout;
 | 
			
		||||
            flush stdout
 | 
			
		||||
            write_pdf true pdf
 | 
			
		||||
      | _ -> error "ChangeId: exactly one input file and output file required."
 | 
			
		||||
      end
 | 
			
		||||
  | Some RemoveId ->
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user