Любой системный принтер для печати на нём XSL-FO шаблонов
driver: ru.bitel.frk.driver.fop.Driver
Представляет собой FO-транслятор, который действует так:
формирует из приходящих данных (текстовые строки) xml;
обрабатывает с помошью этой xml указанный заранее xsl:fo шаблон;
выводит его на печать на указанном принтере.
Необходимая конфигурация сервера печати:
# Название принтера в системе (если не указан, то возьмётся принтер по умолчанию, прописнный в системе, если и такого нет, будет ошибка)
printer=pdf
# Шаблон xsl. Прямой путь к файлу (можно, конечно, положить его в xsl сервера
# биллинга, тогда сервер печати, конечно, не стартует без старта последнего)
#xsl=http://127.0.0.1:8080/bgbilling/xsl/cashcheck_fop.xsl
#xsl=file:///home/dimon/workspace/bgbilling/modules/cashcheck/server/server_files/xsl/cashcheck_fop.xsl
xsl=file:///usr/local/BGCashcheckServer/xsl/cashcheck_fop.xsl
# Имя задания печати (произвольное), может быть "не задано"
jobName=fop driver printing
# Количество копий, может быть "не задано"
jobCopies=
1
К этому драйверу нужны две сущности: скрипт поведения, который формирует нужные строки для драйвера, и xsl-шаблон, который преобразуется с помощью xml, сформированной драйвером, в готовый документ для печати. Пример скрипта поведения см. ниже, в разделе "настройка внешнего вида чеков". Смысл скрипта состоит в заполнении набора строк с помощью конструкций вида
check.addString(
"строка"
);
порядок строк важен для шаблона, там они выбираются по номерам. Список строк драйвер преобразует в xml такого вида:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<data clientsumma=
"10.0"
summa=
"10.0"
>
<line n=
"1"
text=
"120,00р."
/>
<line n=
"2"
text=
"строка2"
/>
<line n=
"3"
text=
"строка3"
summ=
"10.0"
dep=
"15"
/>
</data>
Такую xml и надо иметь ввиду при создании и редактировании xsl-шаблона. Последняя, третья, строка получена с помощью метода addPayment в скрипте обработки, а не addString. Сам шаблон представляет собой любой валидный FO-документ. Получить в этом шаблоне значения строковых параметров из драйвера можно таким кодом (см. исходную xml выше):
<!-- Сумма платежа:
120
,00р. -->
<xsl
:variable
name=
"param_summ"
select=
"line[@n='1']/@text"
/>
Таким образом, в xsl-переменной окажется значение аттрибута "text" из первой строки ("n"=1).
При правке или замене XSL-FO шаблона при необходимости видеть результат внесённых изменений необходимо перезагрузить CashCheck-сервер, т.к. шаблон загружается и распознаётся при инициализации драйвера во время старта сервера. Для оптимизации по скорости.