doraTeX / TeX2img

TeX2img for macOS
https://tex2img.tech
Other
26 stars 2 forks source link

eps2write を使わないように変換経路を変更 #66

Closed doraTeX closed 8 years ago

doraTeX commented 8 years ago

63 の議論から分岐。

TikZ の shadows ライブラリなどのアウトライン化をサポートするため,

の場合については,「pdfcrop類似処理の後に pdfwrite + NoOutputFonts のコンボ」にするのがよさそう。

abenori commented 8 years ago

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!16825&authkey=!ANYoMX5Yq7PLXU4&ithint=folder%2cexe

こんな感じでしょうか(2ページ目)

aminophen commented 8 years ago

こんな感じでしょうか(2ページ目)

EPS 出力の場合だけ、pdfTeX で余白付与しても eps2write で結局クロップされてしまうのでまずいですね。EPS の場合だけ従来どおり「gs または mudraw で bbox 取得 → pdfTeX で背景色塗り → gs の eps2write → BoundingBox を取得した値(+余白)で上書き」にする必要があります。

Windows 版もビットマップ画像出力をすべて pdfiumdraw 経由に移すということですね。いままでずっと変えたら何が起きるかわからないから怖かったのですが、gs で EPS 経由するより格段に速いはずですし、この際 gs のバージョンに依らず pdfiumdraw に一本化してしまってよい気がしました。

abenori commented 8 years ago

Windows 版もビットマップ画像出力をすべて pdfiumdraw 経由に移すということですね。いままでずっと変えたら何が起きるかわからないから怖かったのですが、gs で EPS 経由するより格段に速いはずですし、この際 gs のバージョンに依らず pdfiumdraw に一本化してしまってよい気がしました。

そう思ったのですが,「アウトラインを入れない」という選択肢があるのでやっぱり従来通りにしようかと.新しいのです.

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!16825&authkey=!ANYoMX5Yq7PLXU4&ithint=folder%2cexe

aminophen commented 8 years ago

「アウトラインを入れない」という選択肢があるのでやっぱり従来通りにしようかと.

なるほど、現状の「PDF →[eps(2)writeアウトライン化]→ EPS →[BB編集]→[pngalpha等]→ ビットマップ」だとアウトライン化自体に意味はないので、そこをスキップして直接ビットマップ化すればよいわけですね。賛成します。

aminophen commented 8 years ago

もうひとつ、「gs9.15 以上の pdfwrite で直接アウトライン化」と「eps2write でアウトライン化 + BB 編集でページサイズ維持 + pdfwrite (epstopdf) で PDF に戻す」には大きな違いがありますね。EPS 経由では出てくる PDF には MediaBox しかなかったのですが、pdfwrite 単独では元の PDF に明示されている ナントカBox が(MediaBox の左下を (0,0) に合わせて再計算されて)複数残ってしまいます。ということは、pdfwrite を使う場合はなんであれ、一回は pdfTeX をかませたほうがよいことになります(たとえページサイズ維持でも、pdfwrite だけで済んだとはみなせません)。

…といいながら釈迦に説法な気がしてきました(^^;)

doraTeX commented 8 years ago

一通り実装できました。

ただし,shadows への対応としてはまだ十分ではないようです。 どうも,Ghostscript のみならず,pdfTeX も半透明PDFのロードを苦手としているように見えます。

このテストファイル一式をご覧ください。

test1-pdfcrop.pdf から test1-pdfwrite.pdf への変換コマンドは以下の通りです。(gs 9.16 で実験)

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dNoOutputFonts -r20016 -sOutputFile=test1-pdfwrite.pdf -dFirstPage=1 -dLastPage=1 -dAutoRotatePages=/None -c .setpdfwrite -f test1-pdfcrop.pdf 
aminophen commented 8 years ago

test1-pdfcrop.pdf :pdfTeX による処理結果。見た目上,影が失われているように見える。

これは手元の Adobe Reader XI では正常のようです。Windows で見ています。

test1-pdfwrite.pdf : test1-pdfcrop.pdf を Ghostscript の pdfwrite でアウトライン化した結果。なぜか元影だった部分が真っ黒に塗りつぶされる。

これも手元の Adobe Reader XI では特に変化なしで、正常に見えます。ビューアは何でしょうか?

