set format of header row using iText

2019-01-29 09:08发布

问题:

I am generating a PDF file from a CSV using iText5. I need to format the file so that the header row (which occurs in the beginning of every page) should be in a

bigger font

bold and

highlighted by a background colour

Just to be clear, I know how to set the font style/size/colour. I'm having a tough time finding out how to do that for the header rows

How can I do that? Please help.

Thanks in advance

回答1:

Your requirement is explained in large detail in our tutorial video, more specifically in the UnitedStates example. In this example, we take a CSV file containing the different states of the US: 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

And we parse these into a PDF with a repeating header: united_states.pdf

The only difference, is that you want the text in the header to be bold. This requires only a minimal change to the code:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document(PageSize.A4.rotate());
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(9);
    table.setWidthPercentage(100);
    table.setWidths(new int[]{4, 1, 3, 4, 3, 3, 3, 3, 1});
    BufferedReader br = new BufferedReader(new FileReader(DATA));
    String line = br.readLine();
    process(table, line, new Font(FontFamily.HELVETICA, 16, Font.BOLD));
    table.setHeaderRows(1);
    while ((line = br.readLine()) != null) {
        process(table, line, new Font(FontFamily.HELVETICA, 12));
    }
    br.close();
    document.add(table);
    document.close();
}

public void process(PdfPTable table, String line, Font font) {
    StringTokenizer tokenizer = new StringTokenizer(line, ";");
    while (tokenizer.hasMoreTokens()) {
        table.addCell(new Phrase(tokenizer.nextToken(), font));
    }
}

Take a close look at how the process() method was changed: it now accepts a font parameter so that we can define a bigger, bolder font for the header.



标签: java itext