using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using PdfSharp.Drawing; using PdfSharp.Pdf; namespace Library14Petrushin { public partial class PdfImg : Component { public PdfImg() { InitializeComponent(); } public PdfImg(IContainer container) { container.Add(this); InitializeComponent(); } public void CreatePdfDocument(string fileName, string documentTitle, List images) { if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(documentTitle) || images == null || images.Count == 0) { throw new ArgumentException("Все входные данные должны быть заполнены."); } PdfDocument document = new PdfDocument(); PdfPage firstPage = document.AddPage(); XGraphics gfxFirstPage = XGraphics.FromPdfPage(firstPage); XFont font = new XFont("Arial", 20, XFontStyleEx.BoldItalic); // Рисуем заголовок на первой странице gfxFirstPage.DrawString(documentTitle, font, XBrushes.Black, new XRect(0, 0, firstPage.Width, 50), XStringFormats.Center); // Добавляем изображение на первую страницу if (images.Count > 0) { using (XImage img = XImage.FromFile(images[0].ImagePath)) { double imageWidth = img.PixelWidth * 72 / img.HorizontalResolution; double imageHeight = img.PixelHeight * 72 / img.VerticalResolution; double scale = Math.Min(firstPage.Width / imageWidth, (firstPage.Height - 50) / imageHeight); // Учитываем высоту заголовка double imageX = (firstPage.Width - imageWidth * scale) / 2; // Центрируем изображение по горизонтали double imageY = 50; // Начинаем рисовать изображение под заголовком gfxFirstPage.DrawImage(img, imageX, imageY, imageWidth * scale, imageHeight * scale); } } // Добавляем остальные изображения на новые страницы for (int i = 1; i < images.Count; i++) { PdfPage page = document.AddPage(); XGraphics gfx = XGraphics.FromPdfPage(page); using (XImage img = XImage.FromFile(images[i].ImagePath)) { double imageWidth = img.PixelWidth * 72 / img.HorizontalResolution; double imageHeight = img.PixelHeight * 72 / img.VerticalResolution; double scale = Math.Min(page.Width / imageWidth, page.Height / imageHeight); gfx.DrawImage(img, 0, 0, imageWidth * scale, imageHeight * scale); } } document.Save(fileName); } } public class ImageData { public string ImagePath { get; set; } } }