Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: C# - Rozložení stránky při tisku

Aktivity
Avatar
HONZ4
Člen
Avatar
HONZ4:12.10.2016 19:26

Ahoj. Učím se pracovat s tiskárnou. Snažím se vytisknout obrázek. Už nad tím pár hodin sedím a nemůžu přijít na to, co dělám špatně.

public partial class Form1 : Form
{
    private float documentDPI = 600.0f;

    public Form1()
    {
        InitializeComponent();
        CreateNewImage(21.0d, 29.7d);
    }

    // přepočet centimetrů na pixely
    int PixelFromCM(double cm)
    {
        double pixel = cm * documentDPI / 2.54d;
        return (int)pixel;
    }

    // Vytvoření obrázku
    private void CreateNewImage(double cmX, double cmY)
    {
        Bitmap bmp = new Bitmap(PixelFromCM(cmX), PixelFromCM(cmY), PixelFormat.Format32bppArgb);
        bmp.SetResolution(documentDPI, documentDPI);
        pic.Image = bmp;
        using (Graphics g = Graphics.FromImage(pic.Image))
        {
            g.PageUnit = GraphicsUnit.Millimeter;
            g.DrawRectangle(new Pen(Color.Black, 0.25f), 10, 10, 190, 277);
        }
    }

    private void PrintPage(object o, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(pic.Image, new PointF(0, 0));
    }

    // zobrazení dialogu s výběrem tikárny a tisk
    private void Print_Click(object sender, EventArgs e)
    {
        if (printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            try
            {
                printDocument1.PrinterSettings = printDialog1.PrinterSettings;
                printDocument1.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
                printDocument1.Print();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Chyba", MessageBoxButtons.OK);
            }
        }
    }

    //náhled tisku
    private void PrintPreview_Click(object sender, EventArgs e)
    {
        printDocument1.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
        printPreviewDialog1.ShowDialog();
    }
}

Chci vytisknout obrázek na A4 (210x297). Nakreslil jsem obdélník 190x277 mm tak, aby byl zleva i shora 10 mm od okraje.
Při náhledu tisku se zobrazuje správně (je 10 mm od okraje). Ale pokud jej vytisknu, tak je posunutý o kousek doprava a dolů (je jedno jestli tisknu na papír, nebo do souboru).
Poradíte mi prosím co s tím?

 
Odpovědět
12.10.2016 19:26
Avatar
HONZ4
Člen
Avatar
HONZ4:13.10.2016 0:12

Přikládám projekt ke stažení (VS 2015)

 
Nahoru Odpovědět
13.10.2016 0:12
Avatar
HONZ4
Člen
Avatar
HONZ4:15.10.2016 18:49

Vyřešeno.
Nahradil jsem:

private void PrintPage(object o, PrintPageEventArgs e)
    {
        e.Graphics.DrawImage(pic.Image, new PointF(0, 0));
    }

Tímto:

private void PrintPage(object o, PrintPageEventArgs e)
        {
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;
            e.Graphics.DrawRectangle(new Pen(Color.Black, 0.25f), 10, 10, 190, 277);
        }

Zkrátka, musí se to kreslit až při tisku.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
15.10.2016 18:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.