Как конвертировать CSV в PDF в c# - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно преобразовать данные 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);
            }
        }
    }

Проблема состоит в том, что вывод каждой записи не в новую строку, а вместо этого он добавляет непосредственно к предыдущей в той же строке, как показано на снимке экрана:

enter image description here

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

enter image description here

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

enter image description here

1 Ответ

0 голосов
/ 09 апреля 2020

Вы создаете таблицу с 9 столбцами:

new iText.Layout.Element.Table(
    UnitValue.CreatePercentArray(
        new float[] { 14, 6, 12, 16, 12, 12, 12, 12, 6 }
    )
);

Вот почему вы видите неожиданное поведение.

Создайте таблицу с 4 столбцами:

new iText.Layout.Element.Table(
    UnitValue.CreatePercentArray(
        new float[] { 35, 15, 25, 25 }
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...