Default page size option
Vivliostyle CLIのbuildコマンドで出力されるPDFのページサイズは、スタイルシートあるいは --size オプションでの指定があれば指定されたものになりますが、指定がない、あるいは size: auto の指定の場合、ブラウザのビューポートのサイズが使われることになっており、HeadlessChrome/Puppeteerでのそのデフォルトのサイズが 800px x 600px であるために、このサイズからVivliostyle ViewerのUI部分の高さ(上部36px、下部24pxの合計60px)を引いた 800px x 540px となっています。
この現状のデフォルトのページサイズはあまり役に立ちません。一般的な文書のページサイズに近いものをデフォルトにしたほうがよいと思います。たぶんLetterサイズ 8.5in x 11in (816px x 1056px = 216mm x 279mm) などが無難だと思います。(高さ60pxを加えたビューポートのサイズを指定するとよい)
参考: PuppeteerでのViewportの指定: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagesetviewportviewport
このデフォルトのページサイズを指定できるオプションがあるとよいかもしれません。現状のCLIには --size オプションがありますが、これはスタイルシートで指定されているページサイズを上書きしてしまいます(!important を出力している)。たとえば --default-size A4 のように指定できるとよいと思います。
ブラウザのウインドウサイズが利用できない場合のページサイズautoの問題は、Vivliostyle CLIだけの問題ではないので、Vivliostyle.js側で対処することにしました。
- https://github.com/vivliostyle/vivliostyle.js/pull/876
When page size is not specified or
auto, Vivliostyle uses the window size to determine the page size. The problem here is when the window size is not available, i.e., window size is 0 or browser is in headless mode.To solve the problem, now we use the fallbackPageSize:
const fallbackPageSize = { // compromise between A4 (210mm 297mm) and letter (8.5in 11in) width: 794, // 210mm (8.27in) height: 1056, // 279.4mm (11in) };
このコメントに書いているとおり、fallbackPageSize はA4サイズとLetterサイズの折衷としました。どちらの用紙サイズを使うユーザーも印刷するのに困らないように。
Vivliostyle.js側での修正により、元のissueの最後の次の部分以外は解決しました。
このデフォルトのページサイズを指定できるオプションがあるとよいかもしれません。現状のCLIには
--sizeオプションがありますが、これはスタイルシートで指定されているページサイズを上書きしてしまいます(!importantを出力している)。たとえば--default-size A4のように指定できるとよいと思います。
優先度はあまり高くないと思いますが、このissueはタイトルを変更して残しておきます。