2012-02-13 82 views
3

我正在研究RDLC報告,我使用數據庫圖像,並將其大小類型設置爲比例,如果圖像不是邊界的確切大小,邊框將不適合。 。這是好的,但圖像將根據邊界左上角對齊,而我需要它居中(在PDF上),而在IE瀏覽器居中..,這裏是圖像示例,請我需要幫助這..RDLC報告比例圖像校準

這是我已經有 http://up.g4z4.com/uploads/f1fdee3542.jpg

這是期望一個 http://up.g4z4.com/uploads/a3d2ca5b8e.jpg

我讀過一次,RDLC報告中的圖像來源或註冊點位於左上角,這就是爲什麼它顯示這樣的情況......但是那個寫道說他不確定它的人是可能的嗎?或者它是否與無法更改的默認對齊有關?

謝謝,

回答

1

我在找這個問題的答案;我發現this code哪些技巧(它的作品),但它不是非常通用的(取決於硬編碼的頁面寬度)。通過一些工作,這段代碼可以工作。

2

對於每張圖片,我們都可以找到它的寬高比或寬高比或高/寬。 假設您的單元具有已知的寬度和高度您可以確定它是否太窄或太短。此外,您可以用下面的公式計算出它的新高度和寬度:

newWidth = cellheight * oldwidth/oldheight

newHeight = cellwidth * oldheight/oldwidth

CellWidth - NewWidth = 2X PaddingLeft

CellHeight - NewHeight = 2x PaddingTop

所以你現在需要做的只是將結果除以2並將其轉換爲整數。

我實現對數據庫中的每個圖像(其實我甩開SQLite數據庫這些圖像)在SubReportProcessing事件以下干將對我的主報告,我只是我所有的圖片添加爲數據源。

public class ImageModel 
{ 
    public int ImgId { get; set; } 
    public byte[] Blob { get; set; } 

    public string PaddingLeft 
    { 
     get 
     { 
      var img = byteArrayToImage(Blob); 
      //cell width and height must be specified in points 
      //(cellwidth - cellheight * image aspect ratio)/2 
      var result = (int)((256.0f - 256.0f * ((float)img.Width/(float)img.Height))/(float)2) + "pt"; 
      return result; 
     } 
    } 
    public string PaddingTop 
    { 
     get 
     { 
      var img = byteArrayToImage(Blob); 
      var result = (int)((256.0f - 256.0f * ((float)img.Height/(float)img.Width))/(float)2) + "pt"; 
      return result; 

     } 
    } 

該操作我現在可以設置填充值後在圖像屬性如下:

=Fields!PaddingLeft.Value 
=Fields!PaddingTop.Value 

希望幫助!

乾杯;)