Bene, certamente la domanda ha bisogno di più ricerca e sto scrivendo ciò che ho trovato al riguardo. Quindi, potrebbe non essere una risposta esatta e in qualche modo è possibile aggiungere altro.
Come è iniziato
Nel numero 603559 intitolato Headless Chrome: save page to pdf
su bugs.chromium.org , un utente ha espresso il suo suggerimento di aggiungere il print-options
parametro nel commento # 50
sarebbe davvero un tale problema aggiungere switch come:
-print-options = landscape, displayHeaderFooter, printBackground, scale, paperWidth, paperHeight,
marginTop, marginBottom, marginLeft, marginRight, pageRanges
In realtà non è solo un "piccolo script wrapper (in qualsiasi lingua con una libreria WebSocket) "perché devi gestire molti eventi durante il processo invece di invocare un comando e attendere il suo stato di uscita.
Proprio sotto quello che segue il commento n. 51 di Project Contributer eseckler , lo afferma chiaramente
Si prega di considerare il problema più generale: non intendiamo fornire tutta la flessibilità offerta da DevTools attraverso le opzioni della riga di comando: ci sono vari motivi tecnici per cui le opzioni della riga di comando non possono fornire la stessa flessibilità (ad es. La natura basata su eventi di DevTools). L'aggiunta di più opzioni non risolverà questo disadattato generale.
Penso che dovremmo puntare a un approccio più basato su librerie per ambienti utente senza testa (ad esempio nodejs, python, java, ..). Tale libreria può implementare un ciclo di vita / caricamento della pagina predefinito, ma più personalizzabile che include funzioni comuni come il rendering di un pdf / screenshot. Penso che potremmo fornire una libreria / applicazione di esempio / riferimento (diciamo, per nodejs) come parte del cromo senza testa. Archiviato https://crbug.com/719921 per tenere traccia di questa discussione.
È probabile che ciò comporti la deprecazione (e l'eventuale rimozione) di flag della riga di comando in modalità senza testa come --print-to-pdf o --screenshot.
Ora puoi vedere la linea Ist che lo afferma chiaramente
We don't intend to provide all the flexibility that DevTools provide through command-line options
Questo è vero poiché il metodo Page.printToPDF di Chrome DevTools descrive tutti i parametri che possono essere utilizzati e il primo parametro che afferma èLandscape (Orientation) that is by-default false.
Cosa viene fatto dagli sviluppatori
Ora il numero 2829973002 intitolato add customized printing setting for headless (Closed)
annulla 3 cose da aggiungere alle impostazioni di stampa per le persone senza testa nel codice. Questi sono
1) Aggiungi parametri al comando printToPDF, che consente all'utente di specificare le impostazioni di stampa come formato carta, margine, ecc.
2) PrintWebViewHelper :: PrintPageInternal e PrintWebViewHelper :: RenderPage feed print_preview_context_.total_page_count () in PrintHeaderAndFooter. Tuttavia, HeadlessPrintManager emette il messaggio IPC PrintMsg_PrintPages, che lascia print_preview_context_ non inizializzato. Per risolvere il problema, aggiungi page_count come arg a questi due metodi.
3) Aggiunti test unitari e test browser per la stampa in pdf.
In questo caso, indica le impostazioni di stampa come il formato della carta, il margine, ecc., Ma non esplicitamente le impostazioni di orientamento.
Nella stessa pagina, puoi vedere tutti i set di patch (Totale 19) di ciò che è stato modificato nella base di codice. Inoltre, Link Commited mostra il commit finale delle modifiche proposte alle impostazioni di stampa in codebase, dopo di che il
numero 2829973002 è stato contrassegnato come Closed
. Il commit finale elenca anche i file modificati per le modifiche proposte.
Quindi, è possibile stampare in modalità orizzontale?
Con riferimento ai file di codice sorgente page_handler.cc
e headless_print_manager.cc elencati nel link Commited, possiamo passare attraverso le seguenti righe di codice.
page_handler.cc Linee 302-316
void PageHandler::PrintToPDF(Maybe<bool> landscape,
Maybe<bool> display_header_footer,
Maybe<bool> print_background,
Maybe<double> scale,
Maybe<double> paper_width,
Maybe<double> paper_height,
Maybe<double> margin_top,
Maybe<double> margin_bottom,
Maybe<double> margin_left,
Maybe<double> margin_right,
Maybe<String> page_ranges,
std::unique_ptr<PrintToPDFCallback> callback) { callback->sendFailure(Response::Error("PrintToPDF is not implemented"));return; }
Qui, la funzione PrintToPDF
accetta un parametro il Landscape
cui tipo di dati bool
significa vero o falso.
Ora, headless_print_manager.cc definisce tutte le funzioni di stampa senza testa e include headless_print_manager.h nell'intestazione che definisce il file namespace printing
. Definisce tutte le impostazioni di stampa senza testa nella fucntion HeadlessPrintSettings
nella struttura.
Linee 22-41
struct HeadlessPrintSettings {
HeadlessPrintSettings ()
: landscape (false),
display_header_footer (false),
should_print_backgrounds (falsi),
scala (1) {}
gfx :: Dimensioni paper_size_in_points;
PageMargins margins_in_points;
bool landscape;
bool display_header_footer;
bool should_print_backgrounds;
// scale = 1 significa 100%.
doppia scala;
std :: string page_ranges;
};
La risposta
Puoi vedere chiaramente nel codice sopra la terza riga che dice
HeadlessPrintSettings(): landscape(false)
Pertanto, la stampa di qualsiasi pagina Web utilizzando Headerless-chrome verrà sempre stampata in verticale perché la modalità orizzontale predefinita è impostata su false. Ci sono molte altre impostazioni di stampa che puoi esplorare attraverso questo codice.
Nota: so che la risposta potrebbe essere un NO chiaro, ma ho pensato che condividere le mie scoperte e i riferimenti pertinenti sarebbe stata un'opzione migliore per tutti.