連載

Windows業務アプリケーション開発 Q&A #4

グレープシティ株式会社 八巻 雄哉
2006/09/16

本記事は、業務アプリケーション向けコンポーネントのベンダであるグレープシティのテクニカル・サポート担当に対して、実際にプログラマーから問い合わせがあった質問を取り上げて解説しています。

A3サイズのPDF文書がA4用紙に印刷されてしまう

 現在、A3サイズの帳票を作成し、PDFファイルへエクスポートする処理を業務アプリケーションで行っています(この処理はActiveReportsを使用しています)。しかし、エクスポートしたPDFファイルをAdobe Readerで開いてそのまま印刷を行うと、A4用紙に印刷されてしまいます。

 プリンタの設定ダイアログからA3用紙を選択して印刷すれば期待どおりの印刷を行うことはできるのですが、プリンタ側の設定にかかわらず、自動的にA3用紙に印刷されるようなPDFを作成することはできないのでしょうか?

 PDF文書では、A4、A3といった用紙の種類が指定されているわけではなく、ページの寸法がポイントという単位で指定されています。そのため、PDFファイル側から印刷する用紙の種類を指定することはできません。

 しかしながら、A3サイズのページを持つPDF文書であれば、自動的にA3用紙に印刷してほしいと思うのは当然でしょう。Adobe Reader 6.0以降では、下記のように設定することでページの寸法に合った用紙サイズを自動的に選択して印刷することができます。.

  1. Adobe Readerを起動します。
  2. Adobe Readerの[ファイル]メニューから[印刷]を選択します。
  3. [印刷]ダイアログボックスの[ページ処理]セクションにある[PDFのページサイズに合わせて用紙を選択]にチェックを入れます。

 上記の設定は、いったん設定してしまえばほかのPDFファイルを開いた場合でも有効となります。この設定により、A3用紙の寸法で作成されたPDF文書はプリンタの設定にかかわらず自動的にA3用紙に印刷されます。

【参考】Adobe:[225427]用紙サイズが混在する PDF ファイルを一度に印刷する方法(Windows 版 Acrobat 7.0/Adobe Reader 7.0)

 

セルに入力した全角ハイフン「‐」が消えてしまう

 SPREAD for .NET Windows Forms Edition(以下、SPREAD)を使用してWindowsアプリケーションを作成しています。セルに全角ハイフン「‐」と全角文字を含んだ文字列(例えば「あ‐」)を入力した場合、入力確定後に全角ハイフンが消えてしまいます。なぜこのような動作となるのでしょうか?

 この現象は、SPREADが.NET Framework標準のGraphicsクラス(System.Drawing名前空間)にあるDrawStringメソッドを使用してGDI+による文字列の描画を行っているために発生している現象です。これは単純にDrawStringメソッドだけを使って文字列の描画を行った場合にも、同様の現象を確認することができます。

 実際に現象を再現してみましょう。Visual Studio 2005(2002でも2003でも構いません)でWindowsアプリケーションのプロジェクトを新規作成し、フォームにPictureBoxコントロールを配置して下記のコードを記述してください。ここでは言語としてVisual Basicを使用しています。

Public Class Form1
  Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint

    e.Graphics.DrawString("あ‐", Me.Font, Brushes.Black, 0, 0)

  End Sub
End Class
リスト1 GraphicsクラスのDrawStringメソッドを使って「あ‐」を描画するコード

 このコードを実行すると下図のような表示結果となります。

リスト1の実行結果
「あ‐」を描画しようとしているがハイフンが表示されていない。

 全角ハイフンが描画されていないことを確認できます。

 この現象は、.NET Framework 1.x標準のLabelコントロールやDataGridコントロールでも同様に発生します。業務アプリケーションでDrawStringメソッドやこれらのコントロールを使用している場合には注意が必要です。

 ところで、.NET Framework 2.0標準のLabelコントロールや同じく.NET Framework 2.0から新しく加わったDataGridViewコントロールではこの現象が発生しません。なぜでしょうか。

 どうやら、.NET Framework 2.0の一部のコントロールでは、デフォルトの文字列描画方法が、GDI+による描画から従来のGDIによる描画に変更されているようです。

 .NET Framework 2.0のLabelコントロールにはUseCompatibleTextRenderingというプロパティが追加されており、このプロパティをTrueに設定することで、.NET Framework 1.xのときと同じくGDI+による描画を行うようになるため、本現象を再現させることができます。

 .NET Framework 2.0には、GDIによる文字列描画を行うためのメソッドとして、TextRendererクラスのDrawTextメソッドも新しく用意されています。では次に、このDrawTextメソッドを使った場合には本現象が発生しないことを確認してみましょう。

 先ほどのコードを下記のように書き換えてください。ただし、TextRendererクラスは.NET Framework 2.0で新しく追加されたクラスなので、今度はVisual Studio 2005でのみ確認できます。

Public Class Form1
  Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint

    TextRenderer.DrawText(e.Graphics, "あ‐", Me.Font, New Point(0, 0), SystemColors.ControlText)

  End Sub
End Class
リスト2 TextRendererクラスのDrawTextメソッドを使って「あ‐」を描画するコード

このコードの実行結果は下図のようになります。

リスト2の実行結果
TextRendererクラスのDrawTextメソッドではハイフンが正しく表示される。

 今度は全角ハイフンがきちんと描画されていることを確認できます。

 では、本題のSPREADではどのように解決すればよいのでしょうか。残念ながら現行のSPREADではDrawStringメソッドが使われるのを回避できませんので、入力された「‐」は「−」などの文字で置き換える、全角ハイフンが表示される可能性のあるセルのみ独自に描画を行う、などの処理が必要となります。

 なお、2006年9月27日に発売のSPREAD for .NET 2.5J Windows Forms EditionのVisual Studio 2005専用コントロールではDrawTextメソッドを使った描画が可能となっています。End of Article


八巻 雄哉(やまき ゆうや)
グレープシティ株式会社 テクニカルエバンジェリスト

2003年グレープシティ入社。PowerToolsシリーズのテクニカル・サポートを担当する傍ら、製品開発やマーケティングにも従事。現在は.NETとPowerToolsシリーズ普及のため、エバンジェリストとして活動中。本当は根っからの判官びいきなのだが、なぜかマイクロソフトだけは例外らしい。http://d.hatena.ne.jp/Yamaki/にてBlogを公開中。


インデックス・ページヘ  「Windows業務アプリケーション開発 Q&A」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH