Экспорт в PDF с помощью снимка экрана Selenium Webdriver

Кто-нибудь знает, можно ли экспортировать HTML в PDF с помощью функции снимка экрана в Selenium Firefox WebDriver? У меня есть веб-страница, на которой есть специальный css для печати, который мне нужно загружать автоматически. Я понимаю, что функция снимка экрана делает снимок экрана страницы как изображение, но я искал масштабируемый файл PDF, который можно было бы распечатать.


person user1038814    schedule 13.11.2015    source источник


Ответы (3)


Скриншоты в Selenium сохраняются как PNG. PNG и PDF - это разные форматы. Таким образом, Selenium не может сохранять изображение вашей HTML-страницы непосредственно в формате PDF.

Но вы можете попробовать вставить снимок экрана PNG, сделанный Selenium, и добавить его в 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-файле.

person makeMonday    schedule 13.11.2015
comment
Спасибо, что нашли время ответить. К сожалению, решение сделает изображение замаскированным под PDF и не будет масштабируемым. Спасибо еще раз. - person user1038814; 13.11.2015
comment
Под масштабируемым вы имеете в виду векторизованное изображение? Если да, то я не уверен, что вы сможете сделать это со снимком экрана веб-страницы, если вы не обработаете изображение позже. - person makeMonday; 13.11.2015
comment
Это верно. Думаю, мне придется вместо этого использовать что-то вроде PhantomJS. - person user1038814; 13.11.2015
comment
как насчет NReco.PdfGenerator, который использует WkHtmlToPdf - person Ryan Chu; 18.03.2016

Быстрый и простой способ - создать 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()
person Florent B.    schedule 17.03.2016

Webdriver не поддерживает функцию «Экспорт в PDF».

Если вы не привязаны к Firefox и Webdriver, альтернативой может стать phantomjs. Phantomjs - это безголовый браузер с возможностью делать скриншоты в формате PDF. Браузером можно управлять напрямую с помощью javascript.

Пример: http://phantomjs.org/screen-capture.html.

person powerpete    schedule 06.09.2017