Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Βοήθεια σε Print Document

Îåêßíçóå áðü ôï ìÝëïò SpySoftX. Τελευταία δημοσίευση από το μέλος mambo jumbo στις 26-06-2007, 17:30. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-02-2005, 16:20 1116

    Βοήθεια σε Print Document

    ρε παιδιά πώς βάζουμε background picture στο print document?

  •  05-02-2005, 16:45 1117 σε απάντηση της 1116

    Re: Βοήθεια σε Print Document

    Το PrintDocument δεν έχει properties BackColor, ForeColor, BackgroundImage κλπ όπως η φόρμα. Για να τυπώσεις μία σελίδα θα πρέπει στο PrintPage event να ζωγραφίσεις κατευθείαν στο αντικείμενο Graphics που σου δείνει το PrintEventArgs.
    Ο παρακάτω κώδικας ζωγραφίζει μια εικόνα και από πάνω της ένα string και μια έλλειψη. :

    private
    void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        e.PageSettings.Landscape=(pageCount==2);
        e.Graphics.DrawImage(img,e.MarginBounds);
        e.Graphics.DrawString("Hello World!",
    new Font ("Batang",36),Brushes.Black,30,30);
        e.Graphics.DrawEllipse(Pens.Yellow,e.MarginBounds);
        if (e.PageSettings.Landscape)
            e.Graphics.DrawRectangle(Pens.Black,e.MarginBounds);
            e.HasMorePages=(--_pageCount>0);
    }

    Πρόσεξε το HasMorePages και το PageSettings.Landscape. Πριν αρχίσω την εκτύπωση, έχω περάσει τον αριθμό των σελίδων στο πεδίο _pageCount. Την δεύτερη σελίδα θα την τυπώσω σαν Landscape. Κάθε φορά που τυπώνεται μια σελίδα, μειώνω τον αριθμό των σελίδων που μένουν. Μόλις φτάσουν στο 0, το HasMorePages γίνεται false και η εκτύπωση σταματάει.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  26-06-2007, 16:08 33184 σε απάντηση της 1117

    Απ: Re: Βοήθεια σε Print Document

    Παναγιώτης Καναβός:

    Το PrintDocument δεν έχει properties BackColor, ForeColor, BackgroundImage κλπ όπως η φόρμα. Για να τυπώσεις μία σελίδα θα πρέπει στο PrintPage event να ζωγραφίσεις κατευθείαν στο αντικείμενο Graphics που σου δείνει το PrintEventArgs.
    Ο παρακάτω κώδικας ζωγραφίζει μια εικόνα και από πάνω της ένα string και μια έλλειψη. :

    private
    void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        e.PageSettings.Landscape=(pageCount==2);
        e.Graphics.DrawImage(img,e.MarginBounds);
        e.Graphics.DrawString("Hello World!",
    new Font ("Batang",36),Brushes.Black,30,30);
        e.Graphics.DrawEllipse(Pens.Yellow,e.MarginBounds);
        if (e.PageSettings.Landscape)
            e.Graphics.DrawRectangle(Pens.Black,e.MarginBounds);
            e.HasMorePages=(--_pageCount>0);
    }

    Πρόσεξε το HasMorePages και το PageSettings.Landscape. Πριν αρχίσω την εκτύπωση, έχω περάσει τον αριθμό των σελίδων στο πεδίο _pageCount. Την δεύτερη σελίδα θα την τυπώσω σαν Landscape. Κάθε φορά που τυπώνεται μια σελίδα, μειώνω τον αριθμό των σελίδων που μένουν. Μόλις φτάσουν στο 0, το HasMorePages γίνεται false και η εκτύπωση σταματάει.


     
    Αν δεν κάνω λάθος, η συγκεκριμένη προσέγγιση θα τυπώσει την εικόνα συρρικνωμένη ή διασταλμένη έτσι ώστε να απλωθεί μέσα στα όρια του e.MarginBounds.

    Αν όμως θέλω να τυπώσω την εικόνα σε ολόκληρο το χαρτί χωρίς να αλλοιωθούν οι αναλογίες των πλευρών της τι πρέπει να κάνω?

    Αυτό που προσπαθώ να πετύχω είναι κάτι ανάλογο με εκείνο που γίνεται στο word του office όπου στο ίδιο doc μπορούμε να έχουμε και landscape pages και portrait pages. Αν δημιουργήσεις ένα τέτοιο κείμενο και επιλέξεις print preview το πρόγραμμα θα εμφανίσει τις landscape σελίδες οριζόντιες και τις portrait κατακόρυφες. Επίσης παρ’ ό,τι κάποιες σελίδες είναι
    landscape θα τυπωθούν στα όρια του e.MarginBounds αλλά με 90ο περιστροφή της εικόνας ώστε αυτή να απλωθεί στα όρια του χαρτιού χωρίς να αλλάξουν οι αναλογίες των πλευρών της. Πως μπορώ να πετύχω κάτι αντίστοιχο με ένα custom PrintDocument από εικόνες? Μπορεί να βοηθήσει κανείς?


    Ευχαριστώ εκ των προτέρων

  •  26-06-2007, 17:30 33187 σε απάντηση της 33184

    Απ: Re: Βοήθεια σε Print Document

    Οκ νομίζω πως το βρήκα...


    μέσα στο custom PrintDocument πρέπει να κάνουμε override την OnQueryPageSettings και εκεί μέσα να ορίσουμε το Landscape της currnet page του PrintDocument :


            protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e)
            {

                base.OnQueryPageSettings(e);
                if (this.IsPageLandscape(this.PageNumber)) //εδώ ελέγχω αν πρέπει να τυπώσω σε landscape ή portrait κάνοντας χρήση ενός custom property...
                {
                    e.PageSettings.Landscape = true;
                }
                else
                {
                    e.PageSettings.Landscape = false;
                }
            }

    για περισσότερες πληροφορίες http://msdn2.microsoft.com/en-us/library/system.drawing.printing.printdocument.querypagesettings(VS.71).aspx
    για να δουλέψει το συγκεκριμένο αντί για e.Graphics.DrawImage(img,e.MarginBounds); χρησιμοποιώ e.Graphics.DrawImage(img,0,0); και δεν προσθέτω την γραμμή που σχεδιάζει το Rectangle...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems