由于单元格 iText 的最小宽度,表格宽度超出预期

问题描述 投票:0回答:1

我用 csv 文件中的表格创建了一个 pdf 文档。我在创建表格时设置了每列的宽度。但是如果单元格内容超过了设置的宽度,表格宽度就会增加,超过了pdf文档的大小。因此,右列不会出现在 pdf 文档的表格中。

如何解决这个问题,以便我的表格必须包含在 pdf 文档中并且所有列都可见?

itext7
1个回答
0
投票
public class ITextTableExample {
public static void main(String[] args) throws IOException {
    String filePath = "/Users/administrator/Documents/restpdfs/samplecsv.pdf";
    String csvPath = "/Users/administrator/Documents/restpdfs/Premeier_League - Sheet1.csv";
    PdfWriter writer = new PdfWriter(filePath);
    PdfDocument pdf =  new PdfDocument(writer);
    PageSize page = new PageSize(842, 680);
    Document document = new Document(pdf, page);

    PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA);
    PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
    
    Table table = new Table(new float[]{1.5f, 7, 2, 2, 2, 2, 3, 4, 4, 2});
    table.setWidthPercent(100)
            .setTextAlignment(TextAlignment.CENTER)
            .setHorizontalAlignment(HorizontalAlignment.CENTER);
    
    BufferedReader reader = new BufferedReader(new FileReader(csvPath));
    String line = reader.readLine();
    process(table, line, bold, true);
    
    while ((line = reader.readLine()) != null) {
        process(table, line, font, false);
    }
    reader.close();
    document.add(table);  
    document.close();
}

private static void process(Table table, String line, PdfFont font, boolean isHeader) {
    StringTokenizer tokenizer = new StringTokenizer(line,",");
    int columnNumber = 0;
    while(tokenizer.hasMoreTokens()) {
        if(isHeader) {
            Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken()));
            cell.setNextRenderer(new CellRenderer(cell));
            cell.setPadding(5).setBorder(new SolidBorder(Color.BLACK,0.5f));
            table.addHeaderCell(cell);
        } else {
            columnNumber++;
        Cell cell = new Cell().add(new Paragraph(tokenizer.nextToken()));
        cell.setFont(font).setBorder(new SolidBorder(Color.BLACK, 0.5f));
        switch (columnNumber) {
            case 4:
                cell.setBackgroundColor(Color.GREEN);
                break;
            case 5:
                cell.setBackgroundColor(Color.YELLOW);
                break;
            case 6:
                cell.setBackgroundColor(Color.RED);
                break;
            default:
                //cell.setBackgroundColor(Color.BLUE);
                break;
        }
        table.addCell(cell);
        }
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.