vivliostyle-cli icon indicating copy to clipboard operation
vivliostyle-cli copied to clipboard

press-readyオプションを使用して出力したPDFにジャギーのある文字が含まれる

Open MurakamiShinyu opened this issue 2 months ago • 4 comments

既知の問題ですがissue未登録だったので登録します。

press-readyオプションによるフォントのアウトライン化を用いて出力したPDFにジャギーのある文字が含まれる問題があります。

以下、X(Twitter)やSlackに報告されたものです。

https://x.com/K1_trpg/status/1981527667645305358 から:

press-readyオプションを用いてフォントのアウトライン化を行った際、このように表示が他と異なる(ジャギー、太さの違い)文字がありました

  

https://x.com/VentArgente/status/1444057081221292032 から:

Vivliostyle CLI の --press-ready オプションで出力した pdf について質問させてください。 出力した pdf の中に添付1枚目のようにジャギった文字が含まれていることがあります。添付2枚目のように、特定の文字なら必ずジャギるというわけではないようです。

  

https://vivliostyle.slack.com/archives/CJRP7PK6K/p1737345245209009 より:

ここで一つだけ謎があってpress-readyを使うと、フォントの太さが微妙に変わっている気がしています。

  • アルファベットのフォントの太さが変わる
  • なぜかときどき、指定してないのに急に文字が太くなるときがある(脚注の「が」)

左の画像がpress-readyモードです。

https://vivliostyle.slack.com/archives/CJRP7PK6K/p1737510949012639?thread_ts=1737458596.152059&cid=CJRP7PK6K より:

これ、法則性がイマイチ不明なんですがたとえば17ページをみていただくとわかるんですが、ランダムとしか言えない文字が、この「変な現象」に該当しています

MurakamiShinyu avatar Oct 24 '25 02:10 MurakamiShinyu

書籍『Web技術で「本」が作れるCSS組版 Vivliostyle入門』 から関連する記述を引用:

p.219:

PDF入稿用のPDFの規格には、PDF/X-1aPDF/X-4があります。PDFを書き出すアプリはたくさん存在し、それによってPDFに含まれる情報が変わってくるため、印刷に適したPDFを定めるために策定された規格です。PDF/X-1aとPDF/X-4の大きな違いは、透明効果をそのまま出力できるか否かという点です。印刷所が対応しているなら、透明効果に対応したPDF/X-4を使いたいところです。

VivliostyleはPDF/X-4のPDFを単独で書き出すことができないため、PDF/X-4で書き出したければ、章の後半で解説するように、InDesignなどのDTPソフトの力を借りることになります(Vivliostyle CLIにはPDF/X-1aで書き出す--press-readyオプションがありますが、半透明の画像があるページは粗くビットマップ化されます)。

印刷所によっては、Vivliostyleから出力したPDFそのままでも入稿可能です。技術同人誌などの入稿ならたいていは大丈夫でしょう。

p.231:

印刷向け仕様のPDF/X-4や1色刷り用のPDFを書き出すために、Vivliostyleで書き出したPDFを1ページずつInDesignの新規ドキュメントに貼り付けます。この面倒な作業はInDesignに付属している「PlaceMultipagePDF.jsx」というスクリプトを使えば、自動的に行えます。

MurakamiShinyu avatar Oct 24 '25 02:10 MurakamiShinyu

これだけが問題ではないと思うのですが、一つ明らかな原因はGhostscriptが古すぎることです。検証データを用意しました。 gs-latest.zip

Vivliostyle CLI v9.7.2のコンテナにインストールされている(ベースであるUbuntu 22.04に用意されている)Ghostscriptは9系であり、現行の10.06.0からは遅れています。最新のGhostscriptをビルドしてpress-readyに使わせることで、旧バージョンではジャギーになっていた箇所が改善することがわかります。

Image

(赤が減分、不自然に太くなっていたテキストが他の箇所と同じ表示に直っている)

u1f992 avatar Oct 27 '25 06:10 u1f992

現在 #602 で作成しているDockerfileが適用されると、Ghostscript 10.05.1がインストールされる予定です。こちらのPRの内容がリリースにより #651 の問題は解決する可能性があります。

docker run -it --rm --entrypoint=bash ghcr.io/vivliostyle/cli:9.7.2
root@e05bb334d8d2:/data# gs --version
9.55.0
docker run -it --rm --entrypoint=bash vivliostyle-cli
vivliostyle@d1a369608ef5:/data$ gs --version
10.05.1

spring-raining avatar Nov 24 '25 06:11 spring-raining

Ghostscriptのバージョンを上げることで今回の問題については解決できそうですが、おそらくpress-ready公開時の想定メジャーバージョンから外れるかと思います。

Ghostscriptの挙動も変化してきています。たとえば-dPDFXオプションは以前はX-3aを指定する真偽値で、オプションの組み合わせによって実質的にX-1aにも対応する形でしたが、現在では-dPDFX=1でX-1aを直接指定できるようになっています(vibranthq/press-ready:src/ghostScript.ts#L65)。

次回の開発者会議に向けての提起なのですが、press-readyの組み込みをやめることを検討する状況になっていると思います。press-readyやGhostscriptなどの変換の知見は何らかの形で紹介するにしても、更新を期待することも引き継ぐことも難しい外部のプロジェクトに依存してVivliostyle側の機能の一部として提供するのは無理があるのではと感じています。現に、信頼できる変換方法としてはすでに紹介できていない状況です。

u1f992 avatar Nov 24 '25 13:11 u1f992