Вопрос пользователя связан с использованием функции печати Print() интерфейса ICoreWebView2_16 для печати нескольких копий HTML-документа. Документация указывает, что одновременная печать нескольких операций невозможна. Пользователь пытался использовать цикл for для многократного вызова функции печати, но это не приводит к желаемому результату. Также было отмечено, что параметр PrintSettings не содержит нужных свойств для установки количества копий, а интерфейс ICoreWebView2PrintSettings2, содержащий такое свойство, не может быть передан в функцию Print().
Альтернативный ответ
Пользователь упоминает, что компонент TEdgeBrowser использует устаревший интерфейс WebView2. В качестве альтернативы предлагается использовать компонент WebView4Delphi, который позволяет установить свойство Copies объекта TWVBrowser.CoreWebView2PrintSettings и затем вызвать функцию печати TWVBrowser.Print.
Подтвержденный ответ
В ответ на проблему был разработан пример программы на Delphi, который решает задачу печати нескольких копий HTML-документа. Ключевым моментом является использование интерфейса ICoreWebView2PrintSettings2, который позволяет установить количество копий, даже если функция Print() ожидает интерфейс ICoreWebView2PrintSettings. Пример программы и исходный код доступны на GitHub.
unit WebView2Print;
...
type
TPrintStatus = (psSucceeded, psPrinterUnavailable, psOtherError, psUnknown);
TCallWhenDonePrinting = procedure(ErrorCode: HResult; PrintStatus: TPrintStatus) of object;
...
procedure WebView2PrintCopies(EdgeBrowser: TCustomEdgeBrowser;
Copies: Integer;
Grayscale: Boolean;
CallWhenDone: TCallWhenDonePrinting);
...
begin
// Проверка установленного WebView2 на поддержку необходимых интерфейсов
// Создание и настройка параметров печати
// Вызов функции печати с использованием настроенных параметров
end;
...
Пример кода
// Настройка количества копий и других параметров печати
PrintSettings2.Set_Copies(Copies);
if GrayScale then
PrintSettings2.Set_ColorMode(COREWEBVIEW2_PRINT_COLOR_MODE_GRAYSCALE);
// Вызов функции печати
HR := Core2_16.Print(PrintSettings2, CompletedHandler);
Рекомендации
Для использования современных возможностей WebView2 рекомендуется обновить версию используемого компонента до актуальной, что может потребовать дополнительных усилий, поскольку компонент TEdgeBrowser является закрытым и не всегда обновляется в соответствии с новыми версиями WebView2.
Заключение
Пользователям, столкнувшимся с аналогичной проблемой, рекомендуется ознакомиться с примером кода на GitHub, который предоставляет решение для печати нескольких копий HTML-документа в WebView2, используя Delphi.
Пользователь столкнулся с проблемой одновременной печати нескольких копий HTML-документа в WebView2 и ищет решение, используя Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.