Здравейте, в този пост ще се опитам да обясня как се генерира ПДФ файл на Java, използвайки външна библиотека. Във файлът ще вкараме стандартно тесте от 52 карти за игра.
Това е готовият ми сорс код, по който ще се движа.
Първото, което трябва да направим, е да изберем коя външна библиотека да използваме, тъй като има голям избор. Аз се спрях на може би най-разпространената – iTextPDF. A ето и линк за последната към момента версия 5.5.0. За момента ни е необходим само главният jar файл – itextpdf-5.5.0.jar. Добрата практика е да го поставим в /lib поддиректория в главната на нашия проект. След това (ако използвате еклипс) може да го включите в build-path-а по следния начин:
Така, вече сме добавили библиотеката е време да понапишем малко код 🙂 Ще се възползваме от методите, които ни предоставя iText.
Първо е нужно да създадем нов празен ПДФ файл и да го отворим, за да сме готови да пишем в него. Смятам, че кодът е self-explanatory:
Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream(„MyFirstFile.pdf“));document.open();
После създаваме таблица, в която ще записваме нашите карти:
PdfPTable table = new PdfPTable(4);table.setWidthPercentage(100);table.getDefaultCell().setFixedHeight(180);
Параметърът, който подаваме на конструктура new PdfPTable() показва желаният от нас брой колони. При мен са 4, но може да се направи например със 2 или 8. Чрез table.setWidthPercentage() определяме каква да е максималната част, в проценти, от листа, която ще заема таблицата. Ако желаем да е цялата, както във случая трябва да вкараме 100, тъй като по default e 80. За да зададем желаната височина на всяка клетка използваме table.getDefaultCell().setFixedHeight(), като аз реших, че при 180 най-много ми допада как изглежда.
Следва нагласянето на фонта:
BaseFont baseFont = BaseFont.createFont(„times.ttf“, BaseFont.IDENTITY_H, true);Font black = new Font(baseFont, 75f, 0, BaseColor.BLACK);Font red = new Font(baseFont, 75f, 0, BaseColor.RED);
Първият параметър, който подаваме на BaseFont.createFont() е фонтов файл, намиращ се на твърдия диск. Може да се използва фонт по избор. Ако е в папката на проекта е позволено да се напише само името му, иначе трябва пълния път до него (например C:/Windows/Fonts/times.ttf), но тогава има вероятност програмата да не работи коректно на други машини. След като базовият фонт е създаден, правим два фонта, които се различават единтвено по цвета, който подаваме като червърти паремтър на конструктура new Font(). За втори параметър записваме желания размер на шрифта, който много зависи от това каква точно таблица сме направили.
Картите генерирам по стандартен начин с два вложени цикъла и суич-кейс конструкции, на които не смятам за нужно да се спирам. Другият вариант е да се хард-коуднат картите и боите с два масива.
Всяка карта + боя се добавя в клетка от таблицата с table.addCell(). Като параметър подавам параграф, който създавам с конструктура new Paragraph() приемащ 2 параметъра – стринг и фонт, който желаем да използваме (предварително създадохме 2 еднакви с различен цвят и имена black и red):
table.addCell(new Paragraph(card + color, black));
или
table.addCell(new Paragraph(card + color, red));
Вече всичко е почти готово, само трябва да добавим цялата създадене таблица в отворения от нас документ, след което задължително да го затворим:
document.add(table);document.close();
Страхотна работа, доста съм взаимствал! Благодаря ти сърдечно. Само една препоръка за самия блог – давай на връзките на снимките в статиите си target = „_blanc“, за да се отварят в отделен прозорец. И още веднъж – благодаря за статията!