JxBrowser 使用 7.X 版本将 html 转换为 pdf

问题描述

我想使用 TeamDev jxbrowser 将 html 文件转换为 pdf。我想通过执行一些代码来自动触发它而无需任何额外的打印对话框或弹出窗口等。而且我还想设置一些额外的设置。在 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 实例?
  • 我们可以设置自定义页眉和页脚内容吗?

解决方法

允许使用 PDF 打印机以编程方式打印当前加载的网页的打印 API 在 JxBrowser 7 中不可用。它已经在我们的 roadmap 上。我们会尽最大努力在下一个版本中引入此功能。

我建议您在 https://twitter.com/JxBrowserTeam 上关注我们,以便在此功能发布时收到通知。

UPD:在 JxBrowser 7.13 中,打印 API 已扩展为允许以编程方式配置打印设置和打印网页而不显示打印预览对话框的功能。 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,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);
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...