我有这部分代码,我的图像配置为203 DPI,这是大多数打印机的默认设置。然而,似乎ITextSharp默认为图像DPI为72.我需要它默认为DPI为203,有没有全面的方法来做到这一点,而无需调整大小或重新创建图像?
这样做的目的是生成的PDF出现在4 x 5英寸PDF文档中,目前由此代码生成的PDF即将发布
11.3英寸X 14.1英寸(DPI 72)
而不是
4英寸x 5英寸(DPI 203)
我看过这篇文章但是出于我的目的它没有帮助
How to calculate the correct image size in out pdf using itextsharp?
我需要PDF文档使用我在代码中用于其他所有内容的SAME DPI
我的代码如下:
private byte[] getPDFDocument(MemoryStream inputImageStream)
{
using (MemoryStream workStream = new MemoryStream())
{
iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(0, 0, 812, 1015));
PdfWriter.GetInstance(document, workStream).CloseStream = false;
document.Open();
iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(inputImageStream.ToArray());
pdfImage.SetAbsolutePosition(0, 0);
document.Add(pdfImage);
document.Close();
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return workStream.ToArray();
}
}
答案 0 :(得分:3)
经过大量研究后,我发现了这篇文章:
https://jwcooney.com/2013/06/09/itextsharp-insert-an-image-to-a-pdf-in-c-sharp/
似乎ITextSharp默认为所有图像使用72 DPI,你必须做一些数学然后使用方法ScaleToFit你应该是GTG
这是经过纠正的代码,因此在203 DPI时看起来很完美
using (MemoryStream workStream = new MemoryStream())
{
iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(0, 0, 288, 360));
PdfWriter.GetInstance(document, workStream).CloseStream = false;
document.Open();
iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(inputImageStream.ToArray());
pdfImage.ScaleToFit(288, 360);
pdfImage.SetAbsolutePosition(0, 0);
document.Add(pdfImage);
document.Close();
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return workStream.ToArray();
}