代码之家  ›  专栏  ›  技术社区  ›  MK.

如何使用itextsharp计算出正确的pdf图像大小?

  •  11
  • MK.  · 技术社区  · 14 年前

    我正在尝试使用itextsharp将图像添加到pdf中,不管图像大小,它似乎总是映射到pdf中其他更大的大小?

    我添加的图像为624x500像素(dpi:72):

    alt text http://www.freeimagehosting.net/uploads/727711dc70.png

    下面是输出pdf的屏幕:

    alt text http://www.freeimagehosting.net/uploads/313d49044d.png

    下面是我创建文档的方式:

    Document document = new Document();                
                    System.IO.MemoryStream stream = new MemoryStream();
                    PdfWriter writer = PdfWriter.GetInstance(document, stream);
                    document.Open();
    
    
                    System.Drawing.Image pngImage = System.Drawing.Image.FromFile("test.png");
                    Image pdfImage = Image.GetInstance(pngImage, System.Drawing.Imaging.ImageFormat.Png);
    
    
                    document.Add(pdfImage);
                    document.Close();
    
                    byte[] buffer = stream.GetBuffer();
                    FileStream fs = new FileStream("test.pdf", FileMode.Create);
                    fs.Write(buffer, 0, buffer.Length);
                    fs.Close();
    

    你知道如何计算正确的尺寸吗?

    我已经尝试过可缩放的解决方案,但图像仍然以不正确的尺寸进行渲染。

    2 回复  |  直到 7 年前
        1
  •  20
  •   MK.    14 年前

    我忘了提到我正在使用iTextSharp 5.0.2。

    结果发现,pdf dpi=110,即每英寸110像素,由于itextsharp使用点作为测量单位,因此:

    • n像素=n/110英寸。
    • N英寸=N*72点。

    我只需要一个助手方法来将像素转换为点:

    public static float PixelsToPoints(float value,int dpi)
    {
       return value / dpi * 72;
    }
    

    通过使用上述公式并通过dpi值110,它工作得很好:

    alt text http://www.freeimagehosting.net/uploads/1c8287b8d9.png

    注意:由于可以创建任意大小的pdf文档,这可能会导致打印文档时缩放不正确。要解决此问题,您只需在宽度和高度之间具有正确的长宽比[大约为1:1.4142](请参见: Paper Size - The international standard: ISO 216 )

        2
  •  0
  •   IKavanagh    7 年前

    将图像的高度和宽度乘以72,然后除以dpi(ppi): points = pixels * 72 / dpi .