doraTeX commented 8 years ago

あ,本当ですね。こちらでも Adobe Acrobat から見れば,どちらのファイルも正常に見えました。 Preview.app も半透明PDFの表示は苦手としていることを忘れていました。 Illustrator で作った図版についても,半透明を使用すると,「Acrobat から見ると綺麗に見えるのに Preview で開くと半透明部が消えたりつぶれたりする」現象は,これまでもよく出会っていました。 では,現状で問題なさそうですね。

あと少しだけ,特殊なケースについての対処を行えば,ベータ版として公開できそうです。

aminophen commented 8 years ago

そういえば、Mac 版では「EPS / EMF 以外の出力」だけでなく、「pdftops を経由したテキスト形式の EPS」もgs9.15 以上に限定した処理ですので、pdfwrite で一発アウトライン化したほうがきれいになるのでしょうか?

doraTeX commented 8 years ago

既にそのように変更済みです😏

aminophen commented 8 years ago

さすがです😏 pdfwrite と eps2write のアウトライン化品質が変わらないとすれば、これは「pdftops 経由の EPS 生成」を(テキスト目的でなくとも)敢えて選択するインセンティブができました。「なんだか eps2write でうまくいかないぞ」というときに、pdftops を選択できるのは大きいです。

doraTeX commented 8 years ago

「eps2write を避ける」ことをメリットと考えるならばそうなりますね。 ただし,結局は pdftops も「半透明PDFのEPS化」は苦手としているようで,ぼやけたビットマップ画像を出力してしまうみたいです。ですから,EPS出力の際に eps2write を避けるメリットはあまりなさそうです。

aminophen commented 8 years ago

結局は pdftops も「半透明PDFのEPS化」は苦手としているようで

そうなのですね… ではあまり変わらないか。ありがとうございます。

doraTeX commented 8 years ago

極力 eps2write を使うことを避けた,Ver. 2.1.3 beta 2 を作成できました。

考えるパターンが多くなってきましたので,テスト を作成しました。 出力結果が期待通りかどうかは目で全部チェックする必要がありますが,「パターンの考え忘れ」が防ぎやすくなることでしょう。

aminophen commented 8 years ago

すみませんが、一週間ほどテストできる余裕がないため、落ち着いてから試してみます。その前にリリースしていただいてかまいません。

doraTeX commented 8 years ago

承知しました。 今回いろいろ経路をいじったので、もう少し入念にテストしてからリリースします。 gs 9.15 未満の場合とか、回転PDF入力時とか、ページサイズ維持とか、作業ディレクトリや出力ファイル名にスペースが含まれる場合とかの網羅的チェックがまだですので。

doraTeX commented 8 years ago

テスト状況

doraTeX commented 8 years ago

新変換経路図 ができました。

doraTeX commented 8 years ago

Snow Leopard 版も追従させ,#65 (SVGアニメーション生成)と合わせて,Ver. 2.1.3 / 1.11.3 としてリリースしておきました。

aminophen commented 8 years ago

Ver. 2.1.3 / 1.11.3 としてリリースしておきました。

Mac 版、お疲れ様です。後日ゆっくり使わせていただきながら確認してみます。(解説記事もだいぶ書き変えないといけないので、そのついでに見ておきます)

abenori commented 8 years ago

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!16825&authkey=!ANYoMX5Yq7PLXU4&ithint=folder%2cexe

やってみました.pdfiumdrawも更新しています.今までEPSとPDF中心が混在していたのがなくなってすっきりした気がします.簡単なテストを走らせてみつかったミスはつぶしたつもりですが,もう少しテストしてみます.経路図は実装にあわせて書き換えました.

version 9.15での分岐の部分はeps2writeが指定されているかどうかで分けています.9.14だとeps2writeがあるのでまずいのですが…….(後で考えます.)

aminophen commented 8 years ago

やってみました.

ゆっくりテストする余裕がないのですみません… 今度ゆっくり試します。と言いながら、とりあえずダウンロードして(セミナー準備がてら)動かしたところ、テキスト保持とアウトラインが逆さになってしまったみたいです。

abenori commented 8 years ago

あーやっぱりやってしまっていますか……経路図に「wtext」と書きながら内部ブール値はOutlinedTextなのでですね…….こちらも急げないのでゆっくりやります.