C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■83247 / )  Re[3]: PrintPreviewControl の表示方法について
□投稿者/ 魔界の仮面弁士 (1185回)-(2017/03/14(Tue) 19:30:33)
No83245 (夜叉丸 さん) に返信
> OriginAtMargins を trueにしてみましたが何も変化がないように思います。

あれ。余白サイズや用紙サイズが変わるわけでは無いですが、
e.Graphics.ResetTransform() しないかぎり、
原点座標がずれたままになったような…。

そもそも、pdoc.DefaultPageSettings.Margins や
QueryPageSettings イベントの e.PageSettings.Margins では
余白サイズを幾つに指定しているのでしょうか。


> 実際に印刷されるのが 58x100だったとしても表示が58x297の縦長で表示されるのを
> プレビュー画面の用紙サイズを58x100のサイズで表示したいのです。

pdoc.DefaultPageSettings.PaperSize = new PaperSize("任意の名前", 228, 394);
ppc.InvalidatePreview();

ということではなく?


> このプリンターにはありませんでした。
コントロールパネルの[デバイスとプリンター]あたりを参照していると思いますが、
用紙設定を追加するのは、『プリンターのプロパティ』ダイアログではなく、
『プリント サーバーのプロパティ』ダイアログの方ですよ。
http://www.nsgd.co.jp/nsd/NSDGoods/mswin_tl/TA12DK5/W8_Cp4.JPG

コントロールパネルで用紙名を事前定義しているのなら、new PaperSize せずとも
TM-m10 なら PaperSizes の一覧で返されます。どちらが良いのかはケースバイケースですが。



No83243 (夜叉丸 さん) に返信
> A4, LT, ハガキの設定値は読み込めますが、プリンター自体10cmの立方体なので
> 給紙することはできませんし、設定しなくてもRollに印刷できてました。

その点については、ドライバ設定次第ですね。

デフォルトでは、用紙サイズ "Roll Paper 58 x 297 mm" が既定の用紙として設定されているはず。
プリンタードライバーの[レイアウト]-[詳細設定]ボタンあたりで確認できるかと。


> その後とりあえず、以下のコードを呼び出し、戻り値も True を確認しています。
> pdoc.SetPaperSize("Roll Paper 58 x 297 mm");

"SetPaperSize" という名前のメソッドは、PrintDocument どころか
.NET Framework の他のクラスにも見当たらないですね。

https://referencesource.microsoft.com/#q=SetPaperSize
https://social.msdn.microsoft.com/Search/ja-JP?query=SetPaperSize


もしかして拡張メソッドでしょうか?

using System.Drawing.Printing;
using System.Linq;

public static class PrintDocumentExtensions
{
 public static bool SetPaperSize(this PrintDocument pdoc, string paperName)
 {
  PaperSize p = pdoc.PrinterSettings.PaperSizes.OfType<PaperSize>().FirstOrDefault(_ => _.PaperName == paperName);
  if (p != null)
  {
   pdoc.DefaultPageSettings.PaperSize = p;
   return p == pdoc.DefaultPageSettings.PaperSize;
  }
  return false;
 }
}
返信 編集キー/


管理者用

- Child Tree -