🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / .Net Core Web Api / C# Net Core 7 Excel to Pdf

1-) .Net Core Web Api  - C# Net Core 7 Excel to Pdf

 

 

using DevExpress.XtraRichEdit;

using DevExpress.Spreadsheet;

 

[Route("excelToPdf")]

[HttpPost]

public IActionResult excelToPdff(IFormFile excelFile)

{

    try

    {

        if (excelFile == null || excelFile.Length == 0)

        {

            return BadRequest("Excel dosyası seçilmedi.");

        }

 

        using (var stream = new MemoryStream())

        {

            excelFile.CopyTo(stream);

            stream.Position = 0;

 

            using (var workbook = new Workbook())

            {

                workbook.LoadDocument(stream);

 

                using (var pdfStream = new MemoryStream())

                {

                    workbook.ExportToPdf(pdfStream);

                    pdfStream.Position = 0;

 

                    // İşlem tamamlandı, PDF dosyasını döndür

                    return File(pdfStream.ToArray(), "application/pdf", "ConvertedFile.pdf");

                }

            }

        }

    }

    catch (Exception ex)

    {

        return StatusCode(500, $"İşlem sırasında bir hata oluştu: {ex.Message}");

    }

}

 

 

 

 

2-) Her sayfaya header ve footer ekleme ayrıca water mark ekleme

 

 

    [ApiExplorerSettings(IgnoreApi = true)]

  [NonAction]

  public void addWaterMarkExcel(PdfGraphics graphics, PdfPage page)

  {

      var fontWatermark = new System.Drawing.Font("Arial", 60, FontStyle.Bold); // Daha büyük font boyutu

      var brushWatermark = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(60, 0, 0, 0)); // Yarı şeffaf siyah

      string watermarkText = "KONTROLLÜ KOPYADIR";

      // PDF boyutları

      float centerX = (float)(page.CropBox.Width / 2);

      float centerY = (float)(page.CropBox.Height / 2);

      // Sol ve alt için 50 piksel boşluk

      float offsetX = 150;

      float offsetY = 150;

      using (var g = System.Drawing.Graphics.FromImage(new Bitmap(1, 1)))

      {

          // Metin boyutlarını hesapla

          var textSize = g.MeasureString(watermarkText, fontWatermark);

          // Çapraz döndürme işlemi

          using (var path = new System.Drawing.Drawing2D.GraphicsPath())

          {

              path.AddString(

                  watermarkText,

                  fontWatermark.FontFamily,

                  (int)fontWatermark.Style,

                  60 * (72f / 96f), // 72 DPI'ye uygun font boyutu

                  new PointF(-textSize.Width / 2, -textSize.Height / 2), // Metni merkezden başlat

                  new StringFormat()

              );

              // Döndürme ve konumlandırma için matris oluştur

              var matrix = new System.Drawing.Drawing2D.Matrix();

              matrix.Translate(centerX + offsetX, centerY - offsetY); // Merkezden 50 piksel sola ve alta kaydır

              matrix.Rotate(-45); // Çapraz döndür (45 derece)

              path.Transform(matrix); // Matrise göre metni dönüştür

                                      // Döndürülmüş metni çiz

              graphics.FillPath(brushWatermark, path);

          }

      }

  }

  [ApiExplorerSettings(IgnoreApi = true)]

  [NonAction]

  public FileContentResult? ExcelToPdfByte(byte[] excelBytes, ReportXls report1, Files dosyam, int id, int kopya, bool ustBilgi, bool altBilgi)

  {

      try

      {

          if (excelBytes == null || excelBytes.Length == 0)

          {

              return null;

          }

          using (var stream = new MemoryStream(excelBytes))

          {

              using (var workbook = new Workbook())

              {

                  workbook.LoadDocument(stream);

                  foreach (var sheet in workbook.Worksheets)

                  {

                      // Üstbilgiler (Headers) için temizleme

                      sheet.HeaderFooterOptions.FirstHeader.FromString(string.Empty);

                      sheet.HeaderFooterOptions.EvenHeader.FromString(string.Empty);

                      sheet.HeaderFooterOptions.OddHeader.FromString(string.Empty);

                      // Altbilgiler (Footers) için temizleme

                      sheet.HeaderFooterOptions.FirstFooter.FromString(string.Empty);

                      sheet.HeaderFooterOptions.EvenFooter.FromString(string.Empty);

                      sheet.HeaderFooterOptions.OddFooter.FromString(string.Empty);

                  }

                  var stringFormatCenter = new PdfStringFormat

                  {

                      Alignment = PdfStringAlignment.Near,

                      LineAlignment = PdfStringAlignment.Center,

                  };

                  var formatGenel = new PdfStringFormat

                  {

                      Alignment = PdfStringAlignment.Center,

                      LineAlignment = PdfStringAlignment.Center,

                  };

                  using (var tempPdfStream = new MemoryStream())

                  {

                      workbook.ExportToPdf(tempPdfStream);

                      tempPdfStream.Position = 0;

                      using (var finalPdfStream = new MemoryStream())

                      {

                          PdfDocumentProcessor processor = new PdfDocumentProcessor();

                          processor.LoadDocument(tempPdfStream);

                          int pageCount = 0;

                          int totalPageCount = processor.Document.Pages.Count;

                          foreach (var page in processor.Document.Pages)

                          {

                              pageCount++;

                              using (PdfGraphics graphics = processor.CreateGraphics())

                              {

                                  if (kopya == 1)

                                  {

                                      addWaterMarkExcel(graphics, page);

                                  }

                                  using (var brush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))

                                  using (var pen = new System.Drawing.Pen(System.Drawing.Color.Black, 1))

                                  {

                                      var fontHeader = new System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Bold);

                                      var fontContent = new System.Drawing.Font("Arial", 10);

                                      var fontContentBold = new System.Drawing.Font("Arial", 10, FontStyle.Bold);

                                      // Üç sütun düzeni

                                      float columnWidth = (float)(page.CropBox.Width / 3); // Sayfayı 3 eşit sütuna böl

                                      float rowHeight = 75; // Her hücre için yükseklik

                                                            // Resim sütunu genişliği %50 küçültüldü

                                      float imageWidth = columnWidth / 2;

                                      float imageHeight = rowHeight;

                                      float imageX = 0;

                                      float imageY = 0;

                                      // Başlık sütunu genişliği, resim sütunundan kazanılan alan kadar artırıldı

                                      float titleWidth = columnWidth + (columnWidth / 2);

                                      float titleHeight = rowHeight;

                                      float titleX = imageWidth;

                                      float titleY = 0;

                                      // Sağ sütun genişliği sabit kaldı

                                      float contentWidth = columnWidth;

                                      float contentHeight = rowHeight;

                                      float contentX = titleX + titleWidth;

                                      float contentY = 0;

                                      if (ustBilgi)

                                      {

                                          float marginAll = 20.0f; // Üst boşluk

                                          // Resim sütunu

                                          Image logoImage = null;

                                          try

                                          {

                                              string logoPath = Path.Combine(AppContext.BaseDirectory, "logo.png");

                                              if (System.IO.File.Exists(logoPath))

                                              {

                                                  using (var streamImage = new FileStream(logoPath, FileMode.Open, FileAccess.Read))

                                                  {

                                                      logoImage = Image.FromStream(streamImage);

                                                  }

                                              }

                                              // Sol, üst, sağ ve alt boşluklar için padding

                                              float paddingAll = 20.0f;

                                              // Padding'i hesaba katan ayarlanmış koordinatlar

                                              float adjustedImageX = imageX + marginAll + paddingAll;

                                              float adjustedImageY = imageY + marginAll + paddingAll;

                                              // Görüntü boyutları için padding ekleme

                                              float adjustedImageWidth = imageWidth - (2 * paddingAll);

                                              float adjustedImageHeight = imageHeight - (2 * paddingAll);

                                              // Logo çizimi

                                              graphics.DrawImage(logoImage, new RectangleF(adjustedImageX, adjustedImageY, adjustedImageWidth, adjustedImageHeight));

                                              // Çerçeve çizimi (padding dahil)

                                              DrawRectangle(graphics, pen, adjustedImageX - paddingAll, adjustedImageY - paddingAll, imageWidth, imageHeight);

                                          }

                                          catch { }

                                          // Başlık sütunu

                                          float adjustedTitleX = titleX + marginAll; // Başlığın solundan boşluk

                                          float adjustedTitleY = titleY + marginAll;

                                          // Çerçeve çizimi

                                          DrawRectangle(graphics, pen, adjustedTitleX, adjustedTitleY, titleWidth - marginAll, titleHeight);

                                          // Başlık metni çizimi

                                          graphics.DrawString(

                                              report1.txtBaslik.Text,

                                              fontHeader,

                                              brush,

                                              new PointF(adjustedTitleX + ((titleWidth - marginAll) / 2) - 75, adjustedTitleY + (titleHeight / 2) - 10)

                                          );

                                          // Sağ sütun: Metinler

                                          float contentCellWidth = contentWidth / 2; // Etiket ve değer için ikiye böl

                                          float contentCellHeight = contentHeight / 5; // 5 satır

                                          float adjustedContentY = contentY + marginAll;

                                          string[] labels = { "Döküman No", "Revizyon No", "Revizyon Tarihi", "Yayın Tarihi", "Sayfa Sayısı" };

                                          string[] values = { report1.txtDokumanNo.Text, report1.txtRevizyonNo.Text, report1.txtRevizyonTarihi.Text, report1.txtYayinTarihi.Text, $"{pageCount}/{totalPageCount}" };

                                          for (int i = 0; i < labels.Length; i++)

                                          {

                                              // Etiket

                                              DrawRectangle(graphics, pen, contentX, adjustedContentY, contentCellWidth, contentCellHeight);

                                              graphics.DrawString(labels[i], fontContentBold, brush, new PointF(contentX + 5, adjustedContentY + 9), stringFormatCenter);

                                              // Değer

                                              DrawRectangle(graphics, pen, contentX + contentCellWidth, adjustedContentY, contentCellWidth - marginAll, contentCellHeight);

                                              graphics.DrawString(values[i], fontContent, brush, new PointF(contentX + contentCellWidth + 5, adjustedContentY + 9), stringFormatCenter);

                                              adjustedContentY += contentCellHeight; // Bir sonraki satıra geç

                                          }

                                      }

                                      if (altBilgi)

                                      {

                                          // Footer (Hazırlayan, Kontrol, Onay)

                                          float footerMargin = 20; // Sayfa sol ve sağ margin (10 piksel artırıldı)

                                          float footerTotalWidth = (float)page.CropBox.Width - (2 * footerMargin); // Tüm footer genişliği

                                          float footerCellWidth = footerTotalWidth / 3; // Her sütunun genişliği

                                          float footerCellHeight = 30; // Footer hücre yüksekliği

                                          // Alttan 20 piksel boşluk için ayarlama

                                          float footerBottomMargin = 20; // Alttan boşluk

                                          float footerYStart = (float)(page.CropBox.Height - footerCellHeight * 2 - footerBottomMargin); // Footer başlangıç Y

                                          string[] footerHeaders = { "HAZIRLAYAN", "KONTROL", "ONAY" };

                                          string[] footerValues = { report1.txtHazirlayan.Text, report1.txtKontrolEden.Text, report1.txtOnaylayan.Text };

                                          for (int i = 0; i < footerHeaders.Length; i++)

                                          {

                                              float footerX = footerMargin + (footerCellWidth * i); // Sol margin eklenerek düzen

                                              // Başlıklar için hücre

                                              DrawRectangle(graphics, pen, footerX, footerYStart, footerCellWidth, footerCellHeight);

                                              graphics.DrawString(footerHeaders[i], fontContentBold, brush, new PointF(footerX + 5, footerYStart + 9)); // Bold yapıldı

                                              // Değerler için hücre

                                              float valueY = footerYStart + footerCellHeight;

                                              DrawRectangle(graphics, pen, footerX, valueY, footerCellWidth, footerCellHeight);

                                              graphics.DrawString(footerValues[i], fontContent, brush, new PointF(footerX + 5, valueY + 9));

                                          }

                                      }

                                      graphics.AddToPageForeground(page, 72, 72);

                                  }

                              }

                          }

                          processor.SaveDocument(finalPdfStream);

                          finalPdfStream.Position = 0;

                          return File(finalPdfStream.ToArray(), "application/pdf", dosyam.orjiAd.Replace(dosyam.uzanti, "") + ".pdf");

                      }

                  }

              }

          }

      }

      catch (Exception ex)

      {

          Console.WriteLine(ex.Message);

          return null;

      }

  }

  private void DrawRectangle(PdfGraphics graphics, System.Drawing.Pen pen, float x, float y, float width, float height)

  {

      // Dikdörtgenin konumunu ve boyutlarını tanımlayın

      var bounds = new System.Drawing.RectangleF(x, y, width, height);

      // System.Drawing.Pen'i DevExpress için uygun bir Pen'e dönüştürün

      var dxPen = SystemDrawingConverter.CreateDXPen(pen);

      // Dikdörtgeni çizin

      graphics.DrawRectangle(dxPen, bounds);

  }

 

 

 

 2025 Ocak 16 Perşembe
 279