2024-09-29 23:00:02 +04:00
|
|
|
|
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("Все входные данные должны быть заполнены.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PdfDocument document = new PdfDocument();
|
|
|
|
|
|
|
|
|
|
PdfPage firstPage = document.AddPage();
|
|
|
|
|
XGraphics gfxFirstPage = XGraphics.FromPdfPage(firstPage);
|
|
|
|
|
XFont font = new XFont("Arial", 20, XFontStyleEx.BoldItalic);
|
2024-10-01 10:59:06 +04:00
|
|
|
|
|
|
|
|
|
// Рисуем заголовок на первой странице
|
2024-09-29 23:00:02 +04:00
|
|
|
|
gfxFirstPage.DrawString(documentTitle, font, XBrushes.Black, new XRect(0, 0, firstPage.Width, 50), XStringFormats.Center);
|
|
|
|
|
|
2024-10-01 10:59:06 +04:00
|
|
|
|
// Добавляем изображение на первую страницу
|
|
|
|
|
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++)
|
2024-09-29 23:00:02 +04:00
|
|
|
|
{
|
|
|
|
|
PdfPage page = document.AddPage();
|
|
|
|
|
XGraphics gfx = XGraphics.FromPdfPage(page);
|
|
|
|
|
|
2024-10-01 10:59:06 +04:00
|
|
|
|
using (XImage img = XImage.FromFile(images[i].ImagePath))
|
2024-09-29 23:00:02 +04:00
|
|
|
|
{
|
|
|
|
|
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; }
|
|
|
|
|
}
|
|
|
|
|
}
|