C# - problem z marginesami wydruku

0

Potrzebuję precyzyjnie wypozycjonować elementy na stronie (będę drukował etykiety). Napisałem sobie taki kod:

        private void testBtn_Click(object sender, EventArgs e)     //podpięte pod testowy przycisk
        {
            PrintDocument page = new PrintDocument();
            page.DocumentName="Etykiety";            
           
            page.PrintPage+= new PrintPageEventHandler(renderPage);


            pageSetupDialog1.Document = page;
            pageSetupDialog1.ShowDialog();                       //wyświetlam ustawienia strony


            printPreviewDialog1.Document = page;
            printPreviewDialog1.Show();                               //żeby wyświetlić podgląd wydruku
        }

        private void renderPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
//rysuję poziome kresek przez całą szerokość strony, w równych odstępach:
            for (float i = e.PageBounds.Top; i <= e.PageBounds.Bottom; i += e.PageBounds.Bottom / 8)
            {
                e.Graphics.DrawLine(Pens.Black,e.PageBounds.Left,i,e.PageBounds.Right,i);
            }
//rysuję pionowe kreski przez całą wysokość strony, w równych odstępach:
            for (float i = e.PageBounds.Left; i <= e.PageBounds.Right; i += e.PageBounds.Right / 3)
            {
                e.Graphics.DrawLine(Pens.Black, i, e.PageBounds.Top, i, e.PageBounds.Bottom);
            }
        }

Gdy klikam przycisk, najpierw wyświetla mi się ładne okienko z podglądem wydruku (gdzie ustawiam marginesy na 0).

Potem wyświetla się jeszcze ładniejsze okienko z podglądem wydruku.
Na podglądzie wydruku wszystko jest poprawnie - strona wyświetla się bez marginesów:
http://img16.imageshack.us/my.php?image=captureono.png
(jak się zrobi na podglądzie powiększenie, to widać, że kreski są tuż przy krawędzi strony)

Jednak gdy drukuję całość na drukarce, pojawia się problem - cały wydruk jest przesunięty o jakieś 7mm od lewej krawędzi i 5mm od górnej krawędzi, za to z kolei nie mieści się po prawej i u dołu:
http://img21.imageshack.us/my.php?image=img0909m.jpg

Jak widać w kodzie - rysuję cały czas tylko po obszarze ograniczonym e.PageBounds, tymczasem po wydrukowaniu okazuje się, że ten obszar nie pokrywa się z obszarem strony, tylko jest względem niej przesunięty - z lewej i u góry zaczyna się kawałek od krawędzi (co jeszcze zrozumiałbym), a z prawej i u dołu obszar ten wychodzi poza kartkę, co jest dla mnie kompletną tajemnicą.

Jako bonusowy problem dochodzi fakt, że końcowy wydruk nie pokrywa się z podglądem wydruku.

Czy ktoś może mi krótko objaśnić, w czym tkwi problem?

EDIT:
Dobra, udało mi się trochę zbliżyć do rozwiązania.
Jeżeli wydrukuję to na "drukarce" PDFCreator, to na tak utworzonym PDFie wszystko jest poprawnie. Jeżeli tego PDFa wydrukuję na papier, to oczywiście linie tuż przy krawędziach zostaną obcięte (marginesy drukarki), ale nic się nie przesunie... Co muszę zrobić w programie, żeby wydruk obcinał po prostu to, co nie mieści się w marginesach, zamiast przesuwać całą zawartość strony?

EDIT:
Temat poprawiony.

0

Przestać ustawiać marginesy na 0 i drukować w obszarze wydruku drukarki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1