///|
/// Add all cpdf add-text lines to one page using cpdf paragraph advancement.
///
/// This ports the outer per-line loop around cpdf's local `addtext` call:
/// initial multi-line offsets, midline/topline baseline adjustment, repeated
/// line emission, and rotation-dependent line advancement.
pub fn PdfDocument::addtext_page_lines(
self : PdfDocument,
page : @page.PdfPage,
time : @date.PdfStrftimeTime,
lines : ArrayView[String],
replacements : ArrayView[(String, () -> String)],
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,
relative_to_box? : @core.PdfName = pdf_page_mediabox_key(),
opacity? : Double = 1.0,
justification? : @addtext.PdfAddTextJustification = PdfAddTextLeftJustify,
rotation? : @addtext.PdfAddTextRotation = PdfAddTextRot0,
midline? : Bool = false,
topline? : Bool = false,
shift_x? : Double = 0.0,
shift_y? : Double = 0.0,
outline? : Bool = false,
line_width? : Double = 1.0,
underneath? : Bool = false,
fast? : Bool = false,
raw? : Bool = false,
url_border? : Bool = false,
) -> @page.PdfPage raise @core.PdfError {
let (initial_h_offset, initial_v_offset) = @addtext.pdf_addtext_initial_line_offsets(
position,
lines.length(),
line_spacing,
font_size,
)
let (baseline_h_offset, baseline_v_offset) = pdf_addtext_baseline_offsets(
font, font_size, position, rotation, midline, topline,
)
let advance = @addtext.pdf_addtext_line_advance(
rotation, line_spacing, font_size,
)
let mut horizontal_offset = initial_h_offset + baseline_h_offset
let mut vertical_offset = initial_v_offset + baseline_v_offset
let mut output = page
for line in lines {
output = self.addtext_line_page(
output,
time,
lines,
replacements,
font,
fontpack,
fontname,
font_object,
fontpack_font_objects,
font_size,
line,
colour,
position,
relative_to_box~,
horizontal_offset~,
vertical_offset~,
shift_x~,
shift_y~,
opacity~,
justification~,
rotation~,
outline~,
line_width~,
underneath~,
fast~,
raw~,
url_border~,
)
horizontal_offset += advance.0
vertical_offset += advance.1
}
output
}
///|
/// Compatibility wrapper for `PdfDocument::addtext_page_lines`.
pub fn pdf_addtext_page_lines(
document : PdfDocument,
page : @page.PdfPage,
time : @date.PdfStrftimeTime,
lines : ArrayView[String],
replacements : ArrayView[(String, () -> String)],
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,
relative_to_box? : @core.PdfName = pdf_page_mediabox_key(),
opacity? : Double = 1.0,
justification? : @addtext.PdfAddTextJustification = PdfAddTextLeftJustify,
rotation? : @addtext.PdfAddTextRotation = PdfAddTextRot0,
midline? : Bool = false,
topline? : Bool = false,
shift_x? : Double = 0.0,
shift_y? : Double = 0.0,
outline? : Bool = false,
line_width? : Double = 1.0,
underneath? : Bool = false,
fast? : Bool = false,
raw? : Bool = false,
url_border? : Bool = false,
) -> @page.PdfPage raise @core.PdfError {
document.addtext_page_lines(
page,
time,
lines,
replacements,
font,
fontpack,
fontname,
font_object,
fontpack_font_objects,
font_size,
line_spacing,
colour,
position,
relative_to_box~,
opacity~,
justification~,
rotation~,
midline~,
topline~,
shift_x~,
shift_y~,
outline~,
line_width~,
underneath~,
fast~,
raw~,
url_border~,
)
}