module Printing
Helpers for printing the current page to PDF.
Definitions
def print(orientation: nil, scale: nil, background: nil, page: nil, margin: nil, page_ranges: nil, shrink_to_fit: nil)
Print the current page as a PDF and return the raw binary data.
All margin and page measurements are in centimetres. The W3C WebDriver default page size is US Letter (21.59 × 27.94 cm) with 1 cm margins.
Signature
-
parameter
orientationString | Nil "portrait"or"landscape". Default:"portrait".-
parameter
scaleFloat | Nil Scaling factor between 0.1 and 2.0. Default:
1.0.-
parameter
backgroundBoolean | Nil Whether to print background graphics and colours. Default:
false.-
parameter
pageHash | Nil Page dimensions in cm. Keys:
:width,:height.-
parameter
marginHash | Nil Page margins in cm. Keys:
:top,:bottom,:left,:right.-
parameter
page_rangesArray(String) | Nil Page ranges to print, e.g.
["1-5", "8"]. Default: all pages.-
parameter
shrink_to_fitBoolean | Nil Whether to shrink content to fit the page. Default:
true.-
returns
String The raw PDF binary data.
Implementation
def print(orientation: nil, scale: nil, background: nil, page: nil, margin: nil, page_ranges: nil, shrink_to_fit: nil)
parameters = {
orientation: orientation,
scale: scale,
background: background,
page: page,
margin: margin,
pageRanges: page_ranges,
shrinkToFit: shrink_to_fit,
}.compact
# Synchronise with Chrome's rendering pipeline before issuing the print
# command. The underlying CDP call (Page.printToPDF) is synchronous: if
# the renderer process has not yet fully initialised its print pipeline
# by the time the command arrives, Chrome returns JSON-RPC error -32000
# ("Printing failed") with no retry. A JavaScript round-trip forces
# ChromeDriver to wait for the renderer to be live (a JS execution
# context must exist), which also guarantees the print pipeline is ready.
# Without this, fast-loading pages can trigger the race intermittently.
session.execute("return document.readyState")
reply = session.post("print", parameters)
return Base64.decode64(reply)
end