///|
/// Add cpdf add-text lines to selected pages with an already resolved font.
///
/// This ports the document/page-selection layer after font selection: selected
/// one-based pages get page-local replacement callbacks, cpdf shift-coordinate
/// parsing, and page-line emission. Font embedding and existing-font discovery
/// remain separate slices.
pub fn PdfDocument::addtext_pages_with_font(
  self : PdfDocument,
  page_numbers : ArrayView[Int],
  lines : ArrayView[String],
  time : @date.PdfStrftimeTime,
  bookmarks : ArrayView[@bookmark.PdfBookmark],
  font : PdfFont?,
  fontpack : PdfFontPack?,
  fontname : @core.PdfName,
  font_object : @syntax.PdfObject?,
  fontpack_font_objects : ArrayView[Int],
  font_size : Double,
  line_spacing : Double,
  colour : @colour.PdfContentColour,
  position : @geometry.PdfPosition,
  filename? : String = "",
  bates? : Int = 1,
  bates_pad? : Int? = None,
  relative_to_box? : @core.PdfName = pdf_page_mediabox_key(),
  shift? : String = "0 0",
  opacity? : Double = 1.0,
  justification? : @addtext.PdfAddTextJustification = PdfAddTextLeftJustify,
  rotation? : @addtext.PdfAddTextRotation = PdfAddTextRot0,
  midline? : Bool = false,
  topline? : Bool = false,
  outline? : Bool = false,
  line_width? : Double = 1.0,
  underneath? : Bool = false,
  fast? : Bool = false,
  raw? : Bool = false,
  url_border? : Bool = false,
) -> PdfDocument raise @core.PdfError {
  if page_numbers.length() == 0 {
    self
  } else {
    let pages = self.pages_of_pagetree()
    pdf_addtext_validate_page_numbers(
      page_numbers,
      pages.length(),
      "addtext_pages_with_font",
    )
    let shifts = self.parse_coordinates(shift)
    let selected_pages = @core.pdf_number_set(page_numbers)
    let rewritten : Array[@page.PdfPage] = Array(capacity=pages.length())
    for index in 0.. PdfDocument raise @core.PdfError {
  document.addtext_pages_with_font(
    page_numbers,
    lines,
    time,
    bookmarks,
    font,
    fontpack,
    fontname,
    font_object,
    fontpack_font_objects,
    font_size,
    line_spacing,
    colour,
    position,
    filename~,
    bates~,
    bates_pad~,
    relative_to_box~,
    shift~,
    opacity~,
    justification~,
    rotation~,
    midline~,
    topline~,
    outline~,
    line_width~,
    underneath~,
    fast~,
    raw~,
    url_border~,
  )
}