Определение ориентации изображения (альбомная, книжная) для правильной печати отчета 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 ответ
Если вы можете сделать какую-либо форму поверх сценария на стороне сервера, как вы сказали в своем комментарии, я бы подумал сделать что-нибудь
Создайте дополнительный сценарий (например, /img/GetInfoData.cgi?ID=2, который возвращает XML, подобный следующему:
<ImageInfo height="23" width="100" orientation="landscape" alt="Alt Text" src="/img/GetImage.cgi?ID=2"/>
Тогда в вашем XSLT вы можете использовать
<xsl:variable name="ImageInfo" select="document("/img/GetImageData.cgi?ID=2")/>
Затем вы можете протестировать ImageInfo, используя
<xsl:if test="$ImageInfo/ImageInfo/@orientation='landscape'>
Надеюсь, это поможет. Я уверен, что это не самое быстрое решение, но оно избавит вас от необходимости использовать слишком много дополнительных технологий.