sig
  type encoding = Raw | UTF8 | Stripped
  exception SoftError of string
  exception HardError of string
  type position =
      PosCentre of float * float
    | PosLeft of float * float
    | PosRight of float * float
    | Top of float
    | TopLeft of float
    | TopRight of float
    | Left of float
    | BottomLeft of float
    | Bottom of float
    | BottomRight of float
    | Right of float
    | Diagonal
    | ReverseDiagonal
    | Centre
  val print_pdf_objs : Pdf.t -> unit
  val endpage_io :
    ?revision:int -> Pdfio.input -> string option -> string option -> int
  val process_pages :
    (int -> Pdfpage.t -> Pdfpage.t) -> Pdf.t -> int list -> Pdf.t
  val iter_pages : (int -> Pdfpage.t -> unit) -> Pdf.t -> int list -> unit
  val map_pages : (int -> Pdfpage.t -> 'a) -> Pdf.t -> int list -> 'a list
  val parse_pagespec : Pdf.t -> string -> int list
  val string_of_pagespec : Pdf.t -> int list -> string
  val validate_pagespec : string -> bool
  val parse_pagespec_without_pdf : string -> int list
  val recompress_pdf : Pdf.t -> Pdf.t
  val decompress_pdf : Pdf.t -> Pdf.t
  val copy_id : bool -> Pdf.t -> Pdf.t -> Pdf.t
  val set_pdf_info :
    ?xmp_also:bool ->
    ?xmp_just_set:bool -> string * Pdf.pdfobject * int -> Pdf.t -> Pdf.t
  val get_xmp_info : Pdf.t -> string -> string
  val set_viewer_preference : string * Pdf.pdfobject * int -> Pdf.t -> Pdf.t
  val set_page_layout : Pdf.t -> string -> Pdf.t
  val set_page_mode : Pdf.t -> string -> Pdf.t
  val set_open_action : Pdf.t -> bool -> int -> Pdf.t
  val set_version : int -> Pdf.t -> unit
  val get_info_utf8 : Pdf.t -> string -> string
  val output_info : Cpdf.encoding -> Pdf.t -> unit
  val output_xmp_info : Cpdf.encoding -> Pdf.t -> unit
  val presentation :
    int list ->
    string option ->
    float option -> bool -> bool -> int -> float -> Pdf.t -> Pdf.t
  val attach_file :
    ?memory:Pdfio.bytes -> bool -> int option -> Pdf.t -> string -> Pdf.t
  val remove_attached_files : Pdf.t -> Pdf.t
  type attachment = {
    name : string;
    pagenumber : int;
    data : unit -> Pdfio.bytes;
  }
  val list_attached_files : Pdf.t -> Cpdf.attachment list
  val parse_bookmark_file : bool -> Pdf.t -> Pdfio.input -> Pdfmarks.t list
  val add_bookmarks : bool -> Pdfio.input -> Pdf.t -> Pdf.t
  val list_bookmarks :
    Cpdf.encoding -> int list -> Pdf.t -> Pdfio.output -> unit
  val set_metadata : bool -> string -> Pdf.t -> Pdf.t
  val set_metadata_from_bytes : bool -> Pdfio.bytes -> Pdf.t -> Pdf.t
  val remove_metadata : Pdf.t -> Pdf.t
  val get_metadata : Pdf.t -> Pdfio.bytes option
  val print_metadata : Pdf.t -> unit
  val set_metadata_date : Pdf.t -> string -> Pdf.t
  val create_metadata : Pdf.t -> Pdf.t
  val combine_pages : bool -> Pdf.t -> Pdf.t -> bool -> bool -> bool -> Pdf.t
  val stamp :
    bool ->
    Cpdf.position ->
    bool ->
    bool -> bool -> bool -> bool -> int list -> Pdf.t -> Pdf.t -> Pdf.t
  val split_on_bookmarks : Pdf.t -> int -> Pdf.t list
  val print_fonts : Pdf.t -> unit
  val list_fonts : Pdf.t -> (int * string * string * string * string) list
  val expand_date : string -> string
  val string_of_position : Cpdf.position -> string
  type orientation = Horizontal | Vertical | VerticalDown
  type justification = LeftJustify | CentreJustify | RightJustify
  val calculate_position :
    bool ->
    float ->
    float * float * float * float ->
    Cpdf.orientation -> Cpdf.position -> float * float * float
  val addtexts :
    bool ->
    float ->
    bool ->
    bool ->
    string ->
    Pdftext.standard_font option ->
    bool ->
    int ->
    int option ->
    float * float * float ->
    Cpdf.position ->
    float ->
    float ->
    bool ->
    string ->
    int list ->
    Cpdf.orientation ->
    bool ->
    float ->
    Cpdf.justification ->
    bool -> bool -> string -> float option -> Pdf.t -> Pdf.t
  val metrics_howmany : unit -> int
  val metrics_text : int -> string
  val metrics_x : int -> float
  val metrics_y : int -> float
  val metrics_rot : int -> float
  val metrics_baseline_adjustment : unit -> float
  val removetext : int list -> Pdf.t -> Pdf.t
  val output_page_info : Pdf.t -> int list -> unit
  val hasbox : Pdf.t -> int -> string -> bool
  val crop_pdf :
    ?box:string ->
    (float * float * float * float) list -> Pdf.t -> int list -> Pdf.t
  val hard_box : Pdf.t -> int list -> string -> bool -> bool -> Pdf.t
  val set_mediabox :
    (float * float * float * float) list -> Pdf.t -> int list -> Pdf.t
  val setBox :
    string -> float -> float -> float -> float -> Pdf.t -> int list -> Pdf.t
  val remove_cropping_pdf : Pdf.t -> int list -> Pdf.t
  val remove_trim_pdf : Pdf.t -> int list -> Pdf.t
  val remove_bleed_pdf : Pdf.t -> int list -> Pdf.t
  val remove_art_pdf : Pdf.t -> int list -> Pdf.t
  val rotate_pdf : int -> Pdf.t -> int list -> Pdf.t
  val rotate_pdf_by : int -> Pdf.t -> int list -> Pdf.t
  val rotate_contents : ?fast:bool -> float -> Pdf.t -> int list -> Pdf.t
  val upright : ?fast:bool -> int list -> Pdf.t -> Pdf.t
  val vflip_pdf : ?fast:bool -> Pdf.t -> int list -> Pdf.t
  val hflip_pdf : ?fast:bool -> Pdf.t -> int list -> Pdf.t
  val shift_pdf :
    ?fast:bool -> (float * float) list -> Pdf.t -> int list -> Pdf.t
  val scale_pdf :
    ?fast:bool -> (float * float) list -> Pdf.t -> int list -> Pdf.t
  val scale_to_fit_pdf :
    ?fast:bool ->
    Cpdf.position ->
    float -> (float * float) list -> '-> Pdf.t -> int list -> Pdf.t
  val scale_contents :
    ?fast:bool -> Cpdf.position -> float -> Pdf.t -> int list -> Pdf.t
  val padbefore : ?padwith:Pdf.t -> int list -> Pdf.t -> Pdf.t
  val padafter : ?padwith:Pdf.t -> int list -> Pdf.t -> Pdf.t
  val padmultiple : int -> Pdf.t -> Pdf.t
  val list_annotations : Cpdf.encoding -> Pdf.t -> unit
  val list_annotations_more : Pdf.t -> unit
  val get_annotations : Cpdf.encoding -> Pdf.t -> (int * string) list
  val copy_annotations : int list -> Pdf.t -> Pdf.t -> Pdf.t
  val remove_annotations : int list -> Pdf.t -> Pdf.t
  val twoup_stack : bool -> Pdf.t -> Pdf.t
  val twoup : bool -> Pdf.t -> Pdf.t
  val blank_document : float -> float -> int -> Pdf.t
  val blank_document_paper : Pdfpaper.t -> int -> Pdf.t
  val add_page_labels :
    Pdf.t ->
    Pdfpagelabels.labelstyle -> string option -> int -> int list -> unit
  val thinlines : int list -> float -> Pdf.t -> Pdf.t
  val blacktext : float * float * float -> int list -> Pdf.t -> Pdf.t
  val blacklines : float * float * float -> int list -> Pdf.t -> Pdf.t
  val blackfills : float * float * float -> int list -> Pdf.t -> Pdf.t
  val draft : string option -> bool -> int list -> Pdf.t -> Pdf.t
  val squeeze : ?logto:string -> Pdf.t -> unit
  val process_xobjects :
    Pdf.t ->
    Pdfpage.t ->
    (Pdf.t -> Pdf.pdfobject -> Pdf.pdfobject list -> Pdf.pdfobject list) ->
    unit
  val custom_csp1 : Pdf.t -> Pdf.t
  val custom_csp2 : float -> Pdf.t -> Pdf.t
  val nobble_page : Pdf.t -> '-> Pdfpage.t -> Pdfpage.t
  val find_cpdflin : string option -> string
  val call_cpdflin : string -> string -> string -> string -> int
  val debug : bool Pervasives.ref
  val extract_text : float option -> Pdf.t -> int list -> string
end