Работаем с pdf ( c#, .net)

В данной заметке будут описаны некоторые методы для работы с библиотекой iTextSharp. Данная библиотека позволяет создавать и изменять pdf документ.

  1. создаем документ
    byte[] pdfDocBytes;
    using (MemoryStream ms = new MemoryStream())
    using (Document doc = new Document())
    {
        PdfWriter.GetInstance(doc, ms);
        doc.Open();
        // do stuff
        doc.Close();
        pdfDocBytes = ms.ToArray();
    }
    
  2. задаем фон и размеры для главной страницы
    Rectangle rec = new Rectangle(PageSize.A4.Rotate());
    rec.BackgroundColor = new BaseColor(37, 168, 81);
    doc.SetPageSize(rec);
    doc.SetMargins(0, 0, 0, 0);
    

    Внимание: код нужно выполнять до вызова метода doc.Open()

  3. задаем фон и размеры для других страниц
    Смотрите код в п 1.
    Внимание: код нужно выполнять после вызова метода doc.Open()
  4. установим на фон картинку
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagePath);
    image.ScaleToFit(842, 595);
    image.SetAbsolutePosition(0, 0);
    doc.Add(image);
    
  5. добавляем картинку в таблицу и расположим ее по центру
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(@"d:\Temp\image.jpg");
    image.ScalePercent(70);
    PdfPCell cell = new PdfPCell(image);
    cell.PaddingTop = 0;
    cell.PaddingRight = 0;
    cell.PaddingBottom = 0;
    cell.PaddingLeft = 0;
    cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
    cell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE;
    cell.Border = 0;
    cell.BackgroundColor = new BaseColor(37, 168, 81);;
    table.AddCell(cell);
    
  6. добавляем текст в таблицу
    PdfPCell cell = new PdfPCell(new Phrase("Text Text Text", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14, BaseColor.BLACK)));
    cell.Border = 0;
    cell.Rotation = 270; // если нужно расположить текст вертикально
    table.AddCell(cell);
    
  7. добавляем пустую ячейку с определенной высотой в таблицу
    PdfPCell cell = new PdfPCell(new Phrase(""));
    cell.MinimumHeight = 200;
    table.AddCell(cell);
    
  8. создаем таблицу и устанавливаем ширину для колонок
    PdfPTable table = new PdfPTable(2);
    table.WidthPercentage = 100;
    table.SetWidths(new float[] { 812, 30 });
    doc.Add(table);
    
  9. узнаем высоту таблицы
    float tableHeight = table.CalculateHeights(); // Внимание: table width не должно быть в процентах
    
  10. добавляем таблицу в таблицу
    PdfPTable innerTable = new PdfPTable(3);
    innerTable.WidthPercentage = 100;
    PdfPCell cell = new PdfPCell(innerTable);
    cell.Border = 0;
    table.AddCell(cell);
    
  11. добавляем параграф
    doc.Add(new Paragraph("Text Text Text", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14,  BaseColor.BLACK)));
    
  12. добавляем фразу
    doc.Add(new Phrase("Text Text Text", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14,  BaseColor.BLACK)));
    
  13. добавляем части фразы
    Chunk ch1 = new Chunk("Text", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14, Font.NORMAL, BaseColor.BLACK));
    Chunk ch2 = new Chunk("Up", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 8, Font.NORMAL, BaseColor.RED));
    ch2.SetTextRise(6);
    Chunk ch3 = new Chunk("Down", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 8, Font.NORMAL, BaseColor.BLUE));
    ch3.SetTextRise(-6);
    Phrase ph = new Phrase(ch1);
    ph.AddRange(new IElement[] { ch2, ch3 });
    PdfPCell cell = new PdfPCell(ph);
    table.AddCell(cell);
    
  14. добавляем ссылку
    Anchor anchor = new Anchor("ссылка", new Font(BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 14, Font.UNDERLINE, BaseColor.BLUE));
    anchor.Reference = "http://itextsharp.sourceforge.net";
    PdfPCell cell = new PdfPCell(anchor);
    table.AddCell(cell);
    
  15. переходим на новую страницу
    doc.NewPage();