@iText_Q

Как конвертировать CSV-файл в таблицу с повторяющейся строкой заголовков?

Я создаю PDF-файл из CSV с помощью iText. Мне нужно отформатировать файл таким образом, чтобы строка заголовков (в начале каждой страницы) имела разный шрифт и цвет. Хочу предупредить, что я знаю, как устанавливать стиль/размер/цвет. Я не могу найти, как сделать это для строк заголовков моей таблицы.
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 1
@iText_Q Автор вопроса, куратор тега iText
Ваша проблема подробно описана в нашем обучающем видео, а именно в примере UnitedStates. В этом примере у нас есть CSV-файл с разными штатами США: united_states.csv

name;abbr;capital;most populous city;population;square miles;time zone 1;time zone 2;dst
ALABAMA;AL;Montgomery;Birmingham;4,708,708;52,423;CST (UTC-6);EST (UTC-5);YES
ALASKA;AK;Juneau;Anchorage;698,473;656,425;AKST (UTC-09) ;HST (UTC-10) ;YES
ARIZONA;AZ;Phoenix;Phoenix;6,595,778;114,006;MT (UTC-07); ;NO
ARKANSAS;AR;Little Rock;Little Rock;2,889,450;53,182;CST (UTC-6); ;YES
CALIFORNIA;CA;Sacramento;Los Angeles;36,961,664;163,707;PT (UTC-8); ;YES

Мы преобразовываем файл в PDF с повторяющимся заголовком: united_states.pdf

Код выглядит следующим образом:
public void createPdf(String data, String dest) throws IOException {
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
    Document doc = new Document(pdfDoc, new PageSize(PageSize.A4).rotate());
 
    PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA);
    PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
    Table table = new Table(new float[]{4, 1.5f, 3, 4, 3, 3, 3, 3, 1});
    table.setWidthPercent(100);
    BufferedReader br = new BufferedReader(new FileReader(data));
    String line = br.readLine();
    process(table, line, bold, true);
    while ((line = br.readLine()) != null) {
        process(table, line, font, false);
    }
    br.close();
    doc.add(table);
 
    doc.close();
}
 
public void process(Table table, String line, PdfFont font, boolean isHeader) {
    StringTokenizer tokenizer = new StringTokenizer(line, ";");
    while (tokenizer.hasMoreTokens()) {
        if (isHeader) {
            table.addHeaderCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)));
        } else {
            table.addCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)));
        }
    }
}


Обратите внимание на метод process(): у него есть параметр font, благодаря которому можно увеличивать шрифт, делать его жирным для заголовков, а также параметр isHeader, который определяет, когда нужно использовать метод addHeaderCell().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы