Установить масштабирование страницы в PJL - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужно написать функциональность, которая берет PDF-документ и отправляет его на принтер с некоторыми командами PJL. Пока все хорошо, я беру документ, преобразую его в Postscript, отправляю файл postscript на принтер с необходимыми командами, и принтер печатает документ.

Теперь к актуальной проблеме: Большинство документов, которые должны быть напечатаны нашим программным обеспечением, являются счетами, поэтому они тщательно сделаны, так что каждый элемент точно позиционирован, и если он отключен на миллиметры распечатанный документ недействителен. При печати документа напрямую через Adobe или любое другое программное обеспечение для просмотра PDF, я могу выбрать опцию actual size, и все в порядке. Хотя, если я печатаю его через C # и PJL, документ имеет разные поля в зависимости от принтера, на котором он был напечатан. До сих пор мы использовали pdfprinting.net, и эту опцию можно было выбрать через pdfPrint.Scale = PdfPrint.ScaleTypes.None, но как я могу сделать это через PJL?

// This are all the commands that I've tried, none of which achieved what I need
var parameters = new Dictionary<string, string>
{
    { "SET USERNAME",userName},
    //{"SET PAPER", "A4" },
    //{"SET MEDIATYPE", "PAPER" },
    //{"SET TOPMARGIN", "TM6MM" },
    //{"SET PRINTAREA", "INKEDAREA" },
    {"SET MARGINS", "SMALLER" },
    //{ "ENTER LANGUAGE","PDF"},
    { "ENTER LANGUAGE","POSTSCRIPT"},
};

var documentText = "\x1B%-12345X@PJL JOB NAME=" + jobName + " DISPLAY=" + jobDisplay;
foreach (var parameter in parameters)
{
    documentText += "\r\n@PJL " + parameter.Key + "=" + parameter.Value;
}

documentText += "\r\n";
documentText += pdfString;
documentText += "\r\n\x0D\x0A\x1B%-12345X\r\n";

RawPrint(printerAddress, documentText, documentName);
// RawPrint() calls the printer methods found in 'winspool.drv', imported via 'DllImport'

1 Ответ

0 голосов
/ 30 апреля 2018

В справочном руководстве по PJL (издание 12, которое я видел последним) просто нет способа масштабировать содержимое страницы в PJL.

Даже если бы это было так, я бы удивился, если бы он перенесся в среду интерпретатора PostScript (в отличие от PCL), потому что PostScript имеет богатый набор функций для обработки такого рода настройки. Так что в основном вам нужно получить правильный PostScript.

Теперь, когда вы берете файл PDF и создаете из него PostScript, вы почти наверняка создаете общий PostScript; его устройство не зависит от устройства, поэтому оно не учитывает аспекты физического устройства.

Скорее всего, это будут такие вещи, как запасы оборудования и непечатаемые области. Многие устройства имеют ограничения в отношении того, на каких частях носителя они могут печатать, из-за обращения с бумагой. Конечно, они будут разными для разных принтеров.

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

Ghostscript, безусловно, может создавать PostScript (с использованием устройства ps2write), который соответствующим образом масштабируется и переводится для данного принтера, при условии, что вы знаете его характеристики. Фактически, если принтер достаточно сложен, программа PostScript может запросить принтер для получения некоторых из этих характеристик (ImagingBBox, PageOffset, Margins, ImageShift) и затем можно написать программу PostScript для динамического изменения размера содержимого страница, основанная на этих значениях (PostScript, созданный ps2write, делает , а не делает это ...).

...