2015-01-21 2 views
15

Мы планируем перенести наши утилиты для создания pdf-файлов из iText в PDFBox (из-за проблем с лицензированием в iText). С некоторыми усилиями я смог написать и разместить текст, рисовать линии и т. Д. Но создание таблиц с текстом, встроенным в ячейки таблицы, является проблемой, я просмотрел документацию, примеры, Google, Stackoverflow не смог найти ничего. Интересно, поддерживает ли PDFBox собственную поддержку для создания таблиц со встроенным текстом. Я последний раз воспользовался этой ссылкой https://github.com/eduardohl/Paginated-PDFBox-Table-SampleКак создать таблицу с помощью Apache PDFBox

+1

Что касается создания документа, PDFBox в основном эквивалентен API-интерфейсу низкого уровня для iText. То, что вам не хватает, это то, что заменит API высокого уровня iText. Я не знаю, что такое доступно для публики. – mkl

+0

Да, ты прибил его. Высокий уровень API для PDFBox для создания всех этих таблиц - это то, чего не хватает. Многие сообщества разработчиков переходят из iText в другие библиотеки PDF с открытым исходным кодом, и я уверен, что у кого-то будет элегантное решение. – Anil

+2

Вот еще один: https://github.com/dhorions/boxable –

ответ

19

Благодаря ссылкам, предоставленным Tilman. Используя boxable API (https://github.com/dhorions/boxable), я смог создать таблицу, которую я хотел. Просто FYI я хотел создать таблицу с переменным количеством ячеек. Например, строка 1 будет иметь 2 ячейки, строка 2 может содержать 5 ячеек, а в строке 3 может быть всего 3 ячейки. Я был в состоянии сделать это легко. Я следовал примеру1.java в ссылке, упомянутой выше.

+1

Я не смог найти Example1.java, о котором вы упомянули в своем ответе. Вставьте код или Example1.java. –

+0

@ DarshanPuranik: возможно, этот [тест] (https://github.com/dhorions/boxable/blob/master/src/test/java/be/quodlibet/boxable/TableTest.java) может вам помочь. –

2

Поскольку мне также нужны функции рисования таблиц для стороннего проекта, я сам реализовал небольшую библиотеку «table drawer», которую я сейчас загрузил в github.

Для получения такой таблицы - например - ... enter image description here

... Вам потребуется следующий код:

// Define the table structure first 
TableBuilder tableBuilder = new TableBuilder() 
     .addColumnOfWidth(300) 
     .addColumnOfWidth(120) 
     .addColumnOfWidth(70) 
     .setFontSize(8) 
     .setFont(PDType1Font.HELVETICA); 

// Header ... 
tableBuilder.addRow(new RowBuilder() 
     .add(Cell.withText("This is right aligned without a border").setHorizontalAlignment(RIGHT)) 
     .add(Cell.withText("And this is another cell")) 
     .add(Cell.withText("Sum").setBackgroundColor(Color.ORANGE)) 
     .setBackgroundColor(Color.BLUE) 
     .build()); 

// ... and some 10 rows with alternating background color 
for (int i = 0; i < 10; i++) { 
    tableBuilder.addRow(new RowBuilder() 
      .add(Cell.withText(i).withAllBorders()) 
      .add(Cell.withText(i * i).withAllBorders()) 
      .add(Cell.withText(i + (i * i)).withAllBorders()) 
      .setBackgroundColor(i % 2 == 0 ? Color.LIGHT_GRAY : Color.WHITE) 
      .build()); 
} 

// ... 

// Draw! 
(new TableDrawer(contentStream, tableBuilder.build(), startX, startY)).draw(); 

В настоящее время "Список функций" включает в себя:

  • набор шрифтов и размер шрифта на уровне таблицы
  • определяют единичные клетки с снизу-к р-, левой и правой границы ширина
  • раздельно
  • определить цвет фона на строке или клеточном уровне
  • определяют отступы (сверху, снизу, слева, справа) на клеточном уровне
  • определить цвет границы (на столе, строка или уровень ячейки)
  • задать выравнивание текста (справа или слева, в центре еще не реализован)

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

+0

Пытался дать этот снимок .. вам не хватает класса 'AWTColor' в источнике? – cklab

+0

Действительно! Спасибо за ваш отзыв! :) Очевидно, я не тщательно проверял запрос последнего тянуть. Повторите попытку, и теперь он должен работать. – philonous

Смежные вопросы