PDF出力ができない
ogwata opened this issue · comments
- Vivliostyle CLIのインストール後、コマンドパレットで「Novel: PDF出力」を選択しました。
- しかし、原稿ファイルと同じレベルに「publish.html」ができるだけでPDFは作成されず、以下のエラーができます。
コマンド 'Novel:PDF出力' でエラー (Running the contributed command: 'Novel.export-pdf' failed.) が発生しました
- 参考のため元のテキストファイルと、生成されたpublish.html、それにエラーが出た際のスクリーンショットを添付します(HTMLは添付できないので、拡張子.txtに変更してあります)
以下は蛇足です。
一般社団法人ビブリオスタイルの理事をしています。私共のプロダクトを利用していただき感激しております。ありがとうございます。
なお、readme.mdの「PDF出力」に「VivlioStle」という語句がありますが、「Vivliostyle」のタイポではないでしょうか。
コードを書かないもので、的外れな内容でしたらご容赦ください
時折、この症状に私も遭遇します。普段は再起動で治ります。
stderrは
$ vibliostyle build /Users....html -o /Users..../output.pdf
の実行に失敗した時の標準出力に現れるエラーなのですが、空っぽですね。
再現するパターンを探してみます。
ターミナルで、以下を実行した場合はPDFが出力されるのでしょうか?
% vivliostyle build publish.html -o output.pdf
invalidなhtmlが出力されている可能性はありますが、
#21 (comment)
でいただいた publish.html.txt は当方でvivliostyleで、正常にPDFになりました。
invalidなhtmlが出力されている可能性はありますが、
#21 (comment)
でいただいた publish.html.txt は当方でvivliostyleで、正常にPDFになりました。
そうでしたか……。
「普段は再起動で治ります」とのことでしたので、アプリケーションを一旦終了し、再起動してみましたが、やはり全く同じ結果です。
こちらの環境をお知らせしておきます。
- MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
- OSのバージョン: 11.4(20F71)
- VScodeのバージョン: 1.57.0 (Universal)
お手数ですが出力された publish.html をそのままご提供いただけませんか。
zip圧縮したpublish.html を添付します。
これでどうでしょう?
publish.zip
当方ではPDFが正常に作成されました。
% vivliostyle -v
cli: 3.5.0
core: 2.8.0
% vivliostyle build publish-2.html
◡ Processing PDF
output.pdf has been created.
🎉 Built successfully.
vivliostyle自体は動いているのですよね。困りました。再現できればいいのですが。
真摯に向き合っていただき感謝いたします。
@MarakamiShinyu に再現しないか、問い合わせています。
もしかしたら、彼からコメントがあるかもしれません。
こちらでもテストしましたが、問題が再現せず、正常にPDFが生成されます。
ターミナルで、
vivliostyle build publish.html -o output.pdf
としたときに、小形さんの環境で
Failed to load file:///Users/ogwata/Dropbox/dev/publish.html. The target resource is invalid.
とエラーが起きているということですが、この "The target resource is invalid." は、Vivliostyle.js でHTMLをロードしようとしたが、何らかの理由でロードできなかったということです。その原因は Chrome (Chromium) のDevToolsで調べることができると思います。まず、vivliostyle previewコマンドでプレビュー実行してください:
vivliostyle preview publish.html
たぶんbuildの場合と同じエラーがプレビュー(Vivliostyle Viewer)で表示されるはずです。そうしたら、DevTools を開いてください(option + command + I、あるいは右クリックメニューから Inspect(検証)、あるいはメニューのMore Tools→Developer Tools)。それから、Console タブをクリックします。そうすると、本当のエラーの内容が出てくるはずです。
たとえば、次のスクリーンショットは、こちらでわざとエラーになるURLを指定してvivliostyle preview を起動した場合の例です:
このようなスクリーンショットを見せてもらえれば、調べられます。
@ogwata
ちょっと気になる点があり、確認です。
出力されませんでした。HTMLが無効と言われます。
このときのスクリーンショットのエラーメッセージでは publish.html の場所が
file:///Users/ogwata/Dropbox/dev/publish.html
になってます。
しかしその前の
#21 (comment)
のスクリーンショットでは
file:///Users/ogwata/Dropbox/dev/test/draft/publish.html
でした。
vivliostyle build publish.html -o output.pdf
を実行したときのカレントディレクトリが /Users/ogwata/Dropbox/dev
のようなのですが、そのディレクトリに publish.html をコピーしてテストしたということですね? もしもそのファイルが存在しない場合、そのために "The target resource is invalid." のエラーが出る可能性があります。
vivliostyle preview file:///Users/ogwata/Dropbox/dev/test/draft/publish.html
のように file URL を指定して実行した場合はどうでしょうか?
それでも同じ "The target resource is invalid." が出ますか? その場合DevTools のConsoleでのエラー出力はどうなってますか?
@MurakamiShinyu さま、エラーの内容とデバッグ方法を教えていただき、ありがとうございます。今後活用することになるかと思います。
動いていたようでまず一安心。
その後、 vivliostyle build publish.html -o output.pdf
については、publish.html ファイルのあるディレクトリをカレントディレクトリにして実行したら成功したとのことでした。(vivliostyleで単純に指定されたファイルが存在しないという場合のエラーメッセージが分かりにくいのは改善したいところです。)
つまりVSCodeのターミナルからはvivliostyleコマンドが実行できて、VSCodeの拡張機能からはそれが実行できないということです。
考えられるのはPATH環境変数の設定の問題です。
Node.js環境(vivliostyle CLIはその環境で動く)のためにnodebrewを使っている場合、利用しているシェルが bash なら ~/.bashrc
(または /.bash_profile
)に、zsh なら ~/.zshrc
(または ./zprofile
)に、次のようにnodebrew用のPATHの設定をしているはずです:
export PATH=$HOME/.nodebrew/current/bin:$PATH
VSCodeは起動時に、システムのデフォルトのログインシェル用の環境変数設定のため、bashならbash用の、zshならzsh用のこの設定をロードします。これにより、VSCodeの拡張機能から、システムのデフォルトのログインシェルのユーザーのプロファイルで設定されたPATH設定を使ってコマンドの実行ができます。
問題が起きるのは次のような場合です:
例えば、bash用にこの設定がされているけど、zsh用にはこの設定がされていない、そして、macOSのデフォルトのログインシェルが zsh で、VSCodeのターミナルでは bash を使っているという場合、VSCodeのターミナルからはvivliostyleが動くのに、VSCodeの拡張機能からは動かないということになります。
novel-writerでは、child processからvivliostyleを実行していますので、シェルに依存するわけではないはずです。
npx vivliostyle build
とするなら動くかもしれませんね。何はともあれ、詳細ありがとうございます。
お手数をおかけしました。下記のようにpathを設定した./.zshrc
を作成することでPDFが出力できるようになりました!
export PATH=$HOME/.nodebrew/current/bin:$PATH
初歩的なミスでお恥ずかしい限りです。
藤井さん、(身内ですが)村上さんのサポートに深く感謝いたします。
本件から逸れますが、明日6/15に日本電子出版協会(JEPA)さんの依頼で、Vivliostyleについてお話しすることになりました。
村上がVivliostyleの技術要件について、私が使用事例について報告する予定です。novel-writerについても、ぜひ取り上げたいと思っています。
novel-writerはなるべく少ない手間で自身が執筆しやすい環境を作ろうとした事例で、その割り切り方が見所だと思います。そこでVivliostyleを選んでいただいたことを、大変うれしく思います。直前になって恐縮ですが、もし不都合なことなどありましたらおっしゃってください。
本Issueは、折りを見てクローズしておきます。もちろん、藤井さんの方で閉じてくださっても構いません。
解決されたとのこと、ありがとうございます。こちらも環境変数の影響を受けるコマンドの実装方法について考える良い機会になりました。
もしも問題がなければ、vivliostyle を直接呼ぶのではなく npx vivliostyle を呼び出す方向に変えていくことになるかと思います。
Vivliostyleの講演で、このプラグインのことを紹介していただけるのはとても嬉しいことです。
ありがとうございます。