Можно ли использовать Apache FOP для создания PDF-файлов, не позволяющих PDF-клиентам масштабировать и изменять ориентацию?

Я использую apache fop 1.0 для создания нескольких PDF-файлов для клиентов одного из наших клиентов. распечатка pdf читается сканером позже. К сожалению, сканер не может обрабатывать масштабированные распечатки, поэтому возник вопрос, можно ли предотвратить масштабирование pdf в pdf-клиенте, чтобы распечатку приходилось делать в заранее определенном размере. Я знаю о возможности шифрования pdf, которое можно использовать для предотвращения печати вообще, но мне нужно несколько другое. Итак, мои вопросы:

  • есть ли способ заставить pdf-клиент печатать pdf в определенном размере без масштабирования?
  • можно ли принудительно настроить ориентацию бумаги?
  • возможно ли это вообще, можно ли это сделать с помощью apache fop?

На самом деле я не думаю, что это возможно, но любая помощь будет принята с благодарностью.

с уважением

Тайлер


person tyler    schedule 13.02.2012    source источник
comment
Вы знаете, какой pdf-клиент они используют? А вы про масштабирование изображения или самого документа?   -  person Brian    schedule 13.02.2012
comment
нет, к сожалению, это может быть любой клиент. я ищу способ предотвратить масштабирование и изменение ориентации всего документа. О, и спасибо за быстрый ответ   -  person tyler    schedule 13.02.2012
comment
Я знаю, что вы можете установить макет страницы в тегах xsl-fo, но я не думаю, что программно с конца fop можно ограничить то, что происходит на стороне клиента. Это открыло бы всевозможные проблемы с безопасностью. вы можете установить масштабирование изображений в xsl-fo, но я никогда не видел ничего для масштаба документа в целом.   -  person Brian    schedule 13.02.2012
comment
Согласен, все равно спасибо за подтверждающие слова.   -  person tyler    schedule 13.02.2012


Ответы (2)


На самом деле вы не можете управлять тем, как приложение для просмотра печатает или отображает PDF-файл. Лучшее, что вы можете сделать, это прикрепить словарь ViewerPreferences (раздел 12.2 стандарта ISO 32000:2008), но это всего лишь подсказка для зрителя.

person Martin Schröder    schedule 14.02.2012
comment
Интересно, но похоже, что apache fop не поддерживает ViewerPreferences, по крайней мере, я не мог найти какую-либо полезную информацию в гугле в течение нескольких минут, но позже я снова посмотрю на это. Спасибо за подсказку. - person tyler; 14.02.2012
comment
@tyler, для подключения ViewerPreferences используйте Поддерживает ли FOP 2.1 настройки просмотра (для ФОП 2.1) - person Stefan Hegny; 27.08.2016

Если вы используете FOP из командной строки, вы можете посмотреть fop -out list, в котором представлен список mime-типов, которые будет генерировать FOP. См. также часто задаваемые вопросы по формату вывода и org.apache. fop.apps.MimeConstants для списка выходных форматов, которые вы можете сгенерировать программно.

Чтобы предотвратить изменение размера, в этом случае может помочь создание растрового вывода (например, PNG или TIFF). Например, из командной строки:

fop -xml data.xml -xsl transform.xslt -out "image/tiff" output.tiff

создаст файл TIFF. Используйте "image/png" для файла PNG и т. д.

Программно вы бы, например:

FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent userAgent = fopFactory.newFOUserAgent();

TransformerFactory factory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance();
Transformer transformer;

OutputStream out = new BufferedOutputStream(pdfOut[0].setBinaryStream(1L));

try {
  Fop fop = fopFactory.newFop(MimeConstants.MIME_PNG /* or MIME_TIFF */, userAgent, out);
  transformer = factory.newTransformer(new StreamSource(xsltIn.getCharacterStream()));
  Source src = new StreamSource(xmlIn.getCharacterStream());
  Result res = new SAXResult(fop.getDefaultHandler());
  transformer.transform(src, res);
} catch ...
person Luigi Bai    schedule 10.10.2014
comment
(Избегая) Масштабирование растрового вывода будет зависеть от приложения, с помощью которого вы его печатаете, точно так же, как и для pdf, не так ли? - person Stefan Hegny; 27.08.2016