ITextSharp PDF图片推出了不同的DPI

时间:2018-01-25 18:20:22

标签: c# pdf itext

我有这部分代码,我的图像配置为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();
    }
}

1 个答案:

答案 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();
}