Как сохранить выравнивание данных при матричной печати независимо от размера (шага) символа

Я печатаю текст на матричном принтере, используя универсальный драйвер только для текста, и мне удается выровнять данные в столбцах бумаги, используя один пробел для каждого пустого символа печати на бумаге шириной 135 символов. Это работает для 10CPI в том смысле, что данные находятся в столбцах, где они должны быть, но не в том случае, если пользователь выбирает другой размер символа, например, 17CPI. В последнем случае выравнивание сохраняется, но данные не попадают в ожидаемое место. Например, символ, который должен быть на месте 120 в строке (120-й символ), в то время как при 10CPI он действительно печатается там, ближе к концу строки, при 17CPI он печатается в середине бумаги.

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

Итак, мои вопросы:

1) следует ли мне использовать более одного символа пробела, если шаг больше 10CPI? Я мог бы проверить это, но это не очень хорошая практика. Или мне попробовать использовать абсолютное горизонтальное положение с соответствующими командами esc? Тем не менее, согласно руководству escp2 это не рекомендуется.

2) следует ли мне отправлять \ r \ n внутри строки, которую я отправляю на принтер для каждой строки данных, или я должен отправлять только строку данных и в конце ее команду escp2 CR?

Заранее спасибо.


person mplexus    schedule 29.04.2014    source источник


Ответы (1)


1) Итак, я пришел к выводу, что на самом деле невозможно создать массив, который будет соответствовать странице, независимо от шага символа (CPI), который выбирает конечный пользователь. Это относится к фальцованной бумаге с предварительно нанесенной печатью. Как только пользователь решит изменить CPI, он должен перенастроить положение текста внутри каждой строки, что означает, что им нужно перенастроить расстояние между столбцами. Я даю пользователю такую ​​возможность, предоставляя номер строки и позицию в этой строке для каждого текста, который я собираюсь распечатать, в разделе настроек.

2) Я делаю второе. Я создаю двумерный массив и отправляю каждую строку, за которой следуют команды CR и LF escp.

person mplexus    schedule 23.05.2014