2013-04-12 9 views
5

Tôi đã tạo tệp pdf có đồ họa trên đó, bây giờ tôi đang cố gắng thêm bảng dưới đồ họa đó. Vấn đề của tôi là bảng là trên đồ họa, làm thế nào để tôi xác định vị trí/vị trí mà tôi muốn bảng của tôi được đặt trên tài liệu pdf ??Cách xác định vị trí của bảng trong tệp pdf bằng iTextsharp trong C#

Đây là mã của tôi

 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"); 

tôi sử dụng dòng này để xác định vị trí của các đồ họa trên các tài liệu: // vị trí y, vị trí x, chiều dài, chiều cao, chưa biết cb.RoundRectangle (20f , 745f, 200f, 35f, 10f);

This how my document looks:

tôi muốn đặt bảng dưới đây đồ họa.

Trả lời

1

Bạn đang trộn cách tiếp cận cấp thấp (thêm nội dung ở vị trí tuyệt đối) với cách tiếp cận cấp cao (sử dụng document.add()) cho nội dung trang.

Hoặc bạn bám vào phương pháp tiếp cận cấp cao, bằng cách sử dụng bảng để tạo hình chữ nhật tròn. Bạn có thể tạo các bảng với các đường viền có các góc tròn bằng cách sử dụng các sự kiện ô và bảng. Khi bạn sử dụng document.add(), iText sẽ chăm sóc định vị mọi thứ (bao gồm tách bảng nếu nó không vừa với trang).

Hoặc bạn tuân theo cách tiếp cận cấp thấp, bằng cách thêm bảng ở vị trí tuyệt đối, nhưng lưu ý rằng văn bản sẽ không chia bảng nếu nó không vừa với trang.

Hãy xem ví dụ này: Java | C# | PDF

Nó cho thấy cách tạo đường viền tròn cho bảng bằng cách sử dụng sự kiện ô và/hoặc sự kiện bảng. Xem các ví dụ khác về chapter 5 để biết mã mẫu ít phức tạp hơn.

Như bạn có thể thấy trong ví dụ lịch, bảng được thêm ở vị trí tuyệt đối bằng cách sử dụng phương thức table.WriteSelectedRows(...). Như bạn đã biết tọa độ của các hình chữ nhật tròn, bạn có thể sử dụng phương pháp này để thêm bảng của bạn ở vị trí tuyệt đối.

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(); 
    } 
} 

TÔI CÓ SỬ DỤNG MỘT NÀY CHO TÔI BẢNG VỊ TRÍ TRÊN iTextSharp LINK: https://www.codeproject.com/Questions/351802/Its-possible-put-a-table-in-absolute-position-with

+0

Bạn có thể muốn nhấn mạnh rằng ý tưởng trọng tâm của rằng câu trả lời CodeProject và mã của bạn là thêm một đoạn rỗng với một 'SpacingAfter 'giá trị khớp với chiều cao cần bỏ qua trước khi thêm bảng. – mkl

+0

Cảm ơn bạn đã đề xuất của bạn, Thực ra tôi là người mới bắt đầu với iTextSharp và tất cả về asp.net. Tôi đã cố gắng bằng cách này và tôi cũng đã làm bảng đầu tiên không có biên giới và tiêu đề sản phẩm nào. Bằng cách này tôi đã nhận được yêu cầu của mình trong dự án của mình. Cảm ơn bạn đã đạt được bình luận Tôi sẽ cải thiện trả lời của tôi trong thời gian tới. –