Avatar
HONZ4
Člen
Avatar
HONZ4:

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. října 19:26
Avatar
HONZ4
Člen
Avatar
 
Nahoru Odpovědět 13. října 0:12
Avatar
HONZ4
Člen
Avatar
HONZ4:

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. října 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.