2013-08-22 2 views
0

Я пытаюсь ввести ручной код PostScript в более крупный документ, сгенерированный pscript5.dll.Каковы ограничения команды PostScript «image» на принтерах HP LaserJet?

Я использую подход, взятый из http://paulbourke.net/dataformats/postscript/ (по какому-то странной причины моего предыдущего кода, который был печатью 4-бита с одного шестигранными символами (0..f), используя тот же матрицу преобразования - перестал работать).

Таким образом, образец код:

100 200 translate 
26 34 scale 
26 34 8 [26 0 0 -34 0 34] 
{< 
ffffffffffffffffffffffffffffffffffffffffffffffffffff 
ff000000000000000000000000000000000000ffffffffffffff 
ff00efefefefefefefefefefefefefefefef0000ffffffffffff 
ff00efefefefefefefefefefefefefefefef00ce00ffffffffff 
ff00efefefefefefefefefefefefefefefef00cece00ffffffff 
ff00efefefefefefefefefefefefefefefef00cecece00ffffff 
ff00efefefefefefefefefefefefefefefef00cececece00ffff 
ff00efefefefefefefefefefefefefefefef00000000000000ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efef000000ef000000ef000000ef0000ef0000efefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efef000000ef00000000ef00000000ef000000efefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efef0000ef00000000000000ef000000ef0000efefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff00efefefefefefefefefefefefefefefefefefefefefef00ff 
ff000000000000000000000000000000000000000000000000ff 
ffffffffffffffffffffffffffffffffffffffffffffffffffff 
>} 
image 
showpage 

После этого, принимая исходное изображение (PNG), трансформированные в 1-бит (таким образом печать каждый пиксель либо как '00' или 'FF') на HP LaserJet 1320 я наткнулся на странную проблему: после того, как размер изображения достиг некоторого значения между 128x128 и 300x450, принтер печатает белый прямоугольник вместо ожидаемого изображения. Общий размер тестового документа - 2,9 МБ.

Ghostscript-9,07 интерпретатор показывает больше вставленные изображения должным образом, однако, кажется, отличаются по реализации с встроенным интерпретатором НРА - это стиль отлично работает с моим предыдущим кодом, указанным выше, и вседозволенностью программных интерпретаторов является тем

Каковы возможные подходы к решению проблемы whitesquaring, кроме того, чтобы обеспечить максимальный уровень печати. размер данных для печати с подходом «изображение»?


Upd: 300x300 подтвердил печати, но случайное 500x500 изображение не для печати :( Linebreaking на 280 + гольцов - не помогает

+0

попробуйте некоторые установленные коды, такие как pnmtops. – agentp

ответ

1

С очень большими изображениями вы начнете работать против. различные лимиты реализации. Общие лимиты - это 65535 элементов в строках, массивах и словарях. Если ваши данные изображения больше 64 тыс., их нужно будет нарезать на 64 тыс. штук и отдельно подать на image (для этой цели image принимает аргумент процедуры, а не только строковый источник данных).

Если вы просто вставляете данные для одного использования, вы можете использовать стандартную идиому для чтения в в буфер.

/buf 100 string 
26 34 8 [26 0 0 -34 0 34] 
{ currentfile buf readhexstring } 
image 
%hex data starts here 

image можно рассматривать как перекручивание оператор, который будет продолжать называть прилагаемую процедуру, чтобы получить больше данных. Процедуре даже не нужно возвращать полные строки, просто маленькие биты строки.

Смежные вопросы