Знает ли кто-нибудь (желательно с открытым исходным кодом) механизм компоновки PDF для Java, способный отображать таблицы с горизонтальными разрывами страниц? "Горизонтальное разбиение страницы" - это, по крайней мере, то, как функция названа в BIRT, но для уточнения: если в таблице слишком много столбцов, чтобы соответствовать ширине доступной страницы, я хочу, чтобы таблица была разделена по горизонтали на нескольких страницах, например. для таблицы из 10 столбцов столбцы 1-4 должны выводиться на первой странице и столбцы 5-10 на второй странице. Разумеется, это также следует повторять на следующих страницах, если в таблице слишком много строк, чтобы поместить вертикально на одну страницу.
До сих пор было довольно сложно искать продукты. Я считаю, что такую функцию можно назвать по-разному в других продуктах, что затрудняет использование тети Google для поиска подходящего решения.
До сих пор я пробовал:
-
BIRT утверждает, что поддерживает это, но фактическая реализация настолько ошибочна, что ее нельзя использовать. Я уверен, что для такой функциональности очевидно, что высота строки поддерживается на всех страницах, что позволяет выравнивать строки при размещении страниц рядом друг с другом. Однако BIRT рассчитывает требуемую высоту строки отдельно для каждой страницы.
-
У Джаспера нет поддержки.
-
Я также рассматривал Apache FOP, но я не нашел подходящего синтаксиса для этого в спецификации XSL-FO.
-
iText обычно немного слишком "низкоуровневый" для этой задачи (что затрудняет компоновку других частей предполагаемых документов PDF), но, похоже, не предлагает поддержки.
Так как, похоже, есть несколько десятков других механизмов создания отчетов или компоновки, которые могут или не подходят, и мне трудно понять, что именно нужно искать, я надеялся, что у кого-то, возможно, уже есть аналогичные требования, и может по крайней мере, предложение в правильном направлении. Относительно важно, чтобы продукт можно было легко интегрировать в серверное приложение Java, идеальная библиотека Java.
Теперь, чтобы строки были выровнены по всем страницам, высота строк должна быть рассчитана следующим образом:
Row1.height = max(A1.height, B1.height, C1.height, D1.height)
Row2.height = max(A2.height, B2.height, C2.height, D2.height)
В то время как BIRT, похоже, делает что-то вроде:
Page1.Row1.height = max(A1.height, B1.height)
Page2.Row1.height = max(C1.height, D1.height)
Page1.Row2.height = max(A2.height, B2.height)
Page2.Row2.height = max(C2.height, D2.height)