Member 8503152 Ответов: 2

Использование ASP.NET сгенерировать файл. pdf


привет,
как сгенерировать pdf файл в asp.net внутри pdf добавить таблицу с данными

Что я уже пробовал:

Document pdfDoc = new Document();
          PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);
          pdfDoc.Open();
          string strHTML = @" <div style='text-align: center; width: 80%'>
              ABC
          </div>
          <table border='1' style='border-spacing: 0; border-style: solid; border-width: thin; padding: 0; width: 80%; height: 100%'>
              <tr>
                  <td colspan='6' rowspan='2'>
                      <table>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                      </table>

                  </td>
                  <td colspan='2'>*************</td>
                  <td colspan='2'>*************</td>
              </tr>
              <tr>
                  <td colspan='2'>***</td>
                  <td colspan='2'>***</td>
              </tr>
              <tr>
                  <td colspan='6' rowspan='2'>
                      <table>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                      </table>
                  </td>
                  <td colspan='2'>***</td>
                  <td colspan='2'>***</td>
              </tr>
              <tr>
                  <td colspan='2'>***</td>
                  <td colspan='2'>***</td>
              </tr>
              <tr>
                  <td colspan='6'>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>
                  <td colspan='6' rowspan='5'>
                      <table>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                          <tr>
                              <td>@@@@@</td>
                          </tr>
                      </table>
                  </td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>

                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>

                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>

                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>

                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
                  <td>***</td>
              </tr>
              <tr>
                  <td colspan='6'>***</td>
                  <td colspan='3'>***</td>
                  <td>***</td>
              </tr>
              <tr>
                  <td colspan='10' rowspan='1'>***</td>
              </tr>
              <tr>
                  <td colspan='8' rowspan='4'>***</td>
              </tr>
              <tr>
                  <td colspan='2'>***</td>
              </tr>
          </table>
          <div style='text-align: center; width: 80%'>
              ABC
              <br />
              ABC
          </div>";
          HTMLWorker htmlWorker = new HTMLWorker(pdfDoc);
          htmlWorker.Parse(new StringReader(strHTML));
          pdfWriter.CloseStream = false;
          pdfDoc.Close();
          Response.Buffer = true;
          Response.ContentType = "application/pdf";
          Response.AddHeader("content-disposition", "attachment;filename=Test.pdf");
          Response.Cache.SetCacheability(HttpCacheability.NoCache);
          Response.Write(pdfDoc);
          Response.Flush();
          Response.End();

2 Ответов

Рейтинг:
0

Neha Ambasta

Предположим, у меня есть метод в бизнес-слое, который возвращает список счетов-фактур

public DoctorInvoiceViewModel DoctorDisplayInvoice(int visitId)
{
    VisitDA visit = new VisitDA();
    DoctorInvoiceViewModel doctorInvoiceViewModel = new DoctorInvoiceViewModel();
    doctorInvoiceViewModel = visit.DoctorInvoiceDetails(visitId);
    return doctorInvoiceViewModel;
}


Затем нам нужно преобразовать этот список в PDF
В контроллере я напишу так:
public ActionResult GeneratePdf()
        {
            try
            {
                int userId;
                int.TryParse((Session["userId"]).ToString(), out userId);
                VisitBL patient = new VisitBL();
                return View(patient.PatientDisplayVisit(userId));
            }
            catch (Exception)
            {
                return RedirectToAction("Error", "Home", new { area = "Main" });
            }      
        } 

В поле зрения мы напишем код для генерации PDF-файла.Здесь я использую iTextSharp для создания PDF-файла.

@model IEnumerable<Patient.Models.PatientVisitViewModel>
@using iTextSharp.text;
    @using iTextSharp.text.pdf;
@{
        Layout = null;
        
        Response.AddHeader("Content-disposition", "attachment; filename=report.pdf");
        Response.ContentType = "application/octet-stream";
        var doc = new Document();
        
        PdfWriter writer = PdfWriter.GetInstance(doc, Response.OutputStream);
        doc.SetPageSize(PageSize.A4.Rotate());
        var arial = FontFactory.GetFont("Arial", 12, Color.BLACK);
        var arialBold = FontFactory.GetFont("Arial", 14, Font.BOLD, Color.BLACK);
        doc.Open();
        try
        {
            PdfContentByte cb = writer.DirectContent;
            string imageURL = Server.MapPath(".") + "/image2.jpg";
            cb.BeginText();
            try
            {                
                cb.SetFontAndSize(BaseFont.CreateFont(), 14);
                cb.SetTextMatrix(200,350);
                var table = new PdfPTable(5)
                {
                    TotalWidth = 700f,
                    SpacingAfter = 12f,
                    LockedWidth = true,                    
                   SpacingBefore = 400f
                };
                PdfPCell cell = new PdfPCell(new Phrase("Your Visit Details are here! \n You can take a print out of this. Get Well Soon !!",
                        new Font(Font.HELVETICA, 18F)));
                cell.Colspan = 5;
                cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
                //Style
                
                cell.Border = Rectangle.BOTTOM_BORDER; // | Rectangle.TOP_BORDER;
                cell.BorderWidthBottom = 3f;
                cell.PaddingBottom = 10f;
                table.AddCell(cell);
                
                table.HorizontalAlignment = 1;              
                
              
                    table.AddCell(new Phrase("Visit Name", arialBold));
                    table.AddCell(new Phrase("Visit Date", arialBold));
                    table.AddCell(new Phrase("Doctor Name", arialBold));
                    table.AddCell(new Phrase("Visit Details", arialBold));
                    table.AddCell(new Phrase("Total Amount", arialBold));
               
                foreach (var item in Model)
                {
                    table.AddCell(new Phrase(item.VisitName.ToString(), arial));
                    table.AddCell(new Phrase(item.VisitDate.ToString(), arial));
                    table.AddCell(new Phrase(item.DoctorName, arial));
                    table.AddCell(new Phrase(item.VisitDetails.ToString(), arial));
                    table.AddCell(new Phrase("₹ " + item.TotalAmount.ToString(), arial));
                  
                }
             
                doc.Add(table);
                
            }
            finally
            {
                cb.EndText();
            }

        }
        finally
        {
            doc.Close();
            writer.Close();
           
        }
           

    }


Рейтинг:
0

TinaKoh

Способ создания выходных файлов pdf заключается в том, что я сначала создаю файл шаблона MS Word, а затем программно заполняю его данными и сохраняю в формате pdf.

Файл шаблона Word содержит все необходимое форматирование и заполнители для данных. Во время выполнения этот шаблон заполняется данными.

За кулисами я использую стороннюю библиотеку. Как только файл шаблона подготовлен, приложение .NET вводит данные (в виде объектов .NET).

В двух строках кода создается pdf документ:

DocumentGenerator dg = new DocumentGenerator(customer);
DocumentGenerationResult result = dg.GenerateDocument("MyTemplate.docx", "MyReport.pdf");


Если бы мне нужен был документ docx или xps, я бы просто использовал это расширение файла, и выходной документ был бы в этом формате соответственно.

Библиотека основана на OpenXML, и генерация документов может быть выполнена на сервере без необходимости установки MS Office или какого-либо PDF-писателя. См. дополнительные примеры здесь- если вы находите это интересным.