Afbeeldingen gemaakt met PrintPreview zijn staand in plaats van liggend?

Ik ben aangepaste pagina's in C #. Bij het daadwerkelijk afdrukken van het document werkt het correct, net zoals het wordt weergegeven in een dialoogvenster (via dezelfde code). Wanneer de code wordt gebruikt voor PrintPreview toont het dialoogvenster de pagina in liggende modus, maar de Afbeeldingen die is gemaakt, heeft dimensies van een portretdocument en als zodanig wordt het voorbeeld niet correct weergegeven . Hier is een kortere versie van de code die ik gebruik

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

Vervolgens wordt een Print_Me -functie aangeroepen wanneer het dialoogvenster PrintPreview wordt afgedrukt:

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

Binnen DrawToDC gebruik ik het volgende om de afmetingen te krijgen die, zoals ik al zei, prima werken voor echt afdrukken en weergeven in een dialoogvenster:

dc.VisibleClipBounds.Width
dc.VisibleClipBounds.Height
1

3 antwoord

Ik had precies hetzelfde probleem en vond dit uiteindelijk. Voeg een OnqueryPageSettings-overdrachtshandler toe.

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

en naar uw PrintDocument

prnDoc.QueryPageSettings + = nieuwe QueryPageSettingsEventHandler (OnQueryPageSettings);

Dat maakte het voor mij.

4
toegevoegd

Ik had precies hetzelfde probleem. Alles werkte echter goed als ik de pagina-inhoud met de juiste breedte en hoogte tekende (dat wil zeggen, ze verwisselde).

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

Teken vervolgens de pagina-inhoud op basis van breedte en hoogte.

Niet de mooiste oplossing, maar zorgt ervoor dat we altijd naar een landschapspagina gaan.

1
toegevoegd

Ik kon er niet achter komen waar ik de oplossing van David Bolton kon aansluiten, maar vond een andere manier.

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

Fundamenteel, moet u de PageSize instellen op elke DocumentPage geretourneerd door de methode GetPage van uw DocumentPaginator.

0
toegevoegd