Avatar billede swamboo Seniormester
02. november 2010 - 23:26 Der er 6 kommentarer og
1 løsning

Print-hjælp

Hejsa

Jeg forsøger at forstå og lege lidt med udskrivning fra en windows-form.
Følgende eksempel jeg har gravet frem udskriver en txt-fil - og det virker - Men hvis jeg nu gerne vil have udskrevet f.eks. string test = "Dette bliver udskrevet" kan det så lade sig gøre ved at ændre nogle få ting i denne kode?

    private void printButton_Click(object sender, EventArgs e)
    {
        try
        {
              streamToPrint = new StreamReader
              ("C:\\test_print\\test.txt");

            try
            {
                printFont = new Font("Arial", 10);
                PrintDocument pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler
                  (this.pd_PrintPage);
                pd.Print();
            }
            finally
            {
                streamToPrint.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
Avatar billede Syska Mester
02. november 2010 - 23:41 #1
Ja, men du viser os ikke alt din kode ...

Hvor er din pd_PrintPage ?

Det i hvert fald der du skal ned og lege vil jeg mene.

mvh
Avatar billede swamboo Seniormester
03. november 2010 - 00:21 #2
Så får i da bare det hele og lege med...

using System;
using System.Text;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;


public partial class Form1 : System.Windows.Forms.Form
{
    private System.ComponentModel.Container components;
    private System.Windows.Forms.Button printButton;
    private Font printFont;
    private PrintDocument printDocument1;
    private StreamReader streamToPrint;

    public Form1()
    {
        // The Windows Forms Designer requires the following call.
        InitializeComponent();
    }

    // The Click event is raised when the user clicks the Print button.
    private void printButton_Click(object sender, EventArgs e)
    {
        try
        {
              streamToPrint = new StreamReader
              ("C:\\test_print\\test.txt");

            try
            {
                printFont = new Font("Arial", 10);
                PrintDocument pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler
                  (this.pd_PrintPage);
                pd.Print();
            }
            finally
            {
                streamToPrint.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    // The PrintPage event is raised for each page to be printed.
    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        float linesPerPage = 0;
        float yPos = 0;
        int count = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        string line = null;

        // Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height /
          printFont.GetHeight(ev.Graphics);

        // Print each line of the file.
        while (count < linesPerPage &&
          ((line = streamToPrint.ReadLine()) != null))
        {
            yPos = topMargin + (count *
              printFont.GetHeight(ev.Graphics));
            ev.Graphics.DrawString(line, printFont, Brushes.Black,
              leftMargin, yPos, new StringFormat());
            count++;
        }

        // If more lines exist, print another page.
        if (line != null)
            ev.HasMorePages = true;
        else
            ev.HasMorePages = false;
    }


    // The Windows Forms Designer requires the following procedure.
    private void InitializeComponent()
    {
        this.printButton = new System.Windows.Forms.Button();
        this.printDocument1 = new System.Drawing.Printing.PrintDocument();
        this.SuspendLayout();
        //
        // printButton
        //
        this.printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
        this.printButton.Location = new System.Drawing.Point(32, 110);
        this.printButton.Name = "printButton";
        this.printButton.Size = new System.Drawing.Size(136, 40);
        this.printButton.TabIndex = 0;
        this.printButton.Text = "Print the file.";
        this.printButton.Click += new System.EventHandler(this.printButton_Click);
        //
        // Form1
        //
        this.ClientSize = new System.Drawing.Size(504, 381);
        this.Controls.Add(this.printButton);
        this.Name = "Form1";
        this.Text = "Print Example";
        this.ResumeLayout(false);

    }

}
Avatar billede Syska Mester
03. november 2010 - 00:36 #3
// Print each line of the file.
        while (count < linesPerPage &&
          ((line = streamToPrint.ReadLine()) != null))
        {
            yPos = topMargin + (count *
              printFont.GetHeight(ev.Graphics));
            ev.Graphics.DrawString(line, printFont, Brushes.Black,
              leftMargin, yPos, new StringFormat());
            count++;
        }

I overstående skriver du til det graphics object som bliver udskrevet ....

"line" er din string som bliver udskrevet ...
Avatar billede swamboo Seniormester
04. november 2010 - 20:51 #4
OKI - med din hjælp er jeg kommet en del videre - og er ved at forstå lidt af hvad der sker...

Nu skal jeg så bare lige finde ud af hvordan man får den til at læse ens "string" så den kan lave sideskift og evt dele linier når de er for lange.

Men du har allerede fortjent point! Så send venligst et svar - og hvis du har lette løsninger på ovenstående er dette naturligvis rigtig meget værdsat!!!

Takker og bukker...
Avatar billede Syska Mester
04. november 2010 - 21:07 #5
Svar.

Nej, har ingen pæn løsning på Print ... det er skod, skod og endnu mere skod :-)

Jeg mener der er events når man kommer over 1 side ... men du skal som sådan selv holde øje med det ... dvs måle/regne om det kan være på siden.

Print er bare ikke godt i WinForms, det er bedre i WPF. Måske du skal konvertere din App. WinForms er ved ligeså stille at dø ... og det vil i fremtiden blive 100% erstattet af WPF.
Avatar billede swamboo Seniormester
04. november 2010 - 21:25 #6
øøh - og hvad er WPF??
Word Perfect form ha ha ha

Og det gør ikk noget du ikk har en pæn løsning - jeg har fundet ud af at jeg kan pille noget fra et tidligere projekt hvor den tidligere udvikler har lavet noget print der virker - jeg gafler bare ivrigt derfra :o)
Avatar billede Syska Mester
04. november 2010 - 21:30 #7
Windows Presentation Foundation ...

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester