使用Selenium Webdriver截图导出PDF

8

请问有人知道是否可以使用Selenium Firefox WebDriver中的截屏功能将HTML导出为PDF吗? 我有一个具有打印特定CSS的网页,我需要自动下载它。 我知道截屏功能将页面截取为图像,但我正在寻找可伸缩的适合打印的PDF文件。

3个回答

6

Selenium中的屏幕截图是以PNG格式保存的,而PNG和PDF是不同类型的格式。因此,Selenium无法直接将您的HTML页面图像保存为PDF。

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

请参考此答案。基本上,您需要一个库(例如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();

希望这能有所帮助!

编辑

由于网页可能很高,您可能需要查看文档以了解如何在PDF文件中设置图像。


感谢您抽出时间回答。不幸的是,该解决方案只会使图像伪装成PDF,并且无法进行可扩展性调整。再次感谢。 - user1038814
你所说的可伸缩是指矢量化图像吗?如果是,我不确定在网页截图上能否实现,除非你之后处理该图像。 - makeMonday
没错。我想我可能需要使用类似PhantomJS的东西。 - user1038814
NReco.PdfGenerator是一个使用WkHtmlToPdf的工具,您对它有什么看法? - Ryan Chu

1
一种快速简便的方法是构建一个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()

1

Webdriver不支持"导出为PDF"功能。

当您不受Firefox和Webdriver限制时,phantomjs可能是一种替代方案。 Phantomjs是一个无头浏览器,具有将屏幕截图保存为PDF的能力。 该浏览器可以直接通过JavaScript进行控制。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接