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

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

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

Re[1]: 仮想プリンタ(正確には用紙サイズ)を作りたい


(過去ログ 26 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■11955 / inTopicNo.1)  仮想プリンタ(正確には用紙サイズ)を作りたい
  
□投稿者/ 西院はサイと読みます (1回)-(2007/12/26(Wed) 11:04:49)

分類:[VB.NET/VB2005] 

 現在printdocumentで帳票を作成しています。
その際問題としてプリンタがつながっていないとプレビューができないことです。
(正確にはプリンタがつながっていないと用紙サイズの設定がコードでできない)
他のサイトでも調べたのですが仮想プリンタのインストールするということですが
他の端末で使用の際仮想プリンタのインストールをしなくて良い方法があるのでしょうか

あくまでも根本的な問題は
 PrintDocument1.DefaultPageSettings.PaperSize.Kind = Printing.PaperKind.A3
とすると「プロパティ 'Kind' は 'ReadOnly' です。」のエラーを回避したいのです。

なにか良い方法があれば教えて下さい。

引用返信 編集キー/
■11967 / inTopicNo.2)  Re[1]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ やじゅ (43回)-(2007/12/26(Wed) 12:53:21)
No11955 (西院はサイと読みます さん) に返信
>  PrintDocument1.DefaultPageSettings.PaperSize.Kind = Printing.PaperKind.A3
> とすると「プロパティ 'Kind' は 'ReadOnly' です。」のエラーを回避したいのです。
>
> なにか良い方法があれば教えて下さい。
>

PaperSize.Kindは読み取り専用なので設定は出来ません。
「PaperSize コンストラクタ」を呼び出して設定し、「A3」で有れば
Dim PS As System.Drawing.Printing.PaperSize
For Each PS In PrintDocument1.PrinterSettings.PaperSizes
  If PS.PaperName = "A3" Then
PrintDocument1.PrinterSettings.DefaultPageSettings.PaperSize = PS
End If
Next

引用返信 編集キー/
■11969 / inTopicNo.3)  Re[2]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ 西院はサイと読みます (2回)-(2007/12/26(Wed) 13:29:49)
No11967 (やじゅ さん) に返信
> PaperSize.Kindは読み取り専用なので設定は出来ません。
> 「PaperSize コンストラクタ」を呼び出して設定し、「A3」で有れば
> Dim PS As System.Drawing.Printing.PaperSize
> For Each PS In PrintDocument1.PrinterSettings.PaperSizes
>   If PS.PaperName = "A3" Then
> PrintDocument1.PrinterSettings.DefaultPageSettings.PaperSize = PS
> End If
> Next

やじゅ さん回答ありがとうございます。
上記のコードはプリンタが接続されてかつプリンタがA3用紙対応の場合のみ
機能します。しかし私がやりたいのは
A:プリンタの環境でまたはプリンタがつながっていても指定用紙未対応の状態でも 
  印刷プレレビュー画面表示はできるようにしたい
 (印刷はできなくてもかまいません)
B:仮想プリンタのインストールなしでAを可能にしたい
C:どうしても仮想プリンタが必要ならばアプリ運用時に別々に
インストールするのではなく開発環境に組み込んで使えるように
したい。
です。

引用返信 編集キー/
■11983 / inTopicNo.4)  Re[1]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ シャノン (241回)-(2007/12/26(Wed) 15:04:24)
一応マルチ報告です
http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200712/07120003.txt
引用返信 編集キー/
■11986 / inTopicNo.5)  Re[2]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ 西院はサイと読みます (3回)-(2007/12/26(Wed) 15:42:28)
No11983 (シャノン さん) に返信
> 一応マルチ報告です
> http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200712/07120003.txt
ここもみたのですが私のほしい回答はありませんでした。
誰かよろしくお願いします
引用返信 編集キー/
■11989 / inTopicNo.6)  Re[3]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ ほげ (1回)-(2007/12/26(Wed) 16:29:25)
No11986 (西院はサイと読みます さん) に返信
> ■No11983 (シャノン さん) に返信
>>一応マルチ報告です
>>http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200712/07120003.txt
> ここもみたのですが私のほしい回答はありませんでした。
> 誰かよろしくお願いします
だったら、そっちの掲示板を放置してないでそのように正直に書けよ。
引用返信 編集キー/
■11990 / inTopicNo.7)  Re[3]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ シャノン (242回)-(2007/12/26(Wed) 16:32:15)
No11986 (西院はサイと読みます さん) に返信
> ■No11983 (シャノン さん) に返信
>>一応マルチ報告です
>>http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200712/07120003.txt
> ここもみたのですが私のほしい回答はありませんでした。
> 誰かよろしくお願いします

もしマルチでなかったら申し訳ないです。
引用返信 編集キー/
■11993 / inTopicNo.8)  Re[4]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ ぽぴ王子 (313回)-(2007/12/26(Wed) 17:19:42)
ぽぴ王子 さんの Web サイト
シャノンさんのマルチポスト報告に対し

> ここもみたのですが私のほしい回答はありませんでした。

と回答されているということは、やはり指摘された投稿はマルチポストではなく別人の
ものだという主張ですね。

共通事項が多いので私もマルチポストなのかと思いましたが、否定されているようなので
一応別の方ということで。
ただ

> 他のサイトでも調べたのですが仮想プリンタのインストールするということですが
> 他の端末で使用の際仮想プリンタのインストールをしなくて良い方法があるのでしょうか

こう書かれていたということは、質問前にシャノンさんが指摘された質問はご覧になって
いたということでしょうか。だとすればそのように事前に書いておけば疑われることも
なかったかもしれません。



で、それを踏まえて。

> A:プリンタの環境でまたはプリンタがつながっていても指定用紙未対応の状態でも 
>   印刷プレレビュー画面表示はできるようにしたい
>  (印刷はできなくてもかまいません)

ちょっとわかりません。
プリンタドライバがインストールされていれば、プリンタがつながっていなくてもプレビューは
可能だと思いますが、そうでもないですか?
対応していない用紙は試したことがないのでわかりませんが、用紙サイズをプログラム側から
指定してやればできそうな気がします。

> B:仮想プリンタのインストールなしでAを可能にしたい

たぶん無理だと思います。
まったくプリンタドライバがインストールされていない状態では、Excelもプレビューが行えません。
なぜかと考えた場合に、プリンタのdpi値がわからないために例えばA4サイズの用紙分のドットが
どの程度必要なのかわからないわけで、そこでプレビューに失敗しそうな気がします。
逆に言えば、実際に出力するプリンタでなくとも、いずれかのプリンタドライバさえインストール
してあればプレビューできそうですが、どうでしょうか。(Aと被りますね)

> C:どうしても仮想プリンタが必要ならばアプリ運用時に別々に
> インストールするのではなく開発環境に組み込んで使えるように
> したい。

これもたぶん無理だと思います。
引用返信 編集キー/
■12000 / inTopicNo.9)  Re[3]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ Jitta (443回)-(2007/12/26(Wed) 21:39:35)
Jitta さんの Web サイト
2007/12/26(Wed) 21:40:54 編集(投稿者)

No11969 (西院はサイと読みます さん) に返信

> 上記のコードはプリンタが接続されてかつプリンタがA3用紙対応の場合のみ
> 機能します。しかし私がやりたいのは
> A:プリンタの環境でまたはプリンタがつながっていても指定用紙未対応の状態でも 
>   印刷プレレビュー画面表示はできるようにしたい
>  (印刷はできなくてもかまいません)
> B:仮想プリンタのインストールなしでAを可能にしたい
> C:どうしても仮想プリンタが必要ならばアプリ運用時に別々に
> インストールするのではなく開発環境に組み込んで使えるように
> したい。
> です。
>

 「A3用紙」と、人間が言うのは簡単ですが、コンピュータにとってはそんなに簡単なものではない、ということです。

 Excel や Word で、あるコンピュータで設定した印刷設定が、別のコンピュータ(というか、プリンタ&ドライバ)では違ったものになることがあります。これは、プリンタやドライバによって、印刷可能な範囲が異なるためです。
 印刷するときには、プリンタから、プリンタで使用可能な用紙サイズと、用紙サイズに対する実際に印刷可能な範囲の情報を、プリンタ<ins>(ドライバ)</ins>から取得してきます。この情報を元に、プリンタ デバイスに対するコンテキスト(DC)を作成しています。プリンタがない、ということは、使用可能な用紙サイズ、出力可能な解像度、用紙サイズに対する出力可能範囲が設定できない、ということです。したがって、これを指定可能な、ダミー プリンタを設定すればよい、ということです。

引用返信 編集キー/
■12002 / inTopicNo.10)  Re[1]: 仮想プリンタ(正確には用紙サイズ)を作りたい
□投稿者/ オベラ (1回)-(2007/12/26(Wed) 22:14:59)
2007/12/26(Wed) 22:33:01 編集(投稿者)
No11955 (西院はサイと読みます さん) に返信
>  現在printdocumentで帳票を作成しています。
> その際問題としてプリンタがつながっていないとプレビューができないことです。
> (正確にはプリンタがつながっていないと用紙サイズの設定がコードでできない)
> 他のサイトでも調べたのですが仮想プリンタのインストールするということですが
> 他の端末で使用の際仮想プリンタのインストールをしなくて良い方法があるのでしょうか
> 
> あくまでも根本的な問題は
>  PrintDocument1.DefaultPageSettings.PaperSize.Kind = Printing.PaperKind.A3
> とすると「プロパティ 'Kind' は 'ReadOnly' です。」のエラーを回避したいのです。
> 
> なにか良い方法があれば教えて下さい。
> 

もしも、A3用紙の大きさでPrintDocumentへ描くプログラムができるのであれば、プレビューを自作する方法
もできると思います。VS2005で作成されたドローツール風の印刷ソフトなどを最近見かけます。
これは、用紙の大きさを選ぶと画面に合わせた比率で用紙サイズができて、用紙上に載せた図形や文字が動かせるしくみのようです。Graphicオブジェクトに描く要領は同じなのでこんなのができるのではないか?

エラー自体は

  If PaperSize=False then
      For Each psize As Printing.PaperSize In PrintDocument1.PrinterSettings.PaperSizes
                    '指定の用紙サイズがサポートされているか(A3の縦横のピクセルなどの取得した合計など)
                    If (psize.Width + psize.Height) = 2823 Then
                        '指定の用紙サイズがあれば用紙サイズを設定する
                        e.PageSettings.PaperSize = psize
                        PaperSizeSet = True     '設定OKだった場合の処理など
                        Exit For
                    Else

                    End If
    
          Next
       End if 
       If PaperSizeSet = False Then
                MessageBox.Show("設定の用紙サイズを印刷する事ができません。", "!", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.PrintPreviewDialog1.Close()
                e.Cancel = True
            End If


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -