このコマンドを試しています。それはうまくいきます。
chromium-browser --headless --disable-gpu --print-to-pdf=file14.pdf file:///input.html
ただし、常に縦向きモードで印刷しますが、横向きモードでWebページを印刷したいと思います。
コマンドラインでヘッドレスクロムにモード(ポートレートまたはランドスケープ)を渡して、ポートレートモードまたはランドスケープモードのいずれかで任意のWebページを印刷できるようにするためのパラメーターまたは引数はありますか?
まあ、確かに質問はもっと研究が必要であり、私はそれに関して私が見つけたものを書き留めています。だから、それは正確な答えではないかもしれませんし、どういうわけかそれを追加することができます。
Issue 603559 タイトル_Headless Chrome: save page to pdf
_ on bugs.chromium.org で、ユーザーは_print-options
_パラメーターを コメント#5
次のようなスイッチを追加するのは本当に面倒ですか?
-print-options = landscape、displayHeaderFooter、printBackground、scale、paperWidth、paperHeight、
marginTop、marginBottom、marginLeft、marginRight、pageRanges
コマンドを呼び出して終了ステータスを待つのではなく、プロセス中に多くのイベントを処理する必要があるため、実際には「小さなラッパースクリプト(WebSocketライブラリを備えた任意の言語)」だけではありません。
そのすぐ下に続く コメント#51 プロジェクト寄稿者による eseckler 、明確に次のように述べています
より一般的な問題を検討してください-コマンドラインオプションを通じてDevToolsが提供するすべての柔軟性を提供するつもりはありません:コマンドラインオプションが同じ柔軟性を提供できないさまざまな技術的理由があります(たとえば、DevToolsのイベントベースの性質)。オプションを追加しても、この一般的な不適合は解決されません。
ヘッドレスユーザー環境(nodejs、python、Javaなど)に対して、よりライブラリベースのアプローチを目指すべきだと思います。このようなライブラリは、PDF /スクリーンショットのレンダリングなどの一般的な機能を含む、デフォルトの、しかしよりカスタマイズ可能なページのロード/ライフサイクルを実装できます。ヘッドレスクロムの一部として、サンプル/リファレンスライブラリとアプリケーション(たとえば、nodejs)を提供できると思います。この議論を追跡するために提出 https://crbug.com/719921 。
これにより、-print-to-pdfや--screenshotなどの--headlessモードのコマンドラインフラグが非推奨(および最終的には削除)される可能性があります。
これで、Ist行が明確に次のように述べていることがわかります。
_We don't intend to provide all the flexibility that DevTools provide through command-line options
_
Chrome DevToolsメソッドPage.printToPDF は、使用できるすべてのパラメーターを記述し、最初に示されるパラメーターはLandscape (Orientation) that is by-default false.
であるため、これは非常に真実です。
現在 Issue 2829973002 title add customized printing setting for headless (Closed)
は、コード内のヘッドレスの印刷設定に追加される3つのことを説明しています。これらは
1)printToPDFコマンドにパラメーターを追加して、ユーザーが用紙サイズ、余白サイズなどの印刷設定を指定できるようにします。
2)PrintWebViewHelper :: PrintPageInternalおよびPrintWebViewHelper :: RenderPageフィードprint_preview_context_.total_page_count()をPrintHeaderAndFooterにフィードします。ただし、HeadlessPrintManagerはPrintMsg_PrintPages IPCメッセージを発行し、print_preview_context_を初期化しないままにします。この問題を解決するには、page_countを引数としてこれら2つのメソッドに追加します。
3)PDFに印刷用の単体テストとブラウザテストを追加しました。
ここで重要な点は、用紙サイズ、余白サイズなどの印刷設定について述べていますが、方向設定については明示的に述べていません。
同じページで、コードベースで変更されたパッチセット(合計19)をすべて確認できます。また、リンク コミット は、コードベースの印刷設定への提案された変更の最終コミットを示し、その後 問題2829973002 はClosed
。最後のコミットでは、提案された変更のために変更されたファイルも一覧表示されます。
Committedリンクにリストされているソースコードファイル page_handler.cc および headless_print_manager.cc を参照すると、次のコード行を実行できます。
_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; }
_
ここで、関数PrintToPDF
は、データ型がLandscape
であるパラメーターbool
を受け取り、trueまたはfalseを意味します。
ここで、 headless_print_manager.cc はすべてのヘッドレス印刷関数を定義し、_namespace printing
_を定義するヘッダーに headless_print_manager.h を含めます。これは、構造内の関数HeadlessPrintSettings
ですべてのヘッドレス印刷設定を定義します。
struct HeadlessPrintSettings { HeadlessPrintSettings() :landscape(false)、 display_header_footer(false)、 should_print_backgrounds(false)、 scale(1){} gfx :: Size paper_size_in_points; PageMargins margins_in_points; bool landscape; bool display_header_footer; bool should_print_backgrounds; // scale = 1は100%を意味します。 double scale; std :: string page_ranges; };
3行目の上のコードではっきりとわかります
HeadlessPrintSettings(): landscape(false)
したがって、デフォルトで横向きモードがfalseに設定されているため、ヘッダーなしクロムを使用してWebページを印刷すると、常に縦向きで印刷されます。このコードで調べることができる他の多くの印刷設定もあります。
注:答えは正直にNOになる可能性があることは知っていますが、私の調査結果と関連する参考資料を共有することは、すべての人にとってより良い選択肢になると思いました。