Мне нужно преобразовать данные CSV в файл PDF. Используя iText, я написал этот код:
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(pdfFile));
Document doc = new Document(pdfDoc, PageSize.A4.Rotate());
PdfFont font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
PdfFont bold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
iText.Layout.Element.Table table = new iText.Layout.Element.Table(UnitValue.CreatePercentArray(new float[] { 14, 6, 12, 16, 12, 12, 12, 12, 6 }));
using (BufferedReader br = new BufferedReader(new FileReader(excelFile)))
{
String line = br.readLine();
addRowToTable(table, line, bold, true);
while ((line = br.readLine()) != null)
{
addRowToTable(table, line, font, false);
}
}
doc.Add(table);
doc.Close();
и
public void addRowToTable(iText.Layout.Element.Table table, String line, PdfFont font, Boolean isHeader)
{
StringTokenizer tokenizer = new StringTokenizer(line, ",");
// Creates cells according to parsed csv line
while (tokenizer.HasMoreTokens())
{
Cell cell = new Cell().Add(new Paragraph(tokenizer.NextToken(",")+"\r\n").SetFont(font));
if (isHeader)
{
table.AddHeaderCell(cell);
}
else
{
table.AddCell(cell);
}
}
}
Проблема состоит в том, что вывод каждой записи не в новую строку, а вместо этого он добавляет непосредственно к предыдущей в той же строке, как показано на снимке экрана:

Исходный файл, открытый в виде электронной таблицы, выглядит следующим образом

Требуемый выход:
