Приложение работает нормально (полный исходный код доступен на github), но этот метод вызывает у меня некоторые проблемы:
Код: Выделить всё
private void CreateDoc(string srcFilename, string folder, PageSize pageSize)
{
string dstFilename = System.IO.Path.Combine(folder, System.IO.Path.GetFileNameWithoutExtension(srcFilename) + ".pdf");
using PdfWriter writer = new(dstFilename);
using PdfDocument pdfDocument = new(writer);
iText.IO.Image.ImageData imageData = iText.IO.Image.ImageDataFactory.Create(srcFilename);
iText.Layout.Element.Image image = new(imageData);
iText.Kernel.Geom.Rectangle? rectangle = null;
if (pageSize == PageSize.ImageSize)
{
rectangle = new(0, 0, (int)image.GetImageWidth(), (int)image.GetImageHeight());
}
else
{
rectangle = pageSize.PdfSize();
if (rectangle != null)
image.ScaleToFit(
rectangle.GetWidth(),
rectangle.GetHeight());
else throw new Exception("Page size not supported!");
}
if (rectangle == null)
throw new Exception("Page not created!");
iText.Layout.Document document = new(pdfDocument, new iText.Kernel.Geom.PageSize(rectangle));
float offX = (rectangle.GetWidth() - image.GetImageScaledWidth()) / 2;
float offY = (rectangle.GetHeight() - image.GetImageScaledHeight()) / 2;
image.SetFixedPosition(offX, offY);
document.SetMargins(0, 0, 0, 0);
document.Add(image);
}
Код: Выделить всё
srcFilename
Если я укажу правильный размер листа бумаги (например, A4, Legal ..), созданная страница PDF будет соответствовать размеру бумаги, но поскольку исходное изображение почти никогда не совпадать с размером листа, белые границы происходят. Если я хочу устранить такие границы, мне нужно установить pageSize = ImageSize... в этом случае страница создается без белых границ, но она намного больше правильного размера страницы (2x, 3x).
Как вычислить/применить коэффициент масштабирования, чтобы минимизировать разницу в размерах?
Подробнее здесь: https://stackoverflow.com/questions/791 ... isting-pdf