【问题标题】:Export as PDF using Selenium Webdriver Screenshot使用 Selenium Webdriver 导出为 PDF 截图
【发布时间】:2016-02-15 00:02:01
【问题描述】:

有谁知道是否可以使用 Selenium Firefox WebDriver 中的屏幕截图功能将 HTML 导出为 PDF?我有一个网页,其中包含我需要自动下载的打印特定 css。我知道屏幕截图功能将页面的屏幕截图作为图像,但我正在寻找适合打印的可缩放 PDF 文件。

【问题讨论】:

    标签: pdf selenium selenium-webdriver webdriver selenium-firefoxdriver


    【解决方案1】:

    Selenium 中的屏幕截图保存为 PNG。 PNG和PDF是不同的格式。所以 Selenium 不能将你的 HTML 页面图像直接保存为 PDF。

    但是,您可以尝试插入 Selenium 拍摄的 PNG 屏幕截图并将其添加到 PDF。

    检查this answer。基本上,您将需要一个库(如 itext)并执行以下操作:

    // Take screenshot
    driver.get("http://www.yourwebpage.com");
    File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(screenshot, new File("screenshot.png"));
    
    // Create the PDF
    Document document = new Document(PageSize.A4, 20, 20, 20, 20);
    PdfWriter.getInstance(document, new FileOutputStream("my_web.pdf"));
    document.open();
    Image image = Image.getInstance(getClass().getResource("screenshot.png"));
    document.add(image);
    document.close();
    

    希望对你有帮助!

    编辑

    由于网络可能非常高,您可能需要查看the documentation 以了解您希望如何在 PDF 文件中设置图像。

    【讨论】:

    • 感谢您花时间回答。不幸的是,该解决方案只会使图像伪装成 PDF 并且不可扩展。再次感谢。
    • 您所说的可缩放是指矢量化图像吗?如果是这样,我不确定您是否可以对网页屏幕截图执行此操作,除非您稍后处理图像。
    • 没错。我想我可能不得不改用 PhantomJS 之类的东西。
    • NReco.PdfGenerator 怎么样,它使用 WkHtmlToPdf
    【解决方案2】:

    一种快速简便的方法是构建一个 HTML 文件并将图像嵌入为 base64 数据。然后,您可以使用任何转换器将文档转换为 PDF。

    Python 示例:

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("https://www.google.co.uk");
    
    # open new file
    file = open(r"C:\temp\captures.html", "w")
    file.write("<!DOCTYPE html><html><head></head><body width=\"600px\">")
    
    # write image
    file.write("<img src=\"data:image/png;base64,")
    file.write(driver.get_screenshot_as_base64())
    file.write("\">")
    
    # close file
    file.write("</body></html>")
    file.close()
    
    driver.quit()
    

    【讨论】:

      【解决方案3】:

      Webdriver 不支持“导出为 PDF”功能。

      当您没有绑定到 Firefox 和 Webdriver 时,phantomjs 可能是一种替代方案。 Phantomjs 是一款无头浏览器,能够将屏幕截图转换为 PDF。 浏览器可以直接通过javascript控制。

      示例:http://phantomjs.org/screen-capture.html

      【讨论】:

        猜你喜欢
        • 2012-06-06
        • 2011-03-26
        • 2013-02-07
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多