JxBrowser преобразует html в pdf с выпуском 7.X

Я хочу преобразовать html-файл в pdf с помощью TeamDev jxbrowser. Я хочу запускать его автоматически, без каких-либо дополнительных диалогов печати или всплывающих окон и т. д., просто выполнив некоторый код. И я также хочу установить некоторые дополнительные настройки. В версиях 6.X я могу увидеть более подробные параметры по кодированию

https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013120-print-settings

browser.setPrintHandler(new PrintHandler() {
            @Override
            public PrintStatus onPrint(PrintJob printJob) {
                PrintSettings printSettings = printJob.getPrintSettings();
                printSettings.setLandscape(true);

Но в релизах 7.x очень мало деталей для пошаговой настройки генерации pdf по коду.

https://jxbrowser-support.teamdev.com/docs/guides/printing.html#print-preview

  • Разве в более новых версиях нельзя получить экземпляр PrintSettings?
  • Можем ли мы установить собственный заголовок и нижний колонтитул?

person benchpresser    schedule 01.01.2021    source источник


Ответы (1)


API печати, который позволяет программно печатать текущую загруженную веб-страницу с помощью принтера PDF, недоступен в JxBrowser 7. Он уже есть на нашем дорожная карта. Мы делаем все возможное, чтобы внедрить этот функционал в одной из следующих версий.

Я рекомендую вам следить за нами на https://twitter.com/JxBrowserTeam, чтобы получать уведомления о выпуске этой функции. .

UPD: В JxBrowser 7.13 Printing API был расширен функциональностью, позволяющей программно настраивать параметры печати и печатать веб-страницу без отображения диалогового окна Print Preview. API позволяет сохранить текущую загруженную веб-страницу в виде документа PDF. Подробнее читайте на странице https://jxbrowser-support.teamdev.com/docs/guides/printing.html#configuring-settings

В следующем примере показано, как сохранить веб-страницу в формате PDF:

import static com.teamdev.jxbrowser.engine.RenderingMode.OFF_SCREEN;
import static com.teamdev.jxbrowser.print.Orientation.PORTRAIT;

import com.teamdev.jxbrowser.browser.Browser;
import com.teamdev.jxbrowser.browser.callback.PrintCallback;
import com.teamdev.jxbrowser.browser.callback.PrintHtmlCallback;
import com.teamdev.jxbrowser.engine.Engine;
import com.teamdev.jxbrowser.frame.Frame;
import com.teamdev.jxbrowser.print.PdfPrinter;
import com.teamdev.jxbrowser.print.PdfPrinter.HtmlSettings;
import com.teamdev.jxbrowser.print.PrintJob;
import com.teamdev.jxbrowser.print.event.PrintCompleted;
import java.nio.file.Paths;

/**
 * This example demonstrates how to configure print settings programmatically and print the
 * currently loaded web page using the built-in PDF printer. In general, it shows how to save the
 * currently loaded web page as a PDF document.
 */
public final class PrintToPdf {

    public static void main(String[] args) {
        Engine engine = Engine.newInstance(OFF_SCREEN);
        Browser browser = engine.newBrowser();
        browser.set(PrintCallback.class, (params, tell) -> tell.print());
        browser.set(PrintHtmlCallback.class, (params, tell) -> {
            PdfPrinter<PdfPrinter.HtmlSettings> pdfPrinter =
                    params.printers().pdfPrinter();
            PrintJob<HtmlSettings> printJob = pdfPrinter.printJob();
            printJob.settings()
                    .pdfFilePath(Paths.get("google.pdf").toAbsolutePath())
                    .enablePrintingBackgrounds()
                    .orientation(PORTRAIT)
                    .apply();
            printJob.on(PrintCompleted.class, event -> {
                if (event.isSuccess()) {
                    System.out.println("Printing is completed successfully.");
                } else {
                    System.out.println("Printing has failed.");
                }
            });
            tell.proceed(pdfPrinter);
        });
        browser.navigation().loadUrlAndWait("https://google.com");
        browser.mainFrame().ifPresent(Frame::print);
    }
}
person Vladimir    schedule 04.01.2021
comment
Я надеюсь, мы сможем установить собственное содержимое нижнего колонтитула и заголовка? - person benchpresser; 04.01.2021
comment
К сожалению, из нашего первоначального исследования Chromium не предоставляет API, который позволяет изменять текст верхнего/нижнего колонтитула при печати веб-страницы ( - person Vladimir; 08.01.2021