Строки обрезаются при печати на принтере.Печать на принтере “Только общий текст”

StackOverflow https://stackoverflow.com/questions/402062

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение 2

Я старался не пользоваться принтером.С принтами.Но используйте FileSystemObject для печати текстового файла по UNC-пути сетевого принтера.

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

Другие советы

Вам необходимо использовать функцию 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top