2010-05-02 21 views
11

Tôi đang cố gắng thêm hình ảnh vào pdf bằng itextsharp, bất kể kích thước hình ảnh có luôn được ánh xạ tới kích thước lớn hơn khác trong pdf?Làm thế nào để tính toán kích thước hình ảnh chính xác trong pdf bằng cách sử dụng itextsharp?

Những hình ảnh tôi thêm là 624x500 pixel (DPI: 72):

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

Và đây là một màn hình của pdf đầu ra:

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

Và đây là cách tôi đã tạo tài liệu:

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 y ý tưởng về làm thế nào để tính toán kích thước chính xác?

Tôi đã thử ScaleAbsolute và hình ảnh vẫn hiển thị với kích thước không chính xác.

Trả lời

19

Tôi quên đề cập đến rằng tôi đang sử dụng itextsharp 5.0.2.

Hóa ra là PDF DPI = 110, có nghĩa là 110 pixel mỗi inch, và kể từ iTextSharp sử dụng các điểm như đơn vị measurment thì:

  • n pixel = n/110 inch.
  • n inch = n * 72 điểm.

Có một phương pháp helper để chuyển đổi điểm ảnh đến các điểm được tất cả những gì cần thiết:

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

Bằng cách sử dụng công thức trên và đi qua một giá trị dpi 110 nó làm việc một cách hoàn hảo:

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

Lưu ý: Vì bạn có thể tạo tài liệu pdf ở bất kỳ kích thước nào bạn muốn, điều này có thể dẫn đến việc mở rộng không chính xác khi in tài liệu của bạn. Để khắc phục vấn đề này, tất cả những gì bạn cần làm là có tỷ lệ khung hình chính xác giữa chiều rộng và chiều cao [khoảng 1: 1,4142] (xem: Paper Size - The international standard: ISO 216).

Các vấn đề liên quan