- PR -

印刷プレビューと実際の印刷のずれ

投稿者投稿内容
またきち
会議室デビュー日: 2003/11/07
投稿数: 8
投稿日時: 2005-11-14 16:17
皆さん、色々回答ありがとうございます。
こんな問題を抱えながらも別件と掛け持ちである為
返答遅れてしまいました。申し訳ありません。

引用:

sighさんの書き込み (2005-11-12 11:28) より:
専門外なので細かい突っ込みはしないでね。

1)用紙の設置位置がずれているかもしれません。
設置が正しく行われているかどうかの確認と、他の給紙口があればそちらでも試して見てください。
単に用紙の設置にガタがあるのであれば直せば済みますが、プリンタの組み付け精度が悪ければメーカーに言うしかないでしょう。とりあってくれるかどうかはわかりませんが。




これは問題ありません。
最初気にしてみましたが特にずれている訳でもなく、試せる限り色々なプリンタで試しましたが
印刷物は全て同様に右にずれて出力されていました。

引用:

sighさんの書き込み (2005-11-12 11:28) より:

2)DEVMODEの情報がころころかわる。
ドライバの情報が状況によって変わることも場合によってはあるようですし、ご自身で作成した部分で配慮が抜けている場合があります。(具体的にどこ?と問われても私には専門外で同僚からの伝聞なので突っ込みはご勘弁を)

3)PDL(LIPS, Postscript, PCL等)の仕様依存
PDLによって許容するマージンが異なっている場合があります。問題の生じるプリンタが複数のPDLエミュレーションを使えるなら他のPDLエミュレーションを使って見てください。



この辺は私は疎くて正直こちらの環境がどうなっているかも返答できない状況ですが
調べてみます。

引用:

jkさんの書き込み (2005-11-12 20:41) より:
プリンタフォントを使用する設定になっているのではないでしょうか?
プリンタフォントを使用したほうがスプールサイズを縮小できたり、印刷速度を
あげることが出来ますが、表示に使うフォントと実際に印刷に使うフォントで
フォント幅などに差異が生じるため、プレビューと印刷結果に違いが出るものだと思います。


プリンタフォントを使用する設定になっていましたので
常にTrueTypeフォントを使う設定にしましたが変化ありませんでした。

引用:

yangさんの書き込み (2005-11-14 15:13) より:
コントロールパネル -> 地域と言語のオプション
 地域オプション(タブ) -> カスタマイズ(ボタン)

 数値(タブ) -> 単位が "ヤードポンド法"になってませんか?

この場合, "メートル法"に修正することで直ります.
余白のサイズが小さくなることから、この可能性があります.
(メートルでいれたつもりがヤードポンドになると小さくなる)


こちらの環境では元々メートル法になってました。


ところで皆さんの環境ではこういった現象は起きたことないでしょうか?
初回投稿のサンプルアプリで会社の複数のマシンから複数のプリンタで印刷したところ
必ず起きたので
掲示板等で話題になってるものかと調べているのですが
中々同様の事例を見かけません。

もしお時間あるようでしたら
サンプルソースをコピーして実際に試して頂いて
同現象が発生したかどうか教えて頂けませんか?
こちらの環境が原因なのかソースが原因なのか切り分けしたいと思っています。
(正直行き詰まっています。。)

どうぞよろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-14 19:54
引用:

またきちさんの書き込み (2005-11-14 16:17) より:

もしお時間あるようでしたらサンプルソースをコピーして実際に試して頂いて
同現象が発生したかどうか教えて頂けませんか?
こちらの環境が原因なのかソースが原因なのか切り分けしたいと思っています。
(正直行き詰まっています。。)


そうですね、問題の切り分けのためにも協力します。
私は送って頂いて構いませんよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-14 21:08
引用:

同現象が発生したかどうか教えて頂けませんか?
こちらの環境が原因なのかソースが原因なのか切り分けしたいと思っています。



ご指摘の現象は再現しました。

VBでも同様な現象に遭遇しました。

どうやらPrintDocumentのバグ(または仕様?)のように思えます。

PrintDocumentはプリンターの場合OriginAtMargins=trueでないと正常に機能しないようです。

一方、プレビュー画面では、マージンを無視してしまうようです。

コード:

protected override void OnPrintPage(PrintPageEventArgs e)
{

base.OnPrintPage(e);

if ( [[[プリンターかプレビューか確認できれば]]]  //プリンターへ
{
e.Graphics.DrawRectangle(pen, new Rectangle( OFFSET_X, 0 ,e.MarginBounds.Width ,e.MarginBounds.Height));
}
else //プレビューへ
{
e.Graphics.DrawLine(pen, new Point(e.PageBounds.X + OFFSET_X + 100, e.PageBounds.Y + 100), new Point(e.PageBounds.X + OFFSET_X + 100, e.PageBounds.Bottom - 100));
e.Graphics.DrawLine(pen, new Point(e.PageBounds.X + OFFSET_X + 100, e.PageBounds.Y + 100), new Point(e.PageBounds.Right + OFFSET_X - 100, e.PageBounds.Y + 100));
e.Graphics.DrawLine(pen, new Point(e.PageBounds.X + OFFSET_X + 100, e.PageBounds.Bottom - 100), new Point(e.PageBounds.Right + OFFSET_X - 100, e.PageBounds.Bottom - 100));
e.Graphics.DrawLine(pen, new Point(e.PageBounds.Right + OFFSET_X - 100, e.PageBounds.Y + 100), new Point(e.PageBounds.Right + OFFSET_X - 100, e.PageBounds.Bottom - 100));
}
}




こんな風に書ければなんとかなりそうなんですけど、方法がわかりませんでした。

2005を待つか(解決するのかわかりません。ごめんなさい)、
プレビューも自作するかのどちらかになりそうな気がします。

(ちなみに私はプレビューは自分で書いています。)

[ メッセージ編集済み 編集者: ジブ 編集日時 2005-11-14 21:12 ]

[ メッセージ編集済み 編集者: ジブ 編集日時 2005-11-14 21:18 ]
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 2005-11-14 21:33
追記です。

印刷のほうを優先するとすれば

コード:
private void button1_Click(object sender, System.EventArgs e) 
{ 
	CustomPrintDocument doc = new CustomPrintDocument(); 
	doc.OriginAtMargins=true;
	printPreviewDialog.Document = doc; 

	printPreviewDialog.ShowDialog(); 

} 



としておいて

コード:
public class CustomPrintDocument : PrintDocument 
{ 
	private const int OFFSET_X = 0; 

	private Margins margins = new Margins(100,100,100,100);
	private Pen pen = new Pen(Brushes.Black, 2); 

	protected override void OnPrintPage(PrintPageEventArgs e) 
	{ 
		base.OnPrintPage(e); 
		e.Graphics.DrawRectangle(pen, new Rectangle( OFFSET_X, 0 ,e.MarginBounds.Width ,e.MarginBounds.Height)); 
	} 

	protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e)
	{
		e.PageSettings.Margins = margins; 
	}

} 



でなんとかなると思います。

プレビューが問題ですね。
またきち
会議室デビュー日: 2003/11/07
投稿数: 8
投稿日時: 2005-11-15 10:53
返答ありがとうございます。

同様の現象が再現する方がいらっしゃったので(ある意味)安心しました。

教えて頂いた
doc.OriginAtMargins=true
を設定することでこちらの環境でも余白がほぼ正しく設定された印刷物が出力されました。

ご指摘のプレビューの問題もありますし
実際に問題が発生したアプリケーションへ反映させるのはそう簡単にはいかなそうですが
とにかく取っ掛かりが掴めたので試行錯誤してみます。

大変助かりました。ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)