Автоматически переносить текст на страницу печати? - PullRequest
8 голосов
/ 16 февраля 2011

У меня есть некоторый код, который печатает строку, но если строка говорит: «Бла-бла-бла» ... и нет разрывов строк, текст занимает одну строку. Я хотел бы быть в состоянии сформировать строку так, чтобы она переносилась по размерам бумаги.

private void PrintIt(){
    PrintDocument document = new PrintDocument();
    document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
    document.Print();
}

static private void Document_PrintText(PrintPageEventArgs e, string inputString) {
    e.Graphics.DrawString(inputString, new Font("Courier New", 12), Brushes.Black, 0, 0);
}

Полагаю, я мог бы определить длину символа и обернуть текст вручную, но если для этого есть встроенный способ, я бы предпочел это сделать. Спасибо!

Ответы [ 3 ]

12 голосов
/ 16 февраля 2011

Да, есть DrawString , способный автоматически переносить текст по словам. Вы можете использовать метод MeasureString , чтобы проверить, может ли указанная строка полностью нарисована на странице или нет, и сколько места потребуется.

Для этой цели также существует класс TextRenderer .

Вот пример:

         Graphics gf = e.Graphics;
         SizeF sf = gf.MeasureString("shdadj asdhkj shad adas dash asdl asasdassa", 
                         new Font(new FontFamily("Arial"), 10F), 60);
         gf.DrawString("shdadj asdhkj shad adas dash asdl asasdassa", 
                         new Font(new FontFamily("Arial"), 10F), Brushes.Black,
                         new RectangleF(new PointF(4.0F,4.0F),sf), 
                         StringFormat.GenericTypographic);

Здесь я указал максимум 60 пикселей в качестве ширины, тогда строка измерения даст мне размер, который потребуется для рисования этой строки. Теперь, если у вас уже есть размер, вы можете сравнить с возвращенным размером, чтобы увидеть, будет ли он правильно нарисован или усечен

11 голосов
/ 25 ноября 2011

Я нашел это: Как: распечатать многостраничный текстовый файл в Windows Forms

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    int charactersOnPage = 0;
    int linesPerPage = 0;

    // Sets the value of charactersOnPage to the number of characters 
    // of stringToPrint that will fit within the bounds of the page.
    e.Graphics.MeasureString(stringToPrint, this.Font,
        e.MarginBounds.Size, StringFormat.GenericTypographic,
        out charactersOnPage, out linesPerPage);

    // Draws the string within the bounds of the page
    e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
        e.MarginBounds, StringFormat.GenericTypographic);

    // Remove the portion of the string that has been printed.
    stringToPrint = stringToPrint.Substring(charactersOnPage);

    // Check to see if more pages are to be printed.
    e.HasMorePages = (stringToPrint.Length > 0);
}
0 голосов
/ 16 февраля 2011

Чувак, я страдаю от печати в HTML, полный кошмар. Я бы сказал, что, по моему мнению, вы должны попытаться использовать что-то еще, чтобы распечатать текст и т. Д. Передать параметры службам отчетов и открыть PDF, который пользователь может распечатать.

Или, возможно, вам может понадобиться отсчитать количество символов и явно указать разрыв строки!

...