Closed MurakamiShinyu closed 3 years ago
入力が/^https?:\/\//にマッチする場合にfs.ReadFileSyncでの読み込みではなくnode-fetchによるHTTP通信に切り替えることで 以下のテストケースが通りPDFの生成も成功しました。
const response = await vivliostyleCLI([
'build',
'-s',
'A4',
'-o',
outputPath,
"https://vivliostyle.github.io/vivliostyle.js/samples/gutenberg/Alice.html",
]);
今の実装は関連するメソッドの内部で分岐して部分的な対応をしています。しかし煩雑になるのでentry.typeの種類をhtml,markdownの他にuriのような分類を追加して根本的に処理を分けてしまったほうが良いと思います。
developブランチからの差分は以下の通りです。(テスト用にいろいろなファイルが入ってしまっています) https://github.com/AyumuTakai/vivliostyle-cli/compare/develop...feature/input-url
@spring-raining これはv3.0に入れられないでしょうか?
現状では
$ vivliostyle preview https://vivliostyle.github.io/vivliostyle_doc/ja/vivliostyle-user-group-vol1/
を実行すると次のようにエラーになります:
✖ Error: Cannot find an input format for /Users/shinyu/viv/test/https:/vivliostyle.github.io/vivliostyle_doc/ja/vivliostyle-user-group-vol1
at Object.detectInputFormat (/Users/shinyu/viv/vivliostyle-cli--develop/dist/input.js:26:11)
at composeSingleInputConfig (/Users/shinyu/viv/vivliostyle-cli--develop/dist/config.js:271:27)
at Object.mergeConfig (/Users/shinyu/viv/vivliostyle-cli--develop/dist/config.js:256:17)
at preview (/Users/shinyu/viv/vivliostyle-cli--develop/dist/commands/preview.js:46:35)
at Object.<anonymous> (/Users/shinyu/viv/vivliostyle-cli--develop/dist/commands/preview.js:20:5)
at Module._compile (node:internal/modules/cjs/loader:1108:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10)
at Module.load (node:internal/modules/cjs/loader:973:32)
at Function.Module._load (node:internal/modules/cjs/loader:813:14)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
何かローカルのHTMLファイルを指定して vivliostyle preview を起動してから Chromium のアドレスバーの #src=
のあとのURLをWebのURLに変えると、正常に組版表示されます(次の図)。なので、WebのURLをサポートするのは簡単なのでないかと思います。
こちらの機能追加はBreaking changeにならないので、v3リリース以降でも良いかと思い優先順位を下げていました。v3.1などで入れられると良さそうです!
v3.0 にぜひほしいと思うのですが、無理でしょうか?
以前、このIssueを解決できないかと試しに実装をすすめていたのですが、cssやWebフォントを読み込むlink要素が複数あった場合にどうすれば良いのか明確でないなど、限定的な対応にならざるを得ないということで中断していました。
現在は最初に見つかったlink rel="stylesheet"要素をテーマとして扱うということになっていたと思います。
これを解決するには、テーマを使った処理とはまったく別系統の処理に分岐させないと難しいのではないかと考えています。
Markdown+themeの扱いは、当面ローカルのファイルについてだけサポートでよいと思います。
内部的にconfigやthemeに該当する値が無いとエラーで落ちるという問題が以前はあった(現在はチェックしていませんが)ので、内部的にconfigやthemeをhttp/https用に用意してあげないといけない可能性があります。
もしくは、その前段階からバイパスルートを作るかです。
すでに入力がHTMLファイルの場合にはthemeの処理をしないようになっているので問題はないと思います。
把握しました。 もう少し詳細にソースを見てみます。
config.tsのcomposeSingleInputConfig関数の処理がローカルファイル専用になってしまっている部分がありますね。
const sourcePath = path.resolve(cliFlags.input);
const workspaceDir = path.dirname(sourcePath);
https://vivliostyle.github.io/vivliostyle_doc/ja/vivliostyle-user-group-vol1/ を入力すると、 sourcePath = /Users/takaiayumu/IdeaProjects/vivliostyle-cli/https:/vivliostyle.github.io/vivliostyle_doc/ja/vivliostyle-user-group-vol1 workspaceDir = /Users/takaiayumu/IdeaProjects/vivliostyle-cli/https:/vivliostyle.github.io/vivliostyle_doc/ja になってしまいます。
このあたりを特別扱いしてあげれば良さそうです。試してみます。
When a web URL is specified to savepdf, it causes "Error: ENOENT: no such file or directory". e.g.