Любой системный принтер для печати на нём XSL-FO шаблонов

driver: ru.bitel.frk.driver.fop.Driver

Представляет собой FO-транслятор, который действует так:

  1. формирует из приходящих данных (текстовые строки) xml;

  2. обрабатывает с помошью этой xml указанный заранее xsl:fo шаблон;

  3. выводит его на печать на указанном принтере.

Необходимая конфигурация сервера печати:

# Название принтера в системе (если не указан, то возьмётся принтер по умолчанию, прописнный в системе, если и такого нет, будет ошибка)
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-сервер, т.к. шаблон загружается и распознаётся при инициализации драйвера во время старта сервера. Для оптимизации по скорости.