【问题标题】:JxBrowser comvert html to pdf with 7.X releaseJxBrowser 在 7.X 版本中将 html 转换为 pdf
【发布时间】:2021-01-01 19:55:46
【问题描述】:

我想使用 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 pdf-generation html2pdf jxbrowser


    【解决方案1】:

    允许使用 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, (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);
        }
    }
    

    【讨论】:

    • 我希望我们能够设置自定义页脚和页眉内容?
    • 不幸的是,从我们最初的研究来看,Chromium 没有提供允许在打印网页时修改页眉/页脚文本的 API (
    猜你喜欢
    • 2019-07-04
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2012-01-14
    • 2017-05-06
    • 2011-05-31
    相关资源
    最近更新 更多