Определение ориентации изображения (альбомная, книжная) для правильной печати отчета XHTML

Я пишу XSL-файл, который преобразует XML в отчет XHTML. Этот XML содержит идентификаторы изображений, которые представляют собой отсканированные на бумаге (US Letter), которые могут иметь различные размеры, а также могут быть в альбомной или портретной ориентации. Я ищу способ распечатать их в развернутом виде на странице бумаги (с пользовательским заголовком). Поэтому я могу либо повернуть изображение, чтобы оно поместилось на портретной странице, либо указать принтеру рассмотреть эту страницу в альбомной ориентации. Нечто похожее на это:

<img id="portrait" src="http://1.2.3.4/img/getImage.cgi?ID=1" />
<img id="landscape" src="http://1.2.3.4/img/getImage.cgi?ID=2" />

или же

<img src="http://1.2.3.4/img/getImage.cgi?ID=1" />
<div id="landscape">
    <img src="http://1.2.3.4/img/getImage.cgi?ID=2" />
</div>

Что я учел и почему это не работает

  • Я знаю, что XSL не может этого сделать, поскольку он только связывает изображение и не загружает их, поэтому он не знает об их свойствах.
  • HTML тоже не может этого сделать, так как он визуализируется с помощью преобразования XSLT, а код не может самоутверждаться;)
  • Я тоже не думаю, что это цель CSS. И JavaScript, вероятно, не будет хорошо работать с Flying Saucer (генерация PDF), хотя я хочу попробовать, но не нашел ясного пути.
  • У меня нет доступа к сценариям CGI, которые получают изображения в БД. Поэтому я не могу их изменить.

Что я не учел: - Оцените проблему наоборот, используя другой инструмент (например, скрипт perl), чтобы прочитать файл XML и создать правильный отчет HTML. Однако это будет другая технология, которой я бы хотел избежать, если это возможно.

Что вы думаете об этом, есть ли у некоторых из вас опыт с этим и какие-либо подсказки или предложения о том, как решить эту проблему?

Как всегда, большое спасибо за ваше время.

С наилучшими пожеланиями,

Мэнни

1 ответ

Если вы можете сделать какую-либо форму поверх сценария на стороне сервера, как вы сказали в своем комментарии, я бы подумал сделать что-нибудь

  1. Создайте дополнительный сценарий (например, /img/GetInfoData.cgi?ID=2, который возвращает XML, подобный следующему: <ImageInfo height="23" width="100" orientation="landscape" alt="Alt Text" src="/img/GetImage.cgi?ID=2"/>

  2. Тогда в вашем XSLT вы можете использовать <xsl:variable name="ImageInfo" select="document("/img/GetImageData.cgi?ID=2")/>

  3. Затем вы можете протестировать ImageInfo, используя <xsl:if test="$ImageInfo/ImageInfo/@orientation='landscape'>

Надеюсь, это поможет. Я уверен, что это не самое быстрое решение, но оно избавит вас от необходимости использовать слишком много дополнительных технологий.

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