Tôi đang làm điều tương tự để có biểu tượng thay đổi trên báo cáo tuy nhiên tôi sử dụng các thông số báo cáo để chuyển giá trị. Tôi không thấy lý do nào tại sao phương pháp chung này sẽ không hoạt động nếu hình ảnh là một phần của dữ liệu.
Về cơ bản hình ảnh được truyền qua hai trường. Trường đầu tiên là giá trị MIME Type và trường thứ hai là một chuỗi được mã hóa Base64 chứa nội dung hình ảnh.
Bước 1: Chuyển đổi hình ảnh của bạn sang mã hóa Base64. (Mã của chúng tôi luôn đi ImageFormat.Png
để phương pháp này để làm cho các loại MIME dễ dàng)
private static string ConvertImageToBase64(Image image, ImageFormat format)
{
byte[] imageArray;
using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream())
{
image.Save(imageStream, format);
imageArray = new byte[imageStream.Length];
imageStream.Seek(0, System.IO.SeekOrigin.Begin);
imageStream.Read(imageArray, 0, imageStream.Length);
}
return Convert.ToBase64String(imageArray);
}
Bước 2: Vượt qua hình ảnh và MIME Type để báo cáo.
reportParams[0] = new ReportParameter("ReportLogo", base64Logo);
reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/png");
_reportViewer.LocalReport.SetParameters(reportParams);
Bước 3: Trong báo cáo thiết lập các thuộc tính sau vào hình ảnh (không có dấu ngoặc kép):
- MIMETYPE: "
=Parameters!ReportLogoMimeType.Value
"
- Value: "
=System.Convert.FromBase64String(Parameters!ReportLogo.Value)
"
- CẬP NHẬT: Là Ger ARDO cho biết dưới đây, hình ảnh nguồn phải được đặt thành 'Database'
Trap dành cho cầu thủ trẻ: Thường thì hình ảnh sẽ trông khủng khiếp và giống như họ đã được thu nhỏ lại ngay cả khi bạn đang đi trong một hình ảnh mà có vẻ là "kích thước phù hợp". Điều này là do các báo cáo được hiển thị để in (300 dpi) chứ không phải màn hình (thường là 72 hoặc 92 dpi). Khắc phục là gửi hình ảnh quá lớn gấp 3 lần, đặt kích thước chính xác trong báo cáo và thay đổi thuộc tính "Sizing
" trên hình ảnh thành "FitProportional
".
Nguồn
2008-09-30 23:37:10
Thnx rất nhiều, t đã giúp tôi rất nhiều! – Martijn
Tôi chỉ muốn làm rõ rằng nguồn hình ảnh phải được đặt thành ** Cơ sở dữ liệu **. Tôi không thể làm cho giải pháp này hoạt động cho đến khi tôi đặt thuộc tính Nguồn thành giá trị chính xác. Một chi tiết nhỏ có thể bị bỏ qua nếu bạn không chú ý. –
@Adrian: Tôi đã cùng một vấn đề, tôi chưa đọc như bạn đã mô tả ở đây, nhưng điều đó không hiệu quả đối với tôi, vui lòng kiểm tra câu hỏi của tôi [ở đây] (http://stackoverflow.com/questions/42020490/base64-image-doesnt- hiển thị-trên-render-pdf-từ-rdlc-report) –