2013-02-24 45 views
7

tôi có một PDF trong đó có một bảng bảng đó là năng động và tôi muốn thêm vào bảng khác dưới đây để bảng động trong PDF hiện tại của tôi.Thêm bảng vào PDF sẵn có sử dụng iTextSharp

Có cách nào để thêm bảng trong PDF sẵn có tại nơi cụ thể mà bảng (mà không phải là ở phần cuối của tài liệu) hiện đang hoàn thành sau đó tôi muốn thêm bàn của tôi.

Tôi có thể thêm bằng cách nào? Hãy gợi ý cho tôi một số cách tốt.

Như bạn có thể thấy bên dưới hình ảnh.

enter image description here

Cảm ơn,

+0

Bạn đề cập đến iTextSharp. Thư viện đó cho phép thao tác các tệp pdf hiện có bằng cách sử dụng lớp PdfStamper. Thú vị hơn là câu hỏi làm thế nào để nhận ra vị trí trong tệp PDF hiện có để thêm dữ liệu mới. – mkl

+0

Xin chào Mkl cảm ơn các ý kiến ​​của bạn. làm thế nào tôi có thể nhận ra vị trí trong pdf hiện có để tôi có thể thêm bảng. Bạn có thể đưa ra ví dụ nào không? –

+1

Bạn có thể đưa ra ví dụ nào không? Không, bởi vì bạn đang hỏi cái gì đó là không thể trong nhiều trường hợp (không phải tất cả).Đó là lý do tại sao mkl đã viết câu hỏi về cách nhận ra vị trí trong tệp PDF hiện tại là một câu hỏi thú vị hơn. Nếu bạn không thể trả lời câu hỏi đó (bởi vì bạn có thể hỏi điều gì đó không thể được), câu hỏi thực sự của bạn là không liên quan. Không ai khác có thể trả lời câu hỏi đó cho bạn bởi vì không ai biết PDF hiện tại trông như thế nào. –

Trả lời

4
using iTextSharp.text; 
using iTextSharp.text.pdf; 

/// Function which will create pdf document and save in the server folder 

private void ExportDataToPDFTable() 
    { 
     Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35); 
     try 
      { 
      string pdfFilePath = Server.MapPath(".") + "/pdf/myPdf.pdf"; 
      //Create Document class object and set its size to letter and give space left, right, Top, Bottom Margin 
      PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(pdfFilePath, FileMode.Create)); 

      doc.Open();//Open Document to write 

      Font font8 = FontFactory.GetFont("ARIAL", 7); 

      //Write some content 
      Paragraph paragraph = new Paragraph("Using ITextsharp I am going to show how to create simple table in PDF document "); 

      DataTable dt = GetDataTable(); 

      if (dt != null) 
       { 
       //Craete instance of the pdf table and set the number of column in that table 
       PdfPTable PdfTable = new PdfPTable(dt.Columns.Count); 
       PdfPCell PdfPCell = null; 


       //Add Header of the pdf table 
       PdfPCell = new PdfPCell(new Phrase(new Chunk("ID", font8))); 
       PdfTable.AddCell(PdfPCell); 

       PdfPCell = new PdfPCell(new Phrase(new Chunk("Name", font8))); 
       PdfTable.AddCell(PdfPCell); 


       //How add the data from datatable to pdf table 
       for (int rows = 0; rows < dt.Rows.Count; rows++) 
        { 
        for (int column = 0; column < dt.Columns.Count; column++) 
         { 
          PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8))); 
          PdfTable.AddCell(PdfPCell); 
          } 
         } 

         PdfTable.SpacingBefore = 15f; // Give some space after the text or it may overlap the table 

         doc.Add(paragraph);// add paragraph to the document 
         doc.Add(PdfTable); // add pdf table to the document 

        } 

       } 
       catch (DocumentException docEx) 
       { 
        //handle pdf document exception if any 
       } 
       catch (IOException ioEx) 
       { 
        // handle IO exception 
       } 
       catch (Exception ex) 
       { 
        // ahndle other exception if occurs 
       } 
       finally 
       { 
        //Close document and writer 
        doc.Close(); 

     } 
} 

mẫu DataTable:

private DataTable GetDataTable() 
    { 
     // Create an object of DataTable class 
     DataTable dataTable = new DataTable("MyDataTable");//Create ID DataColumn 
     DataColumn dataColumn_ID = new DataColumn("ID", typeof(Int32)); 
     dataTable.Columns.Add(dataColumn_ID);//Create another DataColumn Name 
     DataColumn dataColumn_Name = new DataColumn("Name", typeof(string)); 
     dataTable.Columns.Add(dataColumn_Name); 
     //Now Add some row to newly created dataTable 
     DataRow dataRow;for (int i = 0; i < 5; i++) 
     { 
      dataRow = dataTable.NewRow(); 
      // Important you have create New row 
      dataRow["ID"] = i;dataRow["Name"] = "Some Text " + i.ToString(); 
      dataTable.Rows.Add(dataRow); 
     } 
     dataTable.AcceptChanges(); 
     return dataTable; 
    } 
+4

Mã của bạn tạo một tệp PDF mới trong khi câu hỏi ban đầu yêu cầu mã để thêm vào mã hiện có. – mkl

+0

yes @mkl đây là IRELEVENT TRẢ LỜI ..! –

2

By xa cách dễ nhất để làm điều này là để tạo ra một file PDF mới với bảng mong muốn tại vị trí mong muốn , sau đó dán nó lên tệp PDF hiện có. Điều này có thể được thực hiện bằng cách sử dụng mã (ví dụ) lớp PdfStamper, nhưng cũng có các công cụ độc lập như pdftk và nhiều công cụ khác. Đừng nghĩ về điều này là "chỉnh sửa" một PDF, hãy nghĩ về nó như là một thứ gì đó mới mẻ trên bản gốc.

pdftk original.pdf stamp newtable.pdf output combined.pdf 

Phần thực sự thú vị và khó có thể được giải quyết bằng câu hỏi gốc của @ mkl - cách bạn xác định vị trí chính xác của bảng mới. Nếu bạn có thể đưa ra một quy tắc hình học, thì bạn đang ở trong tình trạng tốt. Nếu điều này liên quan đến việc phân tích cú pháp của tệp gốc, bạn nên lưu ý rằng một cái gì đó (dường như) đơn giản như việc xác định số hàng trong bảng hiện tại đôi khi có thể cực kỳ khó khăn. Trong tất cả các khả năng, có lưu ý như một thẻ html <table> được chôn trong luồng nội dung. Có một ví dụ về một PDF thực sự sẽ rất hữu ích. Hình ảnh của PDF không giống nhau.

Để cung cấp cho bạn một số thông tin cơ bản, phân tích cú pháp bố cục của PDF thật dễ dàng, đó là những gì người đọc PDF làm. Phân tích cú pháp nội dung của PDF hoàn toàn khác và khó hơn nhiều. Cũng giống như một ví dụ, hình ảnh PDF bạn đăng có thể được vẽ từ trên xuống dưới, hoặc đầu trang và chân trang có thể được vẽ đầu tiên, sau đó là tất cả các mặt đậm, tiếp theo là văn bản phải đối mặt. Chỉ vì hai thứ nằm cạnh nhau trong bố cục vật lý không có nghĩa là chúng nằm cạnh nhau trong cấu trúc tệp, cây đối tượng hoặc luồng nội dung. Đó là một đồ họa vector không phải là một tập tin văn bản hoặc một bitmap. Các tệp PDF không được thiết kế để có thể chỉnh sửa trừ khi phần mềm tạo ra nó cụ thể cung cấp các manh mối về cách nội dung được chỉnh sửa. Có rất nhiều điều có vẻ như họ nên dễ dàng, nhưng một khi bạn hiểu cách xây dựng PDF, điều đó có nghĩa là rất khó. Tôi không nói điều này để ngăn cản bạn, chỉ để bạn đánh giá cao tầm quan trọng của nhiệm vụ. Nếu bạn có thể theo dõi tài liệu nguồn mà PDF này được tạo từ, tôi đảm bảo bạn sẽ có nhiều thành công hơn với ít thất vọng hơn.

Các vấn đề liên quan