Ну, конечно, Вопрос требует дополнительных исследований, и я записываю то, что нашел по этому поводу. Таким образом, это может быть не точный ответ, и как-то еще можно добавить к нему.
Как это началось
В выпуске 603559 под названием Headless Chrome: save page to pdf
на bugs.chromium.org пользователь высказал свое предложение добавить параметр print-options
в комментарии № 50.
действительно ли было бы такой проблемой добавить переключатель как:
-print-опции = пейзаж, displayHeaderFooter, printBackground, масштаб, PaperWidth, paperHeight,
MarginTop, MarginBottom, MarginLeft, marginRight, pageRanges
На самом деле это не просто «небольшой скрипт-обертка (на любом языке с библиотекой WebSockets)», потому что вы должны обрабатывать много событий во время процесса, а не просто вызывать команду и ждать, пока она не выйдет.
Чуть ниже этого комментария № 51 от Project Contributer eseckler четко сказано, что
Пожалуйста, рассмотрите более общую проблему - мы не намерены предоставлять всю гибкость, которую DevTools предоставляет через параметры командной строки: Существуют различные технические причины, почему параметры командной строки не могут обеспечить такую же гибкость (например, характер DevTools на основе событий). Добавление дополнительных опций не решит это общее несоответствие.
Я думаю, что мы должны стремиться к более основанному на библиотеках подходу для безголовых пользовательских сред (например, nodejs, python, java, ...). Такая библиотека может реализовать стандартный, но более настраиваемый жизненный цикл загрузки / загрузки страницы, который включает в себя общие функции, такие как рендеринг PDF / снимка экрана. Я думаю, что мы могли бы предоставить пример / справочную библиотеку и приложение (скажем, для nodejs) как часть безголового хрома. Поданный https://crbug.com/719921 для отслеживания этого обсуждения.
Вполне вероятно, что это приведет к устареванию (и возможному удалению) флагов командной строки режима --headless, таких как --print-to-pdf или --screenshot.
Теперь вы можете видеть, что в первой строке четко указано, что
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.
Что делают разработчики
Теперь в выпуске 2829973002, озаглавленном « add customized printing setting for headless (Closed)
коде описываются 3 вещи, которые необходимо добавить к настройкам печати для «безголовых». Это
1) Добавьте параметры в команду printToPDF, которая позволяет пользователю указать параметры печати, такие как размер бумаги, размер поля и т.д.
2) PrintWebViewHelper::PrintPageInternal и PrintWebViewHelper::RenderPage feed print_preview_context_.total_page_count() для PrintHeaderAndFooter. Однако HeadlessPrintManager выдает сообщение IPC PrintMsg_PrintPages, в результате чего print_preview_context_ не инициализируется. Чтобы решить эту проблему, добавьте page_count в качестве аргумента к этим двум методам.
3) Добавлен юнит-тест и браузерный тест для печати в pdf.
В этом пункте говорится о настройках печати, таких как размер бумаги, размер полей и т.д., Но явно не говорится о настройках ориентации.
На той же странице вы можете увидеть каждый набор патчей (всего 19) из того, что было изменено в кодовой базе. Кроме того, Link Commited показывает окончательную фиксацию предложенных изменений в настройках печати в базе кода, после чего выпуск 2829973002 был помечен как Closed
. В окончательном коммите также перечислены файлы, измененные для предложенных изменений.
Итак, можно ли печатать в альбомном режиме?
С помощью ссылки на файлы исходного кода page_handler.cc и headless_print_manager.cc, указанной в ссылке Commited, мы можем пройти следующие строки кода.
page_handler.cc Линии 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; }
Здесь функция PrintToPDF
принимает параметр Landscape
, тип данных которого bool
означающий либо true, либо false.
Теперь headless_print_manager.cc определяет все функции безголовой печати и включает headless_print_manager.h в заголовок, который определяет namespace printing
. Он определяет все параметры безголовой печати в функции HeadlessPrintSettings
в структуре.
Линии 22-41
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 means 100%.
double scale;
std::string page_ranges;
};
Ответ
Вы можете ясно увидеть в коде над третьей строкой, которая говорит
HeadlessPrintSettings(): landscape(false)
Таким образом, печать любой веб-страницы с использованием Headerless-chrome всегда печатает в портретной ориентации, поскольку по умолчанию для альбомного режима установлено значение false. Есть много других настроек печати, которые вы можете изучить с помощью этого кода.
Примечание: я знаю, что ответ может быть прямым НЕТ, но я подумал, что поделиться своими выводами и соответствующими ссылками будет лучшим вариантом для всех.