スキップしてメイン コンテンツに移動

Adobe Acrobat / Readerは、拡張子が「.pdf」じゃないpdfファイルを印刷させるとおかしなことがおこるかもしれない

こんなことでハマってしまうとは・・。

いま仕事で作っているアプリに、pdfを編集したり印刷したり機能があります。
開発環境はVB.NET。Visual Studio 2008です。.NET Framework3.5SP1を使ってます。

pdfの編集機能は、もともと存在するpdfにiTextSharpを使っていくつかの情報を付加し、ユニークなファイル名をつけて保存。
ユニークなファイル名はVB.NET標準というか.NET Framework標準のSystem.IO.Path.GetTempFileNameというものを使用。

印刷機能は、上記編集機能で作ったpdfを、Adobe Readerを埋め込んだフォームを使って印刷する・・なんてことをやっています。

ぱっと見た感じ、これで問題なく動きそうだったのですが、一部のファイルの印刷で文字化けすることが確認されました。
調べてみると、化けているのは協力してもらっているデザイナーさんお手製のフォント。
んで何故か印刷じゃなくてAdobe Readerなんかを介して表示させると正常。なにこれ印刷だけおかしいの? ってな具合でした。

まあこういう時は深く考えずpdfにオリジナルフォントを埋め込まずアウトライン化してもらうのが楽なのですが、それはオトナの事情で無理とのこと。
こんなんプログラム側で対処できんのかー? と、一時は途方に暮れてしまた。アデュー俺の夏休み。

と思っていたのですが。
というか、タイトルからしてネタバレなのですが。

不意に、印刷用ワークファイルの拡張子を「.pdf」にして実行させたところ、正常にというか、狙った通りの形で印刷されました。
ユニークなファイル名を取得するSystem.IO.Path.GetTempFileNameというメソッドは、例えばWindows XPでは
C:\Documents And Settings\(ユーザー名)\Local Settings\Temp
ディレクトリにユニークな名前をるんですが、この拡張子が「.tmp」。
これをこのまんま使っていたのですが、そうすると上記のようなことが発生するわけです。

まあ、あんまりこういう処理を書くようなことはないかと思いますが、なにかの参考になればと思います。

それともう一つ。
印刷ではなく、例えばAdobe ReaderのCOMを使ったりして表示した際に同様の事象が発生した場合、環境設定の「表示」にある「ページのキャッシュを使用する」をオフにするといいことがあるかもしれません。
これも同様にハマりました。

コメント

このブログの人気の投稿

【VS2019】ある日急にデザイナーがエラーを吐いた時の対処メモ

仕事でVisual Studio 2019 Communityを使う時があるのですが、ある時、前日まで普通に使えていたプロジェクトのうち、フォームのデザイナがエラーを起こしてしまいました。 --- データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。 --- こんなメッセージが。 結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。

今更ながらマキシマムザホルモン「絶望ビリー」出演者が誰なのか調べてみた

ふと思い立ってマキシマムザホルモンの「絶望ビリー」のPVに登場する人たちを調べてみました。 ・・・といっても下記の二組(というか一組と一人)は不明なままです。 【不明な人たち】 ・アコギの二人組 ・フェンスを叩いて叫んでいるマッチョな人 ・アナウンサー ・クイズ番組の回答者(一人は亮君だけど) 【判明した出演者】 ・ビジュアル系のバンド・・・ PARFAIT (複数のサイトで確認。たぶん合ってる) ・アイドル系の女の子・・・ 辰巳 奈都子 ・ヒップホップ系の二人組・・・アンディとジョージ☆(というらしい。真偽不明) ・ギターを弾いて歌っている女性・・・ KIKU ( THE SWEET TRIP というバンドのvo/g) というわけで、全員はわかりませんでした。 個人的にはKIKUという人のギターの弾き方が気になっていたので、名前がわかって良かったですw

シーランド公国の爵位をとってみた

ほとんど出落ちみたいな話ですけどね・・。 ネット上ではフツーに情報としてありますが、 シーランド公国 という(自称)国家の爵位を取ってみました。