ドキュメント によると、ChromeはPDFをエクスポートするために--print-to-pdf
を使用してヘッドレスモードで起動できます。これは、GET
リクエストでアクセスできるページに適しています。
Chrome内から複数のナビゲーションリクエストを実行した後にPDFをエクスポートできるようにするPDFへの印刷ソリューションを見つけようとしています。例:google.com
を開き、検索クエリを入力し、最初の結果リンクをクリックして、PDFにエクスポートします。
[利用可能な非常に限られた量の]ドキュメントとサンプルを見て、ページが読み込まれた後、PDFをエクスポートするようにChromeに指示する方法を見つけることができませんでした。 Java chrome-driver
を使用しています。
Chromeを使用しない1つの可能な解決策は、 wkhtmltopdf のようなツールを使用することです。このパスを使用すると、HTMLをツールに送信する前に、次のことを強制されます。
ダウンロードのファイルパスをwkhtmltopdf
が正しく読み取るために正しいものにするために、私は自分の側で多くのいじくりを必要とするため、このパスを好まないでください。
ChromeにPDFに印刷するように指示する方法はありますか?
回答がありませんので、回避策を説明します。 Chromeから現在のページを印刷するように要求する方法を見つけるのではなく、別のルートをたどりました。
この例では、クエリ「example」でGoogleから結果ページをダウンロードしようとします。
driver.get("google.com")
で移動し、クエリ「example」を入力して、[Google Search]をクリックしますdriver.getPageSource()
を使用してページのソースを取得しますlocalhost:8080
の例。リンク「./style.css」は「localhost:8080/style.css」になりますchrome --print-to-pdf localhost:8080/search?id=query-example
を実行しますchromeはコントローラーにHTMLを要求し、返されるHTMLで定義されたリソースの場合、コントローラーに移動します。これは、相対リンクを再マップしたためです。そのリクエストをリソースの実際の場所-google.comに転送します。以下はSpringコントローラーの例です。この例は不完全であり、ここではガイダンスとしてのみ示しています。
@RestController
@RequestMapping
public class InternationalOffloadRestController {
@RequestMapping(method = RequestMethod.GET, value = "/search/html")
public String getHtml(@RequestParam("id") String id) {
File file = new File("location of the HTML file", id);
try (FileInputStream input = new FileInputStream(file)) {
return IOUtils.toString(input, HTML_ENCODING);
}
}
@RequestMapping("/**") // forward all remapped links to google.com
public void forward(HttpServletResponse httpServletResponse, ...) {
URI uri = new URI("https", null, "google.com", -1,
request.getRequestURI(), request.getQueryString(), null);
httpServletResponse.setHeader("Location", uri.toString());
httpServletResponse.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
}
}
コマンドラインからこれを行う例は、ページhtmlとsed
を少しいじってみます:
LOGIN='myuserid'
PASSW='mypasswd'
AUTH='pin=$LOGIN&accessCode=$PASSW&Submit=Submit'
TIMESTAMP=`TZ=HST date -d "today" +"%m/%d/%y %I:%M %p HST"`
wget -q --save-cookies cookies.txt --keep-session-cookies \
--post-data $AUTH \
https://csea.ehawaii.gov/iwa/index.html
sed -i 's#href="/iwa/css#href="./bin#g' index.html
sed -i 's#src="/iwa/images#src="./bin#g' index.html
wkhtmltopdf -q --print-media-type \
--header-left "$d" --header-font-size 10 \
--header-line --header-spacing 10 \
--footer-left "Page [page] of [toPage]" --footer-font-size 10 \
--footer-line --footer-spacing 10 \
--footer-right "$TIMESTAMP" \
--margin-bottom 20 --margin-left 15 \
--margin-top 20 --margin-right 15 \
index.html index.pdf
有効なCookieを想定すると、ログイン後に利用可能な次のページに次のようにアクセスできます。
wget -q --load-cookies cookies.txt https://csea.ehawaii.gov/otherpage.html
wkhtmltopdf <all the options> otherpage.html otherpage.pdf
また、以前はすべてのcssとイメージをローカルのbin
ディレクトリに次のようにダンプしました。
wget -r -A.jpg -A.gif -A.css -nd -Pbin \
https://csea.ehawaii.gov/iwa/index.html