2011-10-27 10 views
1

C#でカスタムページを印刷しています。実際に文書を印刷するときは、同じコードを使用してダイアログに表示するのと同様に、正しく動作します。 にコードを使用すると、ダイアログにページが横向きモードで表示されますが、作成されたGraphicsにはポートレイトドキュメントのサイズがあり、プレビューが正しく表示されません。ここで私はPrintPreviewから作成されたグラフィックはLandscapeではなくPortraitですか?

using (PrintDocument pd = new PrintDocument()) 
{ 
    pd.PrinterSettings.PrintToFile = false; 
    pd.DefaultPageSettings.Landscape = true; 
    pd.PrinterSettings.DefaultPageSettings.Landscape = true; 
    pd.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true; 

    PrintDialog pDialog = new PrintDialog(); 
    pDialog.Document = pd; 
    pDialog.PrinterSettings.DefaultPageSettings.Landscape = true; 
    pDialog.PrinterSettings.PrintToFile = false; 
    pDialog.Document.DefaultPageSettings.Landscape = true; 

    PrintPreviewDialog printPreview = new PrintPreviewDialog(); 

    printPreview.Document = pd; 
    printPreview.ShowDialog(); 
} 

を使用していたコード次にPrint_Me機能がときPrintPreviewダイアログ要求の印刷と呼ばれているの削減バージョンは次のとおりです。

private void Print_Me(object sender, PrintPageEventArgs e) 
{ 
    using (Graphics g = e.Graphics) 
    {  
     DrawToDC(g); 
     e.HasMorePages = hasMorePages; 
    } 
} 

DrawToDC以内に私はどの次元を取得するには、以下を使用します先ほど触れたように、実際の印刷やダイアログへの表示には問題ありません。

dc.VisibleClipBounds.Width 
dc.VisibleClipBounds.Height 

答えて

4

私はまったく同じiss ueと結局これを発見した。 OnQueryPageSettingsデリゲートハンドラを追加します。

void OnQueryPageSettings(object obj,QueryPageSettingsEventArgs e) 
{ 
    if (e.PageSettings.PrinterSettings.LandscapeAngle != 0) 
     e.PageSettings.Landscape = true;    
} 

とあなたのPrintDocumentに

prnDoc.QueryPageSettings + =新しいQueryPageSettingsEventHandler(OnQueryPageSettings)。

それは私のためにそれを修正しました。

1

私はまったく同じ問題を抱えていました。しかし、正しい幅と高さ(つまりスワップ)でページの内容を描画すると、すべて正常に機能しました。

int width = dc.VisibleClipBounds.Width; 
int height = dc.VisibleClipBounds.Height; 
if(width < height) 
{ 
    int temp = width; 
    width = height; 
    height = temp; 
} 

次に、幅と高さに基づいてページのコンテンツを描画します。

最適な解決策ではありませんが、私たちは常にランドスケープページを作成しています。

関連する問題