Установить масштабирование страницы в PJL

Я должен написать функциональность, которая берет 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 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам