PrintPreviewから作成されたグラフィックスはLandscapeではなくPortraitですか?

私はC#でカスタムページを印刷しています。実際に文書を印刷するときは、同じコードを使用してダイアログに表示するのと同様に、正しく動作します。コードが PrintPreview に使用されると、ダイアログはページをランドスケープモードで表示しますが、作成された Graphics はポートレート文書の寸法を持ち、プレビューが正しく表示されません。ここで私が使用しているコードのカットダウンバージョンです

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();
}

PrintPreview ダイアログが印刷を要求すると、 Print_Me 関数が呼び出されます。

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
1
追加された
ビュー: 2

3 答え

私は全く同じ問題を抱え、最終的にこれを見つけました。 OnQueryPageSettingsデリゲートハンドラを追加します。

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

あなたのPrintDocumentに

prnDoc.QueryPageSettings =新しいQueryPageSettingsEventHandler(OnQueryPageSettings);

それは私のためにそれを固定した。

4
追加された

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

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

次に、幅と高さに基づいてページの内容を描画します。

最適なソリューションではありませんが、私たちは常にランドスケープ・ページを作成しています。

1
追加された

私はデイビッド・ボルトンの解決策をどこに突きつけるべきかを知ることができませんでしたが、別の方法を見つけました。

http:// wieser-software .blogspot.co.uk/2012/07/landscape-printing-and-preview-in-wpf.html

基本的には、DocumentPaginatorのGetPageメソッドによって返される各DocumentPageにPageSizeを設定する必要があります。

0
追加された