2013-02-24 2 views
7

У меня есть один PDF-файл, в котором есть одна таблица, которая является динамической, и я хочу динамически добавить в эту таблицу другую таблицу ниже в эту таблицу в моем существующем PDF-файле.Добавить таблицу в существующий PDF с помощью iTExtsharp

Есть ли способ добавить таблицу в существующий PDF в конкретное место, где существующая таблица (которая не находится в конце документа) завершена, тогда я хочу добавить свою таблицу.

Как добавить? Пожалуйста, предложите мне хороший способ.

Как вы можете видеть ниже изображение.

enter image description here

Спасибо,

+0

Вы упомянули iTextSharp. Эта библиотека позволяет манипулировать существующими pdf-файлами с использованием класса PdfStamper. Более интересным является вопрос о том, как распознать позицию в существующем PDF, чтобы добавить новые данные. – mkl

+0

Привет, Mkl спасибо за ваши комментарии. как я могу распознать позицию в существующем формате pdf, чтобы добавить таблицу. Можете ли вы привести какой-нибудь пример? –

+1

Можете ли вы привести какой-нибудь пример? Нет, потому что вы спрашиваете то, что невозможно во многих случаях (не для всех).Вот почему mkl писал, что вопрос о том, как распознать позицию в существующем PDF, является более интересным вопросом. Если вы не можете ответить на этот вопрос (потому что вы, вероятно, спрашиваете то, что невозможно), ваш фактический вопрос не имеет значения. Никто не может ответить на этот вопрос, потому что никто не знает, как выглядит существующий PDF. –

ответ

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

     } 
} 

Образец 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

Ваш код создает новый PDF, в то время как исходный вопрос требует добавления кода к существующему. – mkl

+0

да @mkl это IRELEVENT ANSWER ..! –

2

До сих пор самый простой способ сделать это, чтобы создать новый PDF с нужной таблицей в нужном месте , а затем поместите его в существующий PDF-файл. Это можно сделать в коде, используя (например) класс PdfStamper, но есть также автономные инструменты, такие как pdftk и многие другие. Не думайте об этом, как о «редактировании» PDF-файла, подумайте об этом как о том, чтобы отбросить что-то новое поверх оригинала.

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

Действительно интересные и потенциально трудная часть затрагивались @ MKL изначальном вопрос - как же определить правильное положение новой таблицы. Если вы можете придумать геометрическое правило, то вы в хорошей форме. Если это связано с любым анализом исходного файла, вы должны знать, что что-то вроде (казалось бы) простое, так как определение количества строк в существующей таблице иногда может быть чрезвычайно сложным. По всей видимости, как тег html <table>, который похож на поток контента. Примером фактического PDF будет очень полезно. Образ PDF - это не одно и то же.

Чтобы дать вам некоторую справочную информацию, разбор макета PDF-файла прост, это то, что делают читатели PDF. Разбор содержимого PDF полностью отличается и намного сложнее. Так же, как пример, вы можете опубликовать изображение PDF сверху вниз, или верхние и нижние колонтитулы можно рисовать сначала, а затем все жирные элементы лица, за которыми следует простой текст. Просто потому, что две вещи находятся рядом друг с другом в физическом макете, это не значит, что они находятся рядом друг с другом в структуре файла, дереве объектов или потоке содержимого. Это векторный рисунок, а не текстовый файл или растровое изображение. PDF-файлы не предназначены для редактирования, если только созданное им программное обеспечение не дает информации о том, как редактировать контент. Есть много вещей, которые кажутся такими, как должно быть быть легким, но как только вы поймете, как создается PDF-документ, имеет смысл, что это сложно. Я не говорю об этом, чтобы отговорить вас, просто чтобы вы оценили масштаб задачи. Если вы можете проследить исходный документ, из которого был создан этот PDF-файл, я гарантирую, что у вас будет больше успеха с меньшими разочарованиями.

Смежные вопросы