COP_Petrushin_PIbd-32/Library14Petrushin/PdfImg.cs

70 lines
2.7 KiB
C#
Raw Normal View History

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<ImageData> images)
{
// Проверка на заполненность входных данных
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(documentTitle) || images == null || images.Count == 0)
{
throw new ArgumentException("Все входные данные должны быть заполнены.");
}
// Создание PDF-документа
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);
// Добавление изображений в документ
foreach (var imageData in images)
{
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
using (XImage img = XImage.FromFile(imageData.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; }
}
}