1

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

次に、ダイアログが印刷を要求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

3 に答える 3

4

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

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

そしてあなたのPrintDocumentに

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

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

于 2012-03-24T12:08:32.760 に答える
1

私はまったく同じ問題を抱えていました。ただし、ページの内容を正しい幅と高さで描画した場合 (つまり、それらを入れ替えた場合) は、すべて正常に機能しました。

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

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

最も良い解決策ではありませんが、常に横向きのページに描画していることを保証します。

于 2014-03-20T11:49:29.580 に答える
0

David Bolton のソリューションを接続する場所を見つけることができませんでしたが、別の方法を見つけました。

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

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

于 2012-07-25T10:37:15.607 に答える