我用 csv 文件中的表格创建了一个 pdf 文档。我在创建表格时设置了每列的宽度。但是如果单元格内容超过了设置的宽度,表格宽度就会增加,超过了pdf文档的大小。因此,右列不会出现在 pdf 文档的表格中。
如何解决这个问题,以便我的表格必须包含在 pdf 文档中并且所有列都可见?
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);
}
}
}
}