#java #xsl-fo #renderx
#java #xsl-fo #renderx
Вопрос:
Более конкретно, высоту элементов блока, которые будут отображаться в документе PDF с использованием RenderX. Скажем, например, у меня есть этот простой вывод xslfo с некоторым текстом и таблицей:
<?xml version="1.0" encoding="ISO-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body">
<fo:block>This is some simple text. How much space will I take?</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block font-weight="bold">Car</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold">Price</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>Volvo</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>$50000</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block>SAAB</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>$48000</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-and-caption>
</fo:root>
Могу ли я в любом случае определить, какую высоту будет занимать тело региона (т. Е. случайный текст и таблица) в отображаемом PDF-файле с использованием RenderX?
Комментарии:
1. Вы можете использовать промежуточный формат для его вычисления, но вам также необходимо понимать некоторые другие факторы, например, пересекает ли он страницу или страницы?
2. Привет @Muhammad Sagnia, у вас есть решение для этой проблемы? Я столкнулся с аналогичной проблемой.
xsl-region-before
Имеют динамическую высоту из-за содержащихся в них данных, поэтому я не знаю, с чего начатьxsl-region-body
данные, чтобы избежать перекрытия между двумя регионами
Ответ №1:
Вы не можете в каждом случае определить высоту содержимого до его форматирования, но вы можете обработать его после форматирования.
Теоретически, если бы у вас были метрики шрифтов для используемых шрифтов (и много свободного времени), вы могли бы написать программу, чтобы определить, сколько символов поместится в каждой строке, и подсчитать, сколько строк у вас будет на странице. Однако, если вы имеете дело даже с умеренно сложными документами реального мира, вам придется иметь дело с такими вещами, как кернинг, лигатуры, вторжения из боковых поплавков и неопределенное количество символов на странице — перекрестные ссылки на что-то на другой странице. В конечном итоге вы напишете второй форматировщик, чтобы выяснить, что будет делать первый форматировщик.
На практике форматировщики предоставляют свое собственное представление (или представления) областей в форматированном документе. XSL 1.1 включает в себя концепцию (но не спецификацию) «дерева областей» форматированных областей. (Смhttps://www.w3.org/TR/xsl11/#clear )
RenderX имеет свой промежуточный формат вывода, задокументированный наhttp://www.renderx.com/reference.html#IntermediateFormatSpecification
FOP имеет промежуточный формат вывода, задокументированный наhttps://xmlgraphics.apache.org/fop/2.4/intermediate.html. У FOP также было второе представление дерева областей для использования с тестами, но прямо сейчас я не могу сказать, используется ли это все еще или нет.
Антенный дом имеет формат XML-дерева областей со схемой вhttps://github.com/AntennaHouse/AreaTree и документация на https://antennahouse.github.io/AreaTree/en /.
Группа сообщества печати и верстки страниц создала набор функций расширения XSLT для запуска XSL-форматера и получения дерева областей в вашем преобразовании XSLT. Код находится наhttps://github.com/pplcg/XSLTExtensions и примеры на https://www.w3.org/community/ppl/wiki/XSLTExtensions. К сожалению для вас, функции расширения работают только с FOP и Antenna House.