sig
  type stream =
      Got of Utility.bytestream
    | ToGet of Pdfio.input * int64 * int64
  type pdfobject =
      Null
    | Boolean of bool
    | Integer of int
    | Real of float
    | String of string
    | Name of string
    | Array of Pdf.pdfobject list
    | Dictionary of (string * Pdf.pdfobject) list
    | Stream of (Pdf.pdfobject * Pdf.stream) Pervasives.ref
    | Indirect of int
  type pdfobjects
  type pdfdoc = {
    mutable major : int;
    mutable minor : int;
    mutable root : int;
    mutable objects : Pdf.pdfobjects;
    mutable trailerdict : Pdf.pdfobject;
  }
  val empty : unit -> Pdf.pdfdoc
  exception PDFError of string
  val getstream : Pdf.pdfobject -> unit
  val getnum : Pdf.pdfobject -> float
  val parse_rectangle : Pdf.pdfobject -> float * float * float * float
  val parse_matrix :
    Pdf.pdfdoc -> string -> Pdf.pdfobject -> Transform.transform_matrix
  val make_matrix : Transform.transform_matrix -> Pdf.pdfobject
  val lookup_obj : Pdf.pdfdoc -> int -> Pdf.pdfobject
  val lookup_fail :
    string -> Pdf.pdfdoc -> string -> Pdf.pdfobject -> Pdf.pdfobject
  val lookup_exception :
    exn -> Pdf.pdfdoc -> string -> Pdf.pdfobject -> Pdf.pdfobject
  val lookup_direct :
    Pdf.pdfdoc -> string -> Pdf.pdfobject -> Pdf.pdfobject option
  val lookup_direct_orelse :
    Pdf.pdfdoc -> string -> string -> Pdf.pdfobject -> Pdf.pdfobject option
  val remove_dict_entry : Pdf.pdfobject -> string -> Pdf.pdfobject
  val replace_dict_entry :
    Pdf.pdfobject -> string -> Pdf.pdfobject -> Pdf.pdfobject
  val add_dict_entry :
    Pdf.pdfobject -> string -> Pdf.pdfobject -> Pdf.pdfobject
  val direct : Pdf.pdfdoc -> Pdf.pdfobject -> Pdf.pdfobject
  val objiter : (int -> Pdf.pdfobject -> unit) -> Pdf.pdfdoc -> unit
  val objiter_gen :
    (int -> int -> Pdf.pdfobject -> unit) -> Pdf.pdfdoc -> unit
  val objmap : (Pdf.pdfobject -> Pdf.pdfobject) -> Pdf.pdfdoc -> unit
  val objcard : Pdf.pdfdoc -> int
  val addobj : Pdf.pdfdoc -> Pdf.pdfobject -> int
  val addobj_given_num : Pdf.pdfdoc -> int * Pdf.pdfobject -> unit
  val map_stream :
    (Pdf.pdfobject -> Pdf.pdfobject) -> Pdf.pdfdoc -> Pdf.pdfdoc
  val iter_stream : (Pdf.pdfobject -> unit) -> Pdf.pdfdoc -> unit
  val renumber_pdfs : Pdf.pdfdoc list -> Pdf.pdfdoc list
  val remove_unreferenced : Pdf.pdfdoc -> unit
  val unique_key : string -> Pdf.pdfobject -> string
  type objectdata = Parsed of Pdf.pdfobject | ToParse
  val changes : Pdf.pdfdoc -> (int, int) Hashtbl.t
  val renumber : (int, int) Hashtbl.t -> Pdf.pdfdoc -> Pdf.pdfdoc
  val is_whitespace : char -> bool
  val recurse_dict :
    (Pdf.pdfobject -> Pdf.pdfobject) ->
    (string * Pdf.pdfobject) list -> Pdf.pdfobject
  val recurse_array :
    (Pdf.pdfobject -> Pdf.pdfobject) -> Pdf.pdfobject list -> Pdf.pdfobject
  val bigarray_of_stream : Pdf.pdfobject -> Utility.bytestream
  val objnumbers : Pdf.pdfdoc -> int list
  val maxobjnum : Pdf.pdfdoc -> int
  val objects_of_list :
    (int -> Pdf.pdfobject) option ->
    (int * (Pdf.objectdata Pervasives.ref * int)) list -> Pdf.pdfobjects
  val objects_referenced :
    string list ->
    (string * Pdf.pdfobject) list -> Pdf.pdfdoc -> Pdf.pdfobject -> int list
  val generate_id : Pdf.pdfdoc -> string -> Pdf.pdfobject
  val is_delimiter : char -> bool
  val page_reference_numbers : Pdf.pdfdoc -> int list
  val reference_numbers_of_dict_entry :
    Pdf.pdfdoc -> Pdf.pdfobject -> string -> int list
  val objects_referenced_and_objects :
    string list ->
    (string * Pdf.pdfobject) list ->
    Pdf.pdfdoc -> Pdf.pdfobject -> (int * Pdf.pdfobject) list
  val catalog_of_pdf : Pdf.pdfdoc -> Pdf.pdfobject
  val find_indirect : string -> Pdf.pdfobject -> int option
  val renumber_object_parsed :
    Pdf.pdfdoc -> (int, int) Hashtbl.t -> Pdf.pdfobject -> Pdf.pdfobject
  val nametree_lookup :
    Pdf.pdfdoc -> Pdf.pdfobject -> Pdf.pdfobject -> Pdf.pdfobject option
  val contents_of_nametree :
    Pdf.pdfdoc -> Pdf.pdfobject -> (Pdf.pdfobject * Pdf.pdfobject) list
  val set_streamobjects : Pdf.pdfdoc -> int list -> unit
  val get_streamobjects : Pdf.pdfdoc -> int list
  val deep_copy : Pdf.pdfdoc -> Pdf.pdfdoc
end