Member 13610813 Ответов: 2

Как уменьшить расстояние между словами в печатной квитанции в VB.NET


моя проблема заключается в том, что когда я нажимаю кнопку печати, данные, которые присутствуют в текстовом поле, будут напечатаны .Но когда квитанция печатается, несколько слов занимают больше места между этими словами, сравнивая другие с другими словами.....
Я имею в виду, что порядок перемещения элементов из текстового поля на печатную страницу меняется, как будто некоторые слова говорят больше пробелов между ними...

Что я уже пробовал:

это мой код для печати
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawString(TextBox1.Text, TextBox1.Font, Brushes.Blue, 100, 100)


это код для вызова print
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  PrintPreviewDialog1.ShowDialog()


пожалуйста, помогите мне..... его срочный. пожалуйста

Maciej Los

Срочно - для кого?

Richard MacCutchan

Вам нужно проверить, какой шрифт используется для печати. А также не используйте фиксированные значения для местоположения, вычисляйте, где печатать текст, основываясь на размерах шрифта и строки.

2 Ответов

Рейтинг:
2

J a a n s

Я видел ту же проблему при печати с использованием шрифта по умолчанию (Microsoft Sans Serif). Если вы можете использовать TTF-шрифты, такие как Arial, этой проблемы может и не быть.

Вы можете попробовать что-то вроде

Private textToPrint As String
Private printFont As Font

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    textToPrint = TextBox1.Text
    printFont = New Font("Arial", 10)

    PrintPreviewDialog1.ShowDialog()
End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    Dim charsOnPage As Integer = 0
    Dim linesPerPage As Integer = 0

    e.Graphics.MeasureString(textToPrint, printFont, e.MarginBounds.Size, StringFormat.GenericTypographic, charsOnPage, linesPerPage)

    e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic)

    textToPrint = textToPrint.Substring(charsOnPage)

    e.HasMorePages = (textToPrint.Length > 0)
End Sub


Рейтинг:
1

OriginalGriff

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

Начните с использования отладчика, чтобы посмотреть, что именно находится в текстовом поле.Текст - это однострочный, многострочный, какой текст он содержит?
Затем посмотрите, где находятся "лишние пробелы": находятся ли они в определенных местах предложения? Или конкретные места на выходе?
Это происходит только с предварительным просмотром печати? Как выглядит настоящая распечатка? Что происходит, когда вы увеличиваете масштаб распечатки? Меняется ли интервал?

Я предполагаю, что это печать квитанции, поэтому она имеет узкую ширину бумаги - и когда вы рисуете на любых полях, текст "заворачивается" в новые строки, Когда вы этого не ожидаете; что проявляется как "дополнительный интервал", который вы не искали. Если это так, то вы ничего не можете с этим поделать, кроме как установить размер вашего текстового поля в соответствии с пространством, доступным на бумаге.

Но TBH, просто заполнение текстового поля текстом и печать его, вероятно, не лучший способ сделать квитанцию - вам следует подумать о том, чтобы сделать "правильное форматирование" фактической печати - очень редко можно увидеть квитанцию, которая просто имеет одинаковый размер текста повсюду, без каких - либо жирных, логотипов, мелких деталей адреса или даже "отслеживающего" штрих-кода-ни один из которых не может быть включен в стандартное текстовое поле.