kazurayam / vba-callgraph

Generating a Call Graph for Excel VBA workbooks
https://kazurayam.github.io/VBACallGraph/
Apache License 2.0
0 stars 0 forks source link

FindUsageAppGrandTestが出力したPDFをセブンイレブンのネットプリントサービスに送ったがエラーになった #40

Closed kazurayam closed 1 month ago

kazurayam commented 1 month ago

Screenshot_20240817-135149

kazurayam commented 1 month ago

v0.1.17が作ったPDFはセブンイレブンで印刷できた。 v0.1.18が作ったPDFは上記の通り失敗した。

v0.1.18が作ったPDFに収録された画像はv0.1.17の画像と見た目がかなり違う。ひょっとしたら縦横のサイズが大きいのかもしれない。その結果、PDFの印刷面の縦横サイズが大きくなって、上記のようなエラーを起こしているのかもしれない。

kazurayam commented 1 month ago

com.kazurayam.vba.printing.PDFFromImageGeneratorがPNG画像を埋め込んでPDFを生成する。

このとき画像をせめてA2サイズより小さくなるように縮小する、とかすればいいんじゃないか?

あるいはMuPDFを使って元となるPDFを縮小できるんじゃないか?

kazurayam commented 1 month ago

https://oshiete.goo.ne.jp/qa/11068933.html

605 本サービスで登録可能な用紙サイズの範囲外です。もしくは、出力用紙サイズの設定がされていません。 登録された原稿の縦横のサイズが対応していない為、エラーが発生しています。 ネットプリントでご登録頂ける用紙サイズは最大A2(420mm×594mm)から最小A7(74mm×105mm)までとなります。原稿のサイズを以下の範囲にしていただくことで、登録可能になります。

短辺:74mm~420mm 長編:105mm~594mm PDF形式やXPS形式に変換可能でしたら、上記のサイズに収まるように変換いただいてから、登録いただくとエラーが解消される可能性があります。

kazurayam commented 1 month ago

https://www.printing.ne.jp/support/attention.html

kazurayam commented 1 month ago

v0.1.18 のFindUsageAppGrandTestが出力した lib/build/tmp/testOutput/com.kazurayam.vba.puml.FindUsageAppGrandTest/test_writeDiagram_Options_KAZURAYAM-poster.pdf を Adobe Acrobatで開いて 文書プロパティを見た。

image

ページサイズが 554.9 x 722.5 mm だった。

このPDFはネットプリントで印刷するのに大きすぎるのか?

kazurayam commented 1 month ago

ネットプリントでご登録頂ける用紙サイズは最大A2(420mm×594mm)

ああ、ちょっと大きすぎるんですね。

短辺が 554.9 / 420.0 = 1.32 倍 長辺が 722.5 / 594 = 1.26倍

kazurayam commented 1 month ago

入力のPDFの縦横比率を保存したまま、短辺が420mm以下、長辺が594mm以下になるように変換したい。

kazurayam commented 1 month ago

v0.1.18の FindUsageAppGrandTestがこう書いてあった。70行目あたり

        // modify the original PDF to a poster PDF
        MutoolPosterRunner mutool =
                new MutoolPosterRunner.Builder()
                        .x(2)
                        .y(2)
                        .original(original)
                        .build();

横を半分、たても半分に割って、ページにせよという指定だ。この通りに分割したその結果としてできたページが縦横ともちょっと大きすぎた。

ならば半分ではなくて三分の一づつに分割すればいいのではないか?そうすれば各ページの縦横とも少し小さくなるはず。ネットプリントサービスが受け付けてくれる範囲に収まるだろう。

kazurayam commented 1 month ago

v0.1.19dで FingUsageAppGrandTest を変更した。70行目あたり。

        // modify the original PDF to a poster PDF
        MutoolPosterRunner mutool =
                new MutoolPosterRunner.Builder()
                        .x(3)
                        .y(3)
                        .original(original)
                        .build();

横3つ、縦3つに分割して、合計9ページからなるPosterができた。そのPoster.pdfのサイズがどうなったかというと

image

369.9 x 481.8 mm

だ。これならネットプリントサービスが受け付ける最大のページサイズ 420mm×594mm の範囲に収まる。

kazurayam commented 1 month ago

v0.1.19が作ったPoster.pdfをセブンイレブンのネットプリントサービスに申し込んだ。 受け付けられた。 大丈夫だ。

kazurayam commented 1 month ago

これまでの経験を踏まえて考えるに、MutoolPosterRunnerがどういうパラメータを受け付けて動作するのが望ましいか、アイディアを持つことができた。

こうですね。

        // modify the original PDF to a poster PDF
        MutoolPosterRunner mutool =
                new MutoolPosterRunner.Builder()
                        .original(original)
                        .maxsize("A2")      // 420 x 594 mm
                        .build();

ポスターpdfのページの最大サイズをmaxsizeパラメータで指定する。"A2" とはつまりA2サイズの紙のこと。A2のサイズは具体的には420ミリメートルx594ミリメートル。

.maxsize("A3")

とかやってみてもいいが、多分収まらないんじゃないかな。

セブンイレブンのネットプリントサービスを使うなら上記の書き方でOK。このやり方ならば-xと-yつまり分割する数を人が考えて指定する必要はない。与えられた入力pdfの実際のサイズと、指定されたmaxsizeとに基づいて、ソフトウェアが -xと-yを導出する。

ちょっと疑問なのが、余白がどうなるのかな?Mutoolが元画像のどこに切り込み線を入れるのか?よくわからない。まあ、なるようになればいいんだけど。

別のissueを立てて、そちらで実装しよう。

kazurayam commented 1 month ago

v0.1.19で対処した。