Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / iText генерация таблицы / 25 сообщений из 43, страница 1 из 2
17.05.2012, 12:24:33
    #37798599
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Всем привет, нужна помощь в построении сложной таблицы при помощи iText.
Смотрел в интернете перепробовал, все что написано.
+ смотрел к мануале itext in action пока решения, что бы было красиво и работало не получается.
Суть в том что надо создать таблицу с шапкой, а именно колонку 4(см. приложение к посту), потому что все остальное вроде ясно.
Как сделать идеи кончились, помогите пожалуйста хотя бы куда копать, а лучше поделитесь кодом.
Сам пробовал делать таблицу в таблице смотрится фигово.
Заранее спасибо.
...
Рейтинг: 0 / 0
17.05.2012, 13:55:55
    #37798928
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Core12,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
com.itextpdf.text.pdf.PdfWriter pdfWriter = null;
            com.itextpdf.text.Document document = new com.itextpdf.text.Document(PageSize.A4);
            try {
                pdfWriter = com.itextpdf.text.pdf.PdfWriter.getInstance(document, new FileOutputStream(fileName));
            } catch (com.itextpdf.text.DocumentException ex) {
                Logger.getLogger(ITextGenerator.class.getName()).log(Level.SEVERE, null, ex);
            }
            document.open();
            document.addAuthor("");
            document.addCreator("");
            document.addSubject("Накладная");
            document.addCreationDate();
            document.addTitle("Please read this");
            XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
            String template = "html шаблон здесь";
            helper.parseXHtml(pdfWriter, document, new StringReader(template));
            document.close();



генерирует из шаблона строгого xhtml.
только вот как русский язык записхать в itext еще не придумал
...
Рейтинг: 0 / 0
17.05.2012, 13:59:00
    #37798942
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
можно вот так через flysaucer
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
FontFactory.defaultEmbedding = true;
            ITextRenderer renderer = new ITextRenderer();
            renderer.getFontResolver().addFont("PTS55F.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputStream is = new ByteArrayInputStream(template.getTemplate().getBytes());
            Document doc = db.parse(is);
            PDFCreationListener listener = new XHtmlMetaToPdfInfoAdapter(doc);
            renderer.setListener(listener);
            renderer.setDocument(doc, null);
            renderer.layout();
            os = new FileOutputStream(filename);
            renderer.createPDF(os);
            is.close();



из недостатков одну страничку может аж минуту генерировать
но зато и кирилицу поддерживает
...
Рейтинг: 0 / 0
17.05.2012, 14:48:33
    #37799079
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Спасибо.
А что должно быть в качестве шаблона ?

И еще не понял. Сей код
Код: java
1.
InputStream is = new ByteArrayInputStream(template.getTemplate().getBytes());



переменная template объектом какого класса она должна быть ?
...
Рейтинг: 0 / 0
17.05.2012, 15:05:36
    #37799143
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
А все про template разобрался, вопрос а где взять html шаблон руками сгенерить или как.
...
Рейтинг: 0 / 0
17.05.2012, 15:12:06
    #37799159
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Нет все таки про template не понял.
...
Рейтинг: 0 / 0
17.05.2012, 15:14:00
    #37799164
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
можно и руками только надо различать xhtml и html
xhtml более соотвествует xml поэтому результат будет лучше.
если генерировать из чистого Html тмогут быть ошибки.

вообще Html это просто
www.w3school.com
ну или как решение
www.htmlbook.ru
...
Рейтинг: 0 / 0
17.05.2012, 15:17:51
    #37799182
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
И последний вопрос.
Во втором коде переменная template это объект какого класса ?
Код: java
1.
2.
InputStream is = new ByteArrayInputStream(template.getTemplate().getBytes());
//template who is it
...
Рейтинг: 0 / 0
17.05.2012, 15:18:37
    #37799187
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Core12,

Вложить в ячейку другую таблицу, ну и правильно настроить отступы и бордюры, чтобы она не высовывалась.
...
Рейтинг: 0 / 0
17.05.2012, 15:27:37
    #37799224
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Core12И последний вопрос.
Во втором коде переменная template это объект какого класса ?
Код: java
1.
2.
InputStream is = new ByteArrayInputStream(template.getTemplate().getBytes());
//template who is it



template это String

я просто написал html шаблон который считывается в строку. в шаблоне есть переменные. типа ну
aDate, aNumber, aName, aAmount и так далее.

перед генерацией pdf меняете эти строки на те что достаете из своей модели данных. преобразовыываете строку в InputStream


а еще не забудьде css прямь внут Html затолкать а то если во внешнем файле то при упаковке шаблона в jar косяки могут быть.
css можно вставить в head секцию html напрямую.
...
Рейтинг: 0 / 0
17.05.2012, 15:38:07
    #37799249
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Спасибо понял.
У меня в pdf должны попадать данные динамически. Которые должны отображаться в строках таблицы, которую я сейчас ваяю,
если использовать код под номером два, то строки в таблице можно будет создавать как table.addCell ? Если не то как мне быть, сколько должно быть строк в таблице я не знаю.
...
Рейтинг: 0 / 0
17.05.2012, 15:44:03
    #37799263
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
llemingможно вот так через flysaucer

Core12, если планируете использовать эту "летающую тарелку", рекомендую ознакомиться с этим - Flying Saucer PDF Generator and Unicode , там же и про CSS есть кое-что.
...
Рейтинг: 0 / 0
17.05.2012, 15:46:36
    #37799272
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
в принципе можно генерировать с кусками встроенных тегов html
но смешивать код и шаблон как то нехорошо.

если совсем уж динамически то наверное лучше почитать про IText подробнее.
...
Рейтинг: 0 / 0
17.05.2012, 16:04:52
    #37799313
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
...
Рейтинг: 0 / 0
17.05.2012, 16:26:11
    #37799372
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
2 Garrick

а вам кирилицу удалось победить в iText?

там все нормально до тех пор пока пользуешся IText в чистом в виде.
стоит только попробовать использовать плагин к iText -> XMLWorker
с его помощью можно прямо из xhtml в pdf конвертировать.

sourceforge.net/projects/xmlworker/ то кирилицу никак не удается вывести
пробовал и шрифты юникода (bitstream vera dejavu arial unicode ms) выставить по умолчанию и так и эдак.
результат нулевой


flysaucer удалось заставить даже кастомные шрифты пользовать
...
Рейтинг: 0 / 0
17.05.2012, 17:02:10
    #37799488
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
lleming2 Garrick

iText -> XMLWorker
с его помощью можно прямо из xhtml в pdf конвертировать.

Мутный он какой-то, работает только с 5-ой версией iText, а у неё лицензия не правильня. Пробовал с какой-то 0.x бета версией - ничего не получилось. Сейчас там уже поновее версии есть. Но я уже нашел для себя flysaucer - отличная штука, никакой XMLWorker больше не нужен.
...
Рейтинг: 0 / 0
17.05.2012, 17:05:32
    #37799502
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
llemingв принципе можно генерировать с кусками встроенных тегов html
но смешивать код и шаблон как то нехорошо.

Можно задействовать Velocity || Freemaker
...
Рейтинг: 0 / 0
17.05.2012, 17:06:42
    #37799512
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Garrick,



мне тож понравилось только вот одну страничку pdf он генерирует из шаблона с полминуты. а таких документов мне много генерить причем не автоматом с базы а вручную данные с формы вводить.

а про лицензии я тож прочитал как то неприятно вдруг стало с 2.7.1
...
Рейтинг: 0 / 0
17.05.2012, 17:14:11
    #37799534
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
там правда есть одна класная вещь можно прямо с XHTMLPanel отправлять на печать.
правда и тут все не славо богу.

как то flysaucer неправильно считает размеры XHTMLPanel и в A4 только кусочек документа помещается.
и апи не позволяет переопределить ничего. половина параметров для печати встроена прямо в код либо принимается на основании ваше стоящего компонента вообщем скучать не приходится счас попробую на на невидимой панели большего размера нарисовать
документ авось выгорит, а то там половину кода придется переписать .
...
Рейтинг: 0 / 0
17.05.2012, 17:15:29
    #37799538
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
llemingGarrick,
мне тож понравилось только вот одну страничку pdf он генерирует из шаблона с полминуты. а таких документов мне много генерить причем не автоматом с базы а вручную данные с формы вводить.

У вас странички какие-то сложные? У меня документ в 5-6 страниц генерит за несколько секунд.
HTML заготовка -> Velocity (заполнение данными) -> FlyingSaucer (генерация PDF)
lleming а про лицензии я тож прочитал как то неприятно вдруг стало с 2.7.1
2.1.7 - по-моему, последняя "правильная" версия.
...
Рейтинг: 0 / 0
17.05.2012, 17:27:25
    #37799580
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
GarrickllemingGarrick,
мне тож понравилось только вот одну страничку pdf он генерирует из шаблона с полминуты. а таких документов мне много генерить причем не автоматом с базы а вручную данные с формы вводить.

У вас странички какие-то сложные? У меня документ в 5-6 страниц генерит за несколько секунд.
HTML заготовка -> Velocity (заполнение данными) -> FlyingSaucer (генерация PDF)
lleming а про лицензии я тож прочитал как то неприятно вдруг стало с 2.7.1
2.1.7 - по-моему, последняя "правильная" версия.

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

сами разработчики тоже "хвастались" что flysaucer не быстрый но не до такой же степени.
...
Рейтинг: 0 / 0
17.05.2012, 17:34:42
    #37799609
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
главным образом
Document.parse(InputStream is) метод занимает 2 минуты на отработу
...
Рейтинг: 0 / 0
17.05.2012, 17:36:02
    #37799613
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
FontFactory.defaultEmbedding = true;
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("PTS55F.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = new ByteArrayInputStream(template.getTemplate().getBytes());
Document doc = db.parse(is);
PDFCreationListener listener = new XHtmlMetaToPdfInfoAdapter(doc);
renderer.setListener(listener);
renderer.setDocument(doc, null);
renderer.layout();
os = new FileOutputStream(filename);
renderer.createPDF(os);
is.close();
...
Рейтинг: 0 / 0
17.05.2012, 17:45:21
    #37799641
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
странно если генерировать из файла то генерируется практически мгновенно.
...
Рейтинг: 0 / 0
18.05.2012, 09:37:22
    #37800256
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
iText генерация таблицы
GarrickМожно задействовать Velocity || Freemaker
И, кстати, в Velocity можно организовать циклы - как раз для заполнения таблиц с неизвестным заранее количеством строк
#foreach - Loops through a list of objects
В Freemaker навреное тоже должно быть.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / iText генерация таблицы / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]