C # Печать несовместима - PullRequest
       16

C # Печать несовместима

1 голос
/ 01 декабря 2009

У меня есть форма, в которой у меня есть несколько текстовых полей. Я хочу напечатать текст из этих текстовых полей в местах их расположения в форме. Это печать в данный момент с использованием кода ниже. Тем не менее, текст печатается по-разному на разных принтерах (на некоторых он печатается правильно, на некоторых слишком высоко и т. Д.) Он печатается на предварительно напечатанной форме с пробелами для текста, поэтому он должен быть достаточно точным. Чего мне не хватает, чтобы он печатался одинаково на каждом принтере?

public void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {    
        Panel curPanel = this.FormPanel;
        Graphics g = (Graphics)e.Graphics;
        Pen aPen = new Pen(Brushes.Black, 1);

        // Cycle through each control. Determine if it's a checkbox or a textbox and draw the information inside
        // in the correct position on the form
        int xLocation, yLocation;
        for (int j = 0; j < curPanel.Controls.Count; j++)
        {
            // Check if its a TextBox type by comparing to the type of one of the textboxes
            if (curPanel.Controls[j] is TextBox)
            {
                // Unbox the Textbox
                TextBox theText = (TextBox)curPanel.Controls[j];

                // Draw the textbox string at the position of the textbox on the form, scaled to the print page
                xLocation = theText.Bounds.Left;
                yLocation = theText.Bounds.Top;
                g.DrawString(theText.Text, theText.Font, Brushes.Black, xLocation, yLocation);
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 01 декабря 2009

Мне интересно, может быть, проблема в том, что разные принтеры вытягивают бумагу? Текст отключен максимум на полдюйма между принтерами. Я надеялся, что это не так, потому что в этом случае мне просто придется адаптировать свое приложение к конкретному принтеру клиента (не идеально). Кто-нибудь еще сталкивался с такой ситуацией?

1 голос
/ 02 декабря 2009

Скорее всего, это сочетание двух вещей:

  1. Вам необходимо явно установить поля / границы страницы. Различные принтеры будут иметь настройки полей по умолчанию и размера страницы. Используйте PageSetupDialog, чтобы помочь вам. Если вам нужна постоянная печать, вы можете сделать поля постоянными, но размер страницы должен быть ответственностью пользователя (а затем убедитесь, что ваши поля действительно соответствуют странице!).
  2. Текст должен быть размещен на странице относительно границ страницы. Я знаю, что ваш комментарий говорит, что так и будет, но не похоже, что он на самом деле реализован в вашем коде. Установка OriginAtMargins (на вашем PrintDocument элементе управления) на true очень помогает в этом.
1 голос
/ 01 декабря 2009

Проблема в том, что вы игнорируете, как текст выравнивается внутри элемента управления. Выравнивание по умолчанию примерно равно StringFormat.Alignment = StringAlignment.Center, его можно изменить для кнопок и флажков с помощью их свойства TextAlign. Вам нужно будет использовать перегрузку DrawString (), которая принимает Rectangle и StringFormat. Обратите внимание, что TextBox сложно, вы все равно можете быть на несколько пикселей.

Взгляните на Control.DrawToBitmap () для совершенно другого подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...