sig
  type style = NoStyle | Solid | Dashed | Beveled | Inset | UnderlineStyle
  type border = {
    width : float;
    vradius : float;
    hradius : float;
    style : Pdfannot.style;
    dasharray : int array;
  }
  type subtype =
      Text
    | Link
    | FreeText
    | Line
    | Square
    | Circle
    | Polygon
    | PolyLine
    | Highlight
    | Underline
    | Squiggly
    | StrikeOut
    | Stamp
    | Caret
    | Ink
    | Popup of Pdfannot.t
    | FileAttachment
    | Sound
    | Movie
    | Widget
    | Screen
    | PrinterMark
    | TrapNet
    | Watermark
    | ThreeDee
    | Unknown of string
  and t = {
    subtype : Pdfannot.subtype;
    annot_contents : string option;
    subject : string option;
    rectangle : float * float * float * float;
    border : Pdfannot.border;
    colour : (int * int * int) option;
    annotrest : Pdf.pdfobject;
  }
  val annotations_of_page : Pdf.t -> Pdfpage.t -> Pdfannot.t list
  val add_annotation : Pdf.t -> Pdfpage.t -> Pdfannot.t -> Pdfpage.t
  val make_border :
    ?vradius:float ->
    ?hradius:float ->
    ?style:Pdfannot.style -> ?dasharray:int array -> float -> Pdfannot.border
  val make :
    ?content:string ->
    ?border:Pdfannot.border ->
    ?rectangle:float * float * float * float ->
    ?colour:int * int * int ->
    ?subject:string -> Pdfannot.subtype -> Pdfannot.t
  val transform_annotations :
    Pdf.t -> Pdftransform.transform_matrix -> Pdf.pdfobject -> unit
end