将图像字节数组转换为 PDF
Convert image byte array to PDF
我想将 byte[]
格式的图像(PNG、JPEG、GIF)转换为 PDF。
我目前正在使用这个功能,这个功能有效,但是会把超过一定高度或特定比例的图像底部切掉;例如 500x2000
.
我哪里错了?
public byte[] ConvertImageToPDF(byte[] bytes)
{
byte[] pdfArray;
using (var memoryStream = new MemoryStream())
{
using (var pdfWriter = new PdfWriter(memoryStream))
{
var pdf = new PdfDocument(pdfWriter);
var document = new Document(pdf);
ImageData imageData = ImageDataFactory.Create(bytes);
document.Add(new Image(imageData));
document.Close();
}
pdfArray = memoryStream.ToArray();
}
return pdfArray;
}
我想你想要的是 auto-scale 文档中图像的 PdfWriter。
或者,将图像放在页面的中央。
您可以更改代码设置 [Image].SetAutoScale(true)
和 [Image].SetHorizontalAlignment(HorizontalAlignment.CENTER)
:
注意:我已经为iText.Layout.Properties
(别名:PdfProperties
)和iText.Layout.Element.Image
(别名:PdfImage
),以避免与具有 类 的其他 .Net 程序集和具有相同确切名称的枚举器发生冲突。删除它们以防万一您根本不需要它们。
using iText.IO.Image;
using iText.Kernel.Pdf;
using iText.Layout;
using PdfProperties = iText.Layout.Properties;
using PdfImage = iText.Layout.Element.Image;
public byte[] ConvertImageToPDF(byte[] imageBytes)
{
using (var ms = new MemoryStream()) {
using (var pdfWriter = new PdfWriter(ms)) {
var pdf = new PdfDocument(pdfWriter);
var document = new Document(pdf);
var img = new PdfImage(ImageDataFactory.Create(imageBytes))
.SetAutoScale(true)
.SetHorizontalAlignment(PdfProperties.HorizontalAlignment.CENTER);
document.Add(img);
document.Close();
pdf.Close();
return ms.ToArray();
}
}
}
您还可以以浮点单位指定图像的大小,并使用 [Image].ScaleToFit()
方法在这些范围内缩放图像。
在这里,使用 PageSize
设置为 PageSize.A4
。您当然可以设置不同的措施。
using iText.Kernel.Geom;
// [...]
var document = new Document(pdf);
var page = document.GetPageEffectiveArea(PageSize.A4);
var img = new PdfImage(ImageDataFactory.Create(imageBytes))
.ScaleToFit(page.GetWidth(), page.GetHeight())
.SetHorizontalAlignment(PdfProperties.HorizontalAlignment.CENTER);
// [...]
我想将 byte[]
格式的图像(PNG、JPEG、GIF)转换为 PDF。
我目前正在使用这个功能,这个功能有效,但是会把超过一定高度或特定比例的图像底部切掉;例如 500x2000
.
我哪里错了?
public byte[] ConvertImageToPDF(byte[] bytes)
{
byte[] pdfArray;
using (var memoryStream = new MemoryStream())
{
using (var pdfWriter = new PdfWriter(memoryStream))
{
var pdf = new PdfDocument(pdfWriter);
var document = new Document(pdf);
ImageData imageData = ImageDataFactory.Create(bytes);
document.Add(new Image(imageData));
document.Close();
}
pdfArray = memoryStream.ToArray();
}
return pdfArray;
}
我想你想要的是 auto-scale 文档中图像的 PdfWriter。
或者,将图像放在页面的中央。
您可以更改代码设置 [Image].SetAutoScale(true)
和 [Image].SetHorizontalAlignment(HorizontalAlignment.CENTER)
:
注意:我已经为iText.Layout.Properties
(别名:PdfProperties
)和iText.Layout.Element.Image
(别名:PdfImage
),以避免与具有 类 的其他 .Net 程序集和具有相同确切名称的枚举器发生冲突。删除它们以防万一您根本不需要它们。
using iText.IO.Image;
using iText.Kernel.Pdf;
using iText.Layout;
using PdfProperties = iText.Layout.Properties;
using PdfImage = iText.Layout.Element.Image;
public byte[] ConvertImageToPDF(byte[] imageBytes)
{
using (var ms = new MemoryStream()) {
using (var pdfWriter = new PdfWriter(ms)) {
var pdf = new PdfDocument(pdfWriter);
var document = new Document(pdf);
var img = new PdfImage(ImageDataFactory.Create(imageBytes))
.SetAutoScale(true)
.SetHorizontalAlignment(PdfProperties.HorizontalAlignment.CENTER);
document.Add(img);
document.Close();
pdf.Close();
return ms.ToArray();
}
}
}
您还可以以浮点单位指定图像的大小,并使用 [Image].ScaleToFit()
方法在这些范围内缩放图像。
在这里,使用 PageSize
设置为 PageSize.A4
。您当然可以设置不同的措施。
using iText.Kernel.Geom;
// [...]
var document = new Document(pdf);
var page = document.GetPageEffectiveArea(PageSize.A4);
var img = new PdfImage(ImageDataFactory.Create(imageBytes))
.ScaleToFit(page.GetWidth(), page.GetHeight())
.SetHorizontalAlignment(PdfProperties.HorizontalAlignment.CENTER);
// [...]