beginning JSON annotations
This commit is contained in:
parent
ec14b3ab9c
commit
e918630ea4
58
cpdf.ml
58
cpdf.ml
|
@ -2640,64 +2640,6 @@ let get_annotations encoding pdf =
|
|||
pages
|
||||
(ilist 1 (length pages)))
|
||||
|
||||
let list_annotations_more pdf =
|
||||
let pages = Pdfpage.pages_of_pagetree pdf in
|
||||
iter2
|
||||
(fun page pagenumber ->
|
||||
iter
|
||||
(function annot ->
|
||||
let print_annot annot =
|
||||
let annot_type_string =
|
||||
match annot.Pdfannot.subtype with
|
||||
| Pdfannot.Stamp -> "Stamp"
|
||||
| Pdfannot.Text -> "Text"
|
||||
| Pdfannot.Link -> "Link"
|
||||
| Pdfannot.FreeText -> "FreeText"
|
||||
| Pdfannot.Line -> "Line"
|
||||
| Pdfannot.Square -> "Square"
|
||||
| Pdfannot.Circle -> "Circle"
|
||||
| Pdfannot.Polygon -> "Polygon"
|
||||
| Pdfannot.PolyLine -> "PolyLine"
|
||||
| Pdfannot.Highlight -> "Highlight"
|
||||
| Pdfannot.Underline -> "Underline"
|
||||
| Pdfannot.Squiggly -> "Squiggly"
|
||||
| Pdfannot.StrikeOut -> "StrikeOut"
|
||||
| Pdfannot.Caret -> "Caret"
|
||||
| Pdfannot.Ink -> "Ink"
|
||||
| Pdfannot.Popup _ -> "Popup"
|
||||
| Pdfannot.FileAttachment -> "FileAttachment"
|
||||
| Pdfannot.Sound -> "Sound"
|
||||
| Pdfannot.Movie -> "Movie"
|
||||
| Pdfannot.Widget -> "Widget"
|
||||
| Pdfannot.Screen -> "Screen"
|
||||
| Pdfannot.PrinterMark -> "PrinterMark"
|
||||
| Pdfannot.TrapNet -> "TrapNet"
|
||||
| Pdfannot.Watermark -> "Watermark"
|
||||
| Pdfannot.ThreeDee -> "ThreeDee"
|
||||
| Pdfannot.Unknown -> "Unknown"
|
||||
in let subject =
|
||||
match annot.Pdfannot.subject with
|
||||
| Some s -> s
|
||||
| None -> ""
|
||||
in let contents =
|
||||
match annot.Pdfannot.annot_contents with
|
||||
| Some s -> s
|
||||
| None -> ""
|
||||
in
|
||||
Printf.printf "Page: %i\n" pagenumber;
|
||||
Printf.printf "Subtype: %s\n" annot_type_string;
|
||||
Printf.printf "Subject: %s\n" subject;
|
||||
Printf.printf "Contents: %s\n" contents;
|
||||
in
|
||||
match annot.Pdfannot.subtype with
|
||||
| Pdfannot.Popup annot -> print_annot annot
|
||||
| _ -> print_annot annot
|
||||
)
|
||||
(Pdfannot.annotations_of_page pdf page))
|
||||
pages
|
||||
(ilist 1 (length pages));
|
||||
flprint "" (* flush *)
|
||||
|
||||
(* Equalise the page lengths of two PDFs by chopping or extending the first one.
|
||||
*)
|
||||
let equalise_lengths a b =
|
||||
|
|
3
cpdf.mli
3
cpdf.mli
|
@ -303,9 +303,6 @@ val padmultiple : int -> Pdf.t -> Pdf.t
|
|||
(** List the annotations to standard output in a given encoding. See cpdfmanual.pdf for the format details. *)
|
||||
val list_annotations : encoding -> Pdf.t -> unit
|
||||
|
||||
(** The same, but giving more information. Deprecated *)
|
||||
val list_annotations_more : Pdf.t -> unit
|
||||
|
||||
(** Return the annotations as a (pagenumber, content) list *)
|
||||
val get_annotations : encoding -> Pdf.t -> (int * string) list
|
||||
|
||||
|
|
|
@ -107,7 +107,6 @@ type op =
|
|||
| DumpAttachedFiles
|
||||
| RemoveAnnotations
|
||||
| ListAnnotations
|
||||
| ListAnnotationsMore
|
||||
| CopyAnnotations of string
|
||||
| Merge
|
||||
| Split
|
||||
|
@ -233,7 +232,6 @@ let string_of_op = function
|
|||
| DumpAttachedFiles -> "DumpAttachedFiles"
|
||||
| RemoveAnnotations -> "RemoveAnnotations"
|
||||
| ListAnnotations -> "ListAnnotations"
|
||||
| ListAnnotationsMore -> "ListAnnotationsMore"
|
||||
| CopyAnnotations _ -> "CopyAnnotations"
|
||||
| Merge -> "Merge"
|
||||
| Split -> "Split"
|
||||
|
@ -465,7 +463,7 @@ type args =
|
|||
mutable impose_margin : float;
|
||||
mutable impose_spacing : float;
|
||||
mutable impose_linewidth : float;
|
||||
mutable bookmarks_json : bool}
|
||||
mutable format_json : bool}
|
||||
|
||||
let args =
|
||||
{op = None;
|
||||
|
@ -579,7 +577,7 @@ let args =
|
|||
impose_margin = 0.;
|
||||
impose_spacing = 0.;
|
||||
impose_linewidth = 0.;
|
||||
bookmarks_json = false}
|
||||
format_json = false}
|
||||
|
||||
let reset_arguments () =
|
||||
args.op <- None;
|
||||
|
@ -678,7 +676,7 @@ let reset_arguments () =
|
|||
args.impose_margin <- 0.;
|
||||
args.impose_spacing <- 0.;
|
||||
args.impose_linewidth <- 0.;
|
||||
args.bookmarks_json <- false
|
||||
args.format_json <- false
|
||||
(* Do not reset original_filename or cpdflin or was_encrypted or
|
||||
* was_decrypted_with_owner or recrypt or producer or creator or path_to_* or
|
||||
* gs_malformed or gs_quiet, since we want these to work across ANDs. Or
|
||||
|
@ -727,7 +725,7 @@ bans list in the input file, the operation cannot proceed. Other operations
|
|||
cannot proceed at all without owner password. *)
|
||||
let banned banlist = function
|
||||
| Fonts | Info | Metadata | PageInfo | Revisions | CountPages
|
||||
| ListAttachedFiles | ListAnnotationsMore | ListAnnotations
|
||||
| ListAttachedFiles | ListAnnotations
|
||||
| ListBookmarks | ImageResolution _ | MissingFonts
|
||||
| PrintPageLabels | Clean | Compress | Decompress
|
||||
| RemoveUnusedResources | ChangeId | CopyId _ | ListSpotColours | Version
|
||||
|
@ -1066,11 +1064,15 @@ let setaddbookmarks s =
|
|||
|
||||
let setaddbookmarksjson s =
|
||||
setop (AddBookmarks s) ();
|
||||
args.bookmarks_json <- true
|
||||
args.format_json <- true
|
||||
|
||||
let setlistbookmarksjson s =
|
||||
let setlistbookmarksjson () =
|
||||
setop ListBookmarks ();
|
||||
args.bookmarks_json <- true
|
||||
args.format_json <- true
|
||||
|
||||
let setlistannotationsjson () =
|
||||
setop ListBookmarks ();
|
||||
args.format_json <- true
|
||||
|
||||
let setstampon f =
|
||||
setop (StampOn f) ();
|
||||
|
@ -2025,6 +2027,9 @@ and specs =
|
|||
("-list-annotations",
|
||||
Arg.Unit (setop ListAnnotations),
|
||||
" List annotations");
|
||||
("-list-annotations-json",
|
||||
Arg.Unit setlistannotationsjson,
|
||||
" List annotations in JSON format");
|
||||
("-copy-annotations",
|
||||
Arg.String setcopyannotations,
|
||||
" Copy annotations from given file");
|
||||
|
@ -3448,7 +3453,7 @@ let go () =
|
|||
| (_, pagespec, _, _, _, _)::_, _ ->
|
||||
let pdf = get_single_pdf args.op true in
|
||||
let range = parse_pagespec_allow_empty pdf pagespec in
|
||||
Cpdf.list_bookmarks args.bookmarks_json args.encoding range pdf (Pdfio.output_of_channel stdout);
|
||||
Cpdf.list_bookmarks args.format_json args.encoding range pdf (Pdfio.output_of_channel stdout);
|
||||
flush stdout
|
||||
| _ -> error "list-bookmarks: bad command line"
|
||||
end
|
||||
|
@ -3835,8 +3840,6 @@ let go () =
|
|||
end
|
||||
| Some ListAnnotations ->
|
||||
Cpdf.list_annotations args.encoding (get_single_pdf args.op true)
|
||||
| Some ListAnnotationsMore ->
|
||||
Cpdf.list_annotations_more (get_single_pdf args.op true)
|
||||
| Some Shift ->
|
||||
let pdf = get_single_pdf args.op false in
|
||||
let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in
|
||||
|
@ -3967,7 +3970,7 @@ let go () =
|
|||
args.relative_to_cropbox args.underneath range pdf)
|
||||
| Some (AddBookmarks file) ->
|
||||
write_pdf false
|
||||
(Cpdf.add_bookmarks ~json:args.bookmarks_json true (Pdfio.input_of_channel (open_in_bin file))
|
||||
(Cpdf.add_bookmarks ~json:args.format_json true (Pdfio.input_of_channel (open_in_bin file))
|
||||
(get_single_pdf args.op false))
|
||||
| Some RemoveBookmarks ->
|
||||
write_pdf false (Pdfmarks.remove_bookmarks (get_single_pdf args.op false))
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
%Document -collate
|
||||
%Document -impose and friends (inc. 0-w, 0-h for long ones, how lines scale etc., undefined if pages different sizes)
|
||||
%Document -bookmarks-json including mentioning UTF8
|
||||
%Document -list-annotations-json and -add-annotations-json
|
||||
|
||||
\documentclass{book}
|
||||
% Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf etc.
|
||||
|
|
Loading…
Reference in New Issue