using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using WinFormsLibrary1.Configs.Image; namespace WinFormsLibrary1 { public partial class PdfWithImages : Component { private Document _document = null; private Section _section = null; private List _images = null; private Document Document { get { if (_document == null) { _document = new Document(); } return _document; } } private Section Section { get { if (_section == null) { _section = Document.AddSection(); } return _section; } } private List Images { get { if (_images == null) { _images = new List(); } return _images; } } public PdfWithImages() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); InitializeComponent(); } public PdfWithImages(IContainer container) { container.Add(this); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); InitializeComponent(); } public void CreatePdf(PdfWithImageConfig config) { config.CheckFields(); CreateHeader(config.Header); foreach (var image in config.Images) { CreateImage(image); } SavePdf(config.FilePath); } public void CreateHeader(string header) { var paragraph = Section.AddParagraph(header); paragraph.Format.Font.Name = "Arial"; paragraph.Format.Font.Bold = true; paragraph.Format.Font.Size = 20; paragraph.Format.SpaceAfter = 10; } public void SavePdf(string filepath) { if (string.IsNullOrWhiteSpace(filepath)) { throw new ArgumentNullException("Имя файла не задано"); } if (_document == null || _section == null) { throw new ArgumentNullException("Документ не сформирован, сохранять нечего"); } var pdfRenderer = new PdfDocumentRenderer(true) { Document = _document, }; pdfRenderer.RenderDocument(); pdfRenderer.Save(filepath); } public void CreateImage(byte[] image) { if (image == null || image.Length == 0) { throw new ArgumentNullException("Картинка не загружена"); } Images.Add(image); var imageFileName = Path.GetTempFileName(); File.WriteAllBytes(imageFileName, image); var img = Section.AddImage(imageFileName); img.Width = Unit.FromCentimeter(15); // Можно настроить ширину изображения img.LockAspectRatio = true; Section.AddParagraph(); /*if (image == null || image.Length == 0) { throw new ArgumentNullException("Картинка не загружена"); } Images.Add(image); // Создаём временный файл var imageFileName = Path.GetTempFileName(); File.WriteAllBytes(imageFileName, image); // Открываем изображение и проверяем его ориентацию using (var img = System.Drawing.Image.FromFile(imageFileName)) { // Проверяем ориентацию и вращаем, если необходимо if (Array.IndexOf(img.PropertyIdList, 274) > -1) { var orientation = (int)img.GetPropertyItem(274).Value[0]; switch (orientation) { case 3: // Переворот на 180 градусов img.RotateFlip(RotateFlipType.Rotate180FlipNone); break; case 6: // Поворот на 90 градусов вправо img.RotateFlip(RotateFlipType.Rotate90FlipNone); break; case 8: // Поворот на 90 градусов влево img.RotateFlip(RotateFlipType.Rotate270FlipNone); break; } } // Сохраняем отредактированное изображение img.Save(imageFileName); } // Вставляем изображение в PDF var pdfImage = Section.AddImage(imageFileName); pdfImage.Width = Unit.FromCentimeter(15); // Можно настроить ширину изображения pdfImage.LockAspectRatio = true; // Добавляем пустую строку после изображения Section.AddParagraph();*/ } } }