我制定出了另一個滿足上級要求的解決方案。
簡而言之:我創建了一個填充了事件的簡單HTML日曆。然後,我將頁面渲染爲圖像(如屏幕截圖),並使用SSRS中的Image Control加載它。 SSRS報告將其參數作爲查詢字符串傳遞給網頁。
對於好奇誰通過網絡搜索發現了這個問題,這是我用它來創建位圖的方法:
private Bitmap CreateScreenshot(string url, int width, int height)
{
Bitmap screenshot = null;
var thread = new Thread(() =>
{
using (var browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
browser.Width = width;
browser.Height = height;
browser.Navigate(url);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
screenshot = new Bitmap(width, height);
browser.DrawToBitmap(screenshot, new Rectangle(0, 0, width, height));
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return screenshot;
}
我把它從控制器內,所以:
public void Action()
{
var model = new ViewModel
{
StartDate = new DateTime(2013, 6, 30),
EndDate = new DateTime(2013, 8, 10),
OpsId = ####
};
var url = Url.Action("ActionThatCallsCalendar", "Controller", new { area = "Area", viewModel = new JavaScriptSerializer().Serialize(model) }, Request.Url.Scheme);
Response.ContentType = "image/jpeg";
Response.Clear();
var screenshot = CreateScreenshot(url, 1400, 1050);
screenshot.Save(Response.OutputStream, ImageFormat.Jpeg);
Response.Flush();
}
我做不認爲這是可能的。該解決方案會增加單元尺寸。 – PookPook
我很擔心會是這樣。我可能不得不使這個網站的基礎,真相被告知,我想從一開始就做。 – Bill