Extend -draft to remove only given images with -draft-remove-only

This commit is contained in:
John Whitington
2019-07-09 17:09:29 +01:00
parent cdf0950af1
commit ff846fc84d
2 changed files with 16 additions and 13 deletions

28
cpdf.ml
View File

@ -3895,18 +3895,20 @@ let substitute boxes =
[] []
(* Remove references to images from a graphics stream. *) (* Remove references to images from a graphics stream. *)
let rec remove_images_stream boxes pdf resources prev = function let rec remove_images_stream onlyremove boxes pdf resources prev = function
| [] -> rev prev | [] -> rev prev
| (Pdfops.Op_Do name) as h::t -> | (Pdfops.Op_Do name) as h::t ->
if xobject_isimage pdf resources name if xobject_isimage pdf resources name && (match onlyremove with None -> true | Some x -> x = name)
then remove_images_stream boxes pdf resources (substitute boxes @ prev) t then remove_images_stream onlyremove boxes pdf resources (substitute boxes @ prev) t
else remove_images_stream boxes pdf resources (h::prev) t else remove_images_stream onlyremove boxes pdf resources (h::prev) t
| Pdfops.InlineImage _::t -> | Pdfops.InlineImage _ as h::t ->
remove_images_stream boxes pdf resources (substitute boxes @ prev) t if onlyremove <> None
then remove_images_stream onlyremove boxes pdf resources (h::prev) t
else remove_images_stream onlyremove boxes pdf resources (substitute boxes @ prev) t
| h::t -> | h::t ->
remove_images_stream boxes pdf resources (h::prev) t remove_images_stream onlyremove boxes pdf resources (h::prev) t
let rec process_form_xobject boxes pdf form = let rec process_form_xobject onlyremove boxes pdf form =
let form = Pdf.direct pdf form in let form = Pdf.direct pdf form in
let page = let page =
{Pdfpage.content = [form]; {Pdfpage.content = [form];
@ -3920,7 +3922,7 @@ let rec process_form_xobject boxes pdf form =
Pdfpage.rest = Pdf.Dictionary []} Pdfpage.rest = Pdf.Dictionary []}
in in
let page', pdf = let page', pdf =
remove_images_page boxes pdf page remove_images_page onlyremove boxes pdf page
in in
let form' = let form' =
match form with match form with
@ -3941,7 +3943,7 @@ let rec process_form_xobject boxes pdf form =
form', pdf form', pdf
(* Remove images from a page. *) (* Remove images from a page. *)
and remove_images_page boxes pdf page = and remove_images_page onlyremove boxes pdf page =
let isform pdf xobj = let isform pdf xobj =
match Pdf.lookup_direct pdf "/Subtype" xobj with Some (Pdf.Name "/Form") -> true | _ -> false match Pdf.lookup_direct pdf "/Subtype" xobj with Some (Pdf.Name "/Form") -> true | _ -> false
in in
@ -3959,7 +3961,7 @@ and remove_images_page boxes pdf page =
in let outputs = ref [] in in let outputs = ref [] in
iter iter
(fun p -> (fun p ->
let p', pdf' = process_form_xobject boxes !pdf p in let p', pdf' = process_form_xobject onlyremove boxes !pdf p in
pdf := pdf'; pdf := pdf';
outputs =| p') outputs =| p')
pointers; pointers;
@ -3977,7 +3979,7 @@ and remove_images_page boxes pdf page =
Pdf.add_dict_entry page.Pdfpage.resources "/XObject" newdict, pdf Pdf.add_dict_entry page.Pdfpage.resources "/XObject" newdict, pdf
in in
let content' = let content' =
remove_images_stream boxes pdf page.Pdfpage.resources [] remove_images_stream onlyremove boxes pdf page.Pdfpage.resources []
(Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content) (Pdfops.parse_operators pdf page.Pdfpage.resources page.Pdfpage.content)
in in
{page with {page with
@ -3997,7 +3999,7 @@ let draft onlyremove boxes range pdf =
(fun p pagenum -> (fun p pagenum ->
let p', pdf' = let p', pdf' =
if mem pagenum range if mem pagenum range
then remove_images_page boxes !pdf p then remove_images_page onlyremove boxes !pdf p
else p, !pdf else p, !pdf
in in
pdf := pdf'; pdf := pdf';

View File

@ -25,6 +25,7 @@
%FIXME: Explain in key places that you probably want UTF8 a lot %FIXME: Explain in key places that you probably want UTF8 a lot
%FIXME: Document new -create-pdf functionality %FIXME: Document new -create-pdf functionality
%FIXME: Explain fast more / better and list things it works on %FIXME: Explain fast more / better and list things it works on
%FIXME: Document new -draft-remove-only functionality for deleting images
\documentclass{book} \documentclass{book}
\usepackage{palatino} \usepackage{palatino}