2017-02-02 2 views
1

У меня есть две части для моего проекта C# для моей компании, и моя компания хочет, чтобы я создал файл pdf из csv.Создайте таблицу и добавьте ее в pdf с помощью C#?

I need to populate the fields of a pdf 
I need to add a table below the populated section on the blank area of the page (and this table needs to be able to rollover to the next page). 

Я могу сделать это отдельно (заполнить pdf-файл и создать таблицу). Но я не могу эффективно их объединить. Я попытался сделать doc.add (table), который приведет к тому, что таблица будет на следующей странице pdf, чего я не хочу.

Мне по существу просто нужно указать, где начинается таблица на странице (чтобы она не перекрывала существующий контент), а затем печать таблицы на существующий pdf.

Мой другой вариант, если это не работает, пытается добавить поля в исходный pdf, который будет заполнен содержимым таблицы (так что вместо этого он будет полевой таблицей).

Любые предложения?

EDIT:

Я новичок в IText и не использовали columntext раньше, но я стараюсь, чтобы проверить это в следующем коде, но не отображается в таблице. Я посмотрел на другие примеры столбцов, и я не видел точно, где столбчатый текст добавляется обратно в pdf.

//CREATE FILLED FORM PDF 
PdfReader reader = new PdfReader(sourcePath);  
PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream(destPath)); 
pdfStamper.setFormFlattening(true); 
AcroFields form = pdfStamper.getAcroFields(); 

form.setField("ID", "99999"); 
form.setField("ADDR1", "425 Test Street"); 
form.setField("ADDR2", "Test, WA 91334"); 
form.setField("PHNBR", "(999)999-9999"); 
form.setField("NAME", "John Smith"); 

//CREATE TABLE 
PdfPTable table = new PdfPTable(3); 
Font bfBold12 = new Font(FontFamily.HELVETICA, 12, Font.BOLD, new BaseColor(0, 0, 0)); 
insertCell(table, "Table", Element.ALIGN_CENTER, 1, bfBold12); 
table.completeRow(); 

ColumnText column = new ColumnText(pdfStamper.getOverContent(1)); 
column.addElement(table); 

pdfStamper.close(); 
reader.close(); 

ответ

0

вы добавляете ячейки в таблице напрямую, а затем вы можете установить правильную ширину ячеек затем создать клетки, используя свои данные, а затем с помощью WriteSelectedRows вы могли правый ряд. Пример кода ниже для справки.

 var table = PdfWriter.CreateTable(9); 
     table.SetWidths(new[] { 0.3f, 1.7f, 3f, 1f, 1f, 1f, 1f, 1f, 1f }); 

     var cells = 
      from line in lines 
      let values = new[] 
      { 
       new { Text = string.Empty, ColSpan = 1, Align = "<set value>" }, 
       new { Text = line.Description, ColSpan = 6, Align = "<set value>" }, 
       new { Text = string.Empty, ColSpan = 1, Align = "<set value>" }, 
       new { Text = FormatDecimal.Format(Math.Abs(line.Amount)), ColSpan = 1, Align = "<set value>"} 
      } 
      from value in values 
      select new Cell 
      { 
       Grey = true, 
       FontSize = "<set value>", 
       HorizontalAlignment = value.Align, 
       ColSpan = value.ColSpan, 
       Text = value.Text 
      }; 

     cells.ForEach(table.AddCell); 

     var position = new Position(PdfWriter.DocLeft, PdfWriter.DocTop - 20 - 245); 
     table.TotalWidth = PdfWriter.DocRight - PdfWriter.DocRightMargin; 
     table.LockedWidth = "<set value>"; 
     table.WriteSelectedRows(0, -1, position.HorizontalPosition, position.VerticalPosition, Writer.DirectContent); 
1

Либо ваши данные CSV является недействительным (не хорошо отформатирован, например, с дополнительными переносами или запятыми) или вы портя свои данные с этой строки здания «\ п-1». (Ваш выход консоли варьируется от 8 до 9 строк в набор данных)

Для отладки, пропустить создание этого «контент» строки и записать данные непосредственно из строки CSV к PDF-клеткам, как:

Document doc = new Document(); 
PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("file6.pdf"), FileMode.Create)); 
doc.Open(); 
PdfPTable table = new PdfPTable(7); 

using (TextFieldParser parser = new TextFieldParser("t.csv")) 
{ 
    parser.TextFieldType = FieldType.Delimited; 
    parser.SetDelimiters(","); 
    while (!parser.EndOfData) 
    { 
     //Processing row 
     string[] fields = parser.ReadFields(); 
     table.AddCell(new PdfPCell(new Paragraph(field[2])); 
     table.AddCell(new PdfPCell(new Paragraph(field[3])); 
     table.AddCell(new PdfPCell(new Paragraph(field[4])); 
     //...... 
    } 
} 
doc.Add(table); 
doc.Close(); 
Смежные вопросы