C# 生成一个表并使用c将其附加到pdf?
我公司的c项目有两个部分,我的公司希望我从csv生成一个pdf文件C# 生成一个表并使用c将其附加到pdf?,c#,csv,pdf,itext,C#,Csv,Pdf,Itext,我公司的c项目有两个部分,我的公司希望我从csv生成一个pdf文件 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并创建一个表。但我无法有效地合
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.addtable,这将导致该表出现在pdf的下一页,这是我不想要的
我基本上只需要能够指定表格在页面上的起始位置,这样它就不会与现有内容重叠,然后将表格标记到现有pdf上
如果这不起作用,我的另一个选择是尝试向原始pdf添加字段,这些字段将由表内容填充,因此它将改为基于字段的表
有什么建议吗
编辑:
我是itext新手,以前没有使用过columntext,但我正试图在下面的代码中测试它,但是没有显示该表。我查看了其他columntext示例,但没有看到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();
您可以直接将单元格添加到表中,而不是设置适当的单元格宽度,然后使用数据创建单元格,然后使用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);
您的CSV数据无效或格式不正确,例如使用了额外的换行符或逗号,或者您的数据与此\n-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();