У меня есть служба, которая получает данные принтера через tcp/ip. Когда данные получены, существует ли надежный, эффективный способ проверки потока данных и определения того, являются ли данные данными PostScript и PCL? Например, есть ли символы, которые я мог бы найти в начале потока данных, чтобы указать формат?Определить, являются ли принятые данные PostScript или PCL
ответ
Данные Postscript должны начинаться с «%! Ps» или «%! PS» - это может быть более читаемая строка типа «%! PS-Adobe-3.0», но это в основном это.
Скорее всего, у PCL есть аналогичная подпись - я помню, как это было в прошлом.
Вам нужно будет следить за командами PJL до начала PCL или PostScript. Если у вас есть команды PJL в начале, вы часто увидите команду PJL, сообщающую вам, что тип данных имеет следующий «@PJL ENTER LANGUAGE = PCLXL» – BBoy
Хотя для конкретных реализаций может потребоваться это, '/%!.*/ 'string не является требованием для языка Postscript, для PRLM. Это часть соглашений DSC. –
Как насчет команды ENTER LANGUAGE? На что можно положиться? – NYSystemsAnalyst
Я бы, наверное, просто подсчитал количество escape-символов в файле. PCL будет иметь их. Постскриптум будет иметь gobs% знаков. Это не идеальное решение, но оно мертво просто, и я готов поспорить, что на самом деле он будет достаточно надежным.
Единственный «реальный» способ, который я вижу, заключается в том, чтобы фактически проанализировать PCL и проанализировать постскриптум и посмотреть, какой из них работает.
Я добавлю 2 ¢.
Как и другие, упомянутые здесь, ваш первый удар по программной идентификации документа состоял бы в том, чтобы посмотреть на первые два символа. Если он начинается с %!
, это PostScript, если он начинается с символа escape (hex 1B
, окт. 033
, ascii 27
), так как очень вероятно, что PCL начнется с команд PCL, то это PCL. Вероятно, это разрешит 99% документов, необходимых для обработки. Если он еще не известен, вы можете выполнить поиск документа для строки showpage
. Если это PostScript, у него должна быть страница showpage для отображения страницы. Если вы не можете найти его, и если в файле есть какие-либо escape-символы, вы знаете, что это PCL, и вы можете ошибаться на стороне PCL, если нет showpage, и нет escape-символов, потому что исходный текст файлы действительны PCL, и принтеры могут вытолкнуть их, когда они придут.
Являются ли ваши клиенты печати как-то «согласованными» в представленных структурах данных PostScript и/или PCL? Если да, может быть очень легко определить тип файла. Если нет, это требует гораздо больших усилий ... –
Да, они согласуются. В итоге я использовал комбинацию информации в ответе ниже. Сначала я ищу команду PJL ENTER LANGUAGE. Если я найду это, я сделаю определение на основе этого значения. В противном случае, я ищу%! PS, потому что все данные PostScript должны соответствовать соглашениям DSC. Если я все еще не могу принять решение, я просто по умолчанию отказываюсь от PCL, потому что это то, что используется подавляющим большинством клиентов. – NYSystemsAnalyst