2010-05-02 59 views
11

我正在嘗試使用itextsharp將圖像添加到pdf中,而不管圖像大小如何,它總是看起來被映射到pdf內部的不同更大尺寸?如何使用itextsharp計算出PDF格式的正確圖像大小?

我添加的圖像是624x500像素(DPI:72):

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

這裏是輸出概率分佈函數的一個屏幕:

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(); 

An關於如何計算正確大小的想法?

我試圖試圖ScaleAbsolute和圖像仍然呈現不正確的尺寸。

回答

19

我忘記提及我正在使用itextsharp 5.0.2。

原來PDF DPI = 110,這意味着每英寸110個像素,並且由於使用iTextSharp的點作爲measurment單元隨後:

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

有一個輔助方法像素轉換爲點的所有我需要:

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

通過使用上述式和傳遞的110 dpi值它完美地工作:

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

注意:由於您可以創建任意大小的pdf文檔,因此打印出文檔時可能導致縮放比例不正確。爲了克服這個問題,你需要做的只是在寬度和高度之間有正確的高寬比[約爲1:1.4142](見:Paper Size - The international standard: ISO 216)。

相關問題