Линии обрезаются, когда Printer.Print на принтер "Общий текст" - PullRequest
0 голосов
/ 31 декабря 2008

Я обслуживаю старое приложение vb6, которое печатает ZPL-II.

Я только что обнаружил ошибку, если я печатаю длинные строки на принтере с помощью " Printer.Print ", строки будут обрезаны до первых 89 байтов / строка Он отлично работает и сохраняет строки, как и при использовании Печать или Копирование в DOS на LPT.

Откуда это поведение? Как я могу это исправить или обойти? Я бы хотел поддерживать все принтеры, включая LPT, USB и сетевой принтер.

PS. Я дважды проверяю фактические байты, отправленные на принтер путем печати в файл, а не LPT.

Ответы [ 2 ]

0 голосов
/ 09 марта 2011

Я работал, чтобы НЕ использовать Printer.Print. Но используя FileSystemObject для печати текстового файла по UNC-пути сетевого принтера.

Это работает как крем, но принтер должен быть сопоставлен. Даже локальный принтер.

0 голосов
/ 31 декабря 2008

Вам необходимо использовать функцию Printer.TextWidth и сравнить ее со свойством Printer.ScaleWidth для решения этой проблемы в Visual Basic 6. Он не выполняет автоматическое перенос строки для вас, как функция DOS.

Вы убедитесь, что шрифт, установленный на принтере, слишком правильно совпадает со шрифтом принтера. Для этого может потребоваться использовать один из шрифтов «принтера», с которым поставляется драйвер. В противном случае попробуйте использовать Courier New, который является шрифтом с фиксированным пробелом. В противном случае значение ширины текста не будет правильно сообщать ширину.

Альтернативой является использование строковой функции Len для подсчета количества символов и обработки усечения самостоятельно, если оно превышает 89 символов.,

Что-то вроде

  Do Until LineToPrint = ""
    TempD = Len(LineToPrint)
    If TempD > 89 Then
      Print Mid$(LineToPrint,1, 89)
      LineToPrint = Right$(LineToPrint,TempD-89)
    Else
      Print LineToPrint
      LineToPrint = ""
    End If
  Loop   

Если вам нравятся рекурсивные функции, вы можете написать это так:

Private Sub PrintLine(ByVal LineToPrint As String, ByVal Width As Integer)
    TempD = Len(LineToPrint)
    If TempD > Width Then
      Printer.Print Mid$(LineToPrint, 1, Width)
      LineToPrint = Right$(LineToPrint, TempD - Width)
      PrintLine LineToPrint, Width
    Else
      Printer.Print LineToPrint
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...