如何使用c#中的iTextsharp在pdf文件中指定表的位置

时间:2013-04-12 11:58:17

标签: c# itextsharp

我创建了一个包含图形的pdf文件,现在我正在尝试在这些图形下添加一个表格。我的问题是表格是在图形上方,我如何指定我希望将表格放在pdf文档上的位置/位置?

这是我的代码

        docl.Open();
        docl.Add(new Paragraph("My first PDF file"));

        PdfContentByte cb = writer.DirectContent;
        //employee
        //                position y,position x,length,height,  unknown
        cb.RoundRectangle(   20f,      745f,     200f,   35f,      10f);
        //title
        cb.RoundRectangle(235f, 745f, 35f, 35f, 10f);
        //identity number
        cb.RoundRectangle(280f, 745f, 105f, 35f, 10f);
        //date of birth
        cb.RoundRectangle(390f, 745f, 105f, 35f, 10f);
        //employee number
        cb.RoundRectangle(500f, 745f, 105f, 35f, 10f);
        //address
        cb.RoundRectangle(20f, 660f, 200f, 80f, 10f);
        //pay method
        cb.RoundRectangle(235f, 700f, 35f, 35f, 10f);
        //brantch code
        cb.RoundRectangle(235f, 660f, 35f, 35f, 10f);
        //bank
        cb.RoundRectangle(280f, 700f, 215f, 35f, 10f);
        //account type
        cb.RoundRectangle(500f, 700f, 105f, 35f, 10f);
        //account number
        cb.RoundRectangle(280f, 660f, 160f, 35f, 10f);
        //pay point
        cb.RoundRectangle(445f, 660f, 35f, 35f, 10f);
        //date of payment
        cb.RoundRectangle(506f, 660f, 90f, 35f, 10f);
        //marital status
        cb.RoundRectangle(20f, 600f, 35f, 35f, 10f);
        //gender
        cb.RoundRectangle(60f, 600f, 35f, 35f, 10f);
        //date of appointment
        cb.RoundRectangle(100f, 600f, 70f, 35f, 10f);
        //Tax number
        cb.RoundRectangle(175f, 600f, 70f, 35f, 10f);
        cb.Stroke();

        PdfPTable table = new PdfPTable(2);
        table.HorizontalAlignment = 0;
        table.SetTotalWidth(new float[] { 800, 200 }); 
        PdfPCell cell = new PdfPCell(new Phrase("EARNINGS"));
        cell.Colspan = 2;
        cell.HorizontalAlignment = 1;
        table.AddCell(cell);
        table.AddCell("Description");
        table.AddCell("Amount");

我用这一行来指定文档上图形的位置: //位置y,位置x,长度,高度,未知 cb.RoundRectangle(20f,745f,200f,35f,10f);

This how my document looks:

我想将表格放在图形下方。

2 个答案:

答案 0 :(得分:1)

您正在将低级方法(在绝对位置添加内容)与页面内容的高级方法(使用document.add())混合使用。

通过使用表格创建圆形矩形,您可以坚持使用高级方法。您可以使用单元格和表格事件创建具有圆角的边框。当您使用document.add()时,iText将负责定位所有内容(包括如果表格不适合页面,则拆分表格)。

或者您坚持使用低级方法,通过在绝对位置添加表,但要注意,如果表不适合页面,则itext不会拆分表。

看一下这个例子:Java | C# | PDF

它显示了如何使用单元格事件和/或表事件为表创建圆形边框。有关不太复杂的示例代码,请参阅chapter 5的其他示例。

正如您在日历示例中所看到的,使用方法table.WriteSelectedRows(...)将表添加到绝对位置。如您所知,圆角矩形的坐标,您可以使用此方法将表格添加到绝对位置。

答案 1 :(得分:0)

private static void DemoTableSpacing() { 
    using (FileStream fs = new FileStream("SpacingTest.pdf", FileMode.Create)) { 

        Document doc = new Document(); 
        PdfWriter.GetInstance(doc, fs); 
        doc.Open(); 

        Paragraph paragraphTable1 = new Paragraph(); 
        paragraphTable1.SpacingAfter = 15f; 

        PdfPTable table = new PdfPTable(3); 
        PdfPCell cell = new PdfPCell(new Phrase("This is table 1")); 
        cell.Colspan = 3; 
        cell.HorizontalAlignment = 1; 
        table.AddCell(cell); 
        table.AddCell("Col 1 Row 1"); 
        table.AddCell("Col 2 Row 1"); 
        table.AddCell("Col 3 Row 1"); 
        //table.AddCell("Col 1 Row 2"); 
        //table.AddCell("Col 2 Row 2"); 
        //table.AddCell("Col 3 Row 2"); 
        paragraphTable1.Add(table); 
        doc.Add(paragraphTable1); 

        Paragraph paragraphTable2 = new Paragraph(); 
        paragraphTable2.SpacingAfter = 10f; 

        table = new PdfPTable(3); 
        cell = new PdfPCell(new Phrase("This is table 2")); 
        cell.Colspan = 3; 
        cell.HorizontalAlignment = 1; 
        table.AddCell(cell); 
        table.AddCell("Col 1 Row 1"); 
        table.AddCell("Col 2 Row 1"); 
        table.AddCell("Col 3 Row 1"); 
        table.AddCell("Col 1 Row 2"); 
        table.AddCell("Col 2 Row 2"); 
        table.AddCell("Col 3 Row 2"); 
        paragraphTable2.Add(table); 
        doc.Add(paragraphTable2); 
        doc.Close(); 
    } 
}

我已经在iTEXTSHARP链接中使用了这个位置:https://www.codeproject.com/Questions/351802/Its-possible-put-a-table-in-absolute-position-with