2017-12-09 2 views
0

Um PDF aus einer HTML-Datei zu generieren, möchte ich Selen Chrome-Treiber verwenden.Generieren PDF mit Selenium-Chrom-Treiber

Ich versuchte es mit Befehlszeile:

chrome.exe --headless --disable-gpu --print-to-pdf file:///C:invoiceTemplate2.html 

und es funktioniert perfekt, also wollte ich mit JAVA tun, und hier ist mein Code:

System.setProperty("webdriver.chrome.driver", "C:/work/chromedriver.exe"); 
ChromeOptions options = new ChromeOptions(); 
options.addArguments("--headless", "--disable-gpu", "--print-to-pdf", 
      "file:///C:/invoiceTemplate2.html"); 
WebDriver driver = new ChromeDriver(options); 
driver.quit(); 

Der Server ohne Probleme gestartet , aber Chrome wird mit mehreren Tabs mit den Argumenten geöffnet, die ich in Optionen angegeben habe.

Irgendeine Lösung zu diesem? Danke.

+1

Was ist der Sinn der Verwendung von Selen, da der Browser dann sofort geschlossen wird, wenn '--print-to-pdf' als Argument zur Verfügung gestellt wird? –

+0

@ FlorentB.Ich habe Ihren Punkt nicht genau erhalten –

+0

@MoatezBouhdid Sie können eine Webseite nicht direkt als PDF speichern, indem Sie Selen verwenden. Stattdessen können Sie den Screenshot der Seite speichern und später in PDF konvertieren, aber das ist zu teuer. Als Workaround können Sie Python-Skript oder Bash-Skript schreiben, um den Befehl auszuführen –

Antwort

1

Sie haben zwei Dinge zu tun -

Erste - Machen Sie einen Screenshot Selen mit

Second- das Bild konvertieren mit einem beliebigen anderen PDF-Tool itext. Hier zeige ich ausführlich, um dies zu tun.

Schritt 1: Laden Sie das Glas itext von here herunter und fügen Sie die JAR-Datei zu Ihrem Erstellungspfad hinzu.

Schritt 2: Unten ist der Code

ChromeOptions options = new ChromeOptions(); 
    options.addArguments("disable-infobars"); 
    options.addArguments("--print-to-pdf");  

    WebDriver driver = new ChromeDriver(options); 
    driver.get("file:///C:/invoiceTemplate2.html");  

    try{ 
     File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     FileUtils.copyFile(screenshot, new File("screenshot.png")); 
     Document document = new Document(PageSize.A4, 20, 20, 20, 20); 
     PdfWriter.getInstance(document, new FileOutputStream("webaspdf.pdf")); 
     document.open(); 
     Image image = Image.getInstance("screenshot.png"); 
     document.add(image); 
     document.close(); 

    } 
    catch (Exception e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 

Hinweis Snippet: Fügen Sie das gewünschte Paket von itext. Die oben verwendeten Pakete von itext sind:

Verwandte Themen