我想在報告服務報告的每個頁面上添加包含corperate標識信息和圖形的PDF文件。此報告是從Dynamics CRM的報告查看器中呈現的。我正在研究編寫一個渲染擴展,它調用現有的PDF導出渲染擴展,並使用PDF組件如ABCPdf。在將報告服務發送給客戶端之前,修改其提供的pdf
我知道如何讓PDF背景渲染完成,但我無法從新的實現中調用現有的渲染擴展。
現有的PDF渲染擴展是一個密封的類,它似乎不可能從另一個實現中使用它的渲染方法。
然後我試圖直接使用http請求調用報表服務器,但由於模擬問題,我無法使其工作。我收到以下錯誤消息:「沒有Microsoft Dynamics CRM用戶存在指定的域名和用戶ID」
我認爲我處於正確的軌道上,但我不知道如何從上下文中獲取安全憑證一個渲染擴展。
如果我只能得到PDF的內容作爲一個流,我將能夠添加一個背景。
public class PdfWithBackgroundRenderer : IRenderingExtension
{
public void GetRenderingResource(Microsoft.ReportingServices.Interfaces.CreateAndRegisterStream createAndRegisterStreamCallback, System.Collections.Specialized.NameValueCollection deviceInfo)
{
}
public bool Render(Report report, System.Collections.Specialized.NameValueCollection reportServerParameters, System.Collections.Specialized.NameValueCollection deviceInfo, System.Collections.Specialized.NameValueCollection clientCapabilities, ref System.Collections.Hashtable renderProperties, Microsoft.ReportingServices.Interfaces.CreateAndRegisterStream createAndRegisterStream)
{
//http://localhost/Reserved.ReportViewerWebControl.axd?ReportSession=3i414gm5fcpwm355u1ek0e3g&ControlID=417ac5edf4914b7a8e22cf8d4c7a3a8d&Culture=1043&UICulture=1033&ReportStack=1&OpType=Export&FileName=%7bF64F053A-5C28-E011-A676-000C2981D884%7d&ContentDisposition=OnlyHtmlInline&Format=PDF
string Url = "http://localhost/Reserved.ReportViewerWebControl.axd";
Url += "?ExecutionID=" + reportServerParameters["SessionID"];
Url += "&ControlID=" + Guid.Empty;
Url += "&Culture=1043";
Url += "&UICulture=1033";
Url += "&ReportStack=1";
Url += "&OpType=Export";
Url += "&FileName=" + report.Name;
Url += "&ContentDisposition=OnlyHtmlInline";
Url += "&Format=PDF";
Stream outputStream = createAndRegisterStream(report.Name, "pdf", Encoding.UTF8, "application/pdf", true, Microsoft.ReportingServices.Interfaces.StreamOper.CreateAndRegister);
StreamWriter writer = new StreamWriter(outputStream);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Timeout = 20000;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
writer.Write(reader.ReadToEnd());
writer.Flush();
return false;
}
public bool RenderStream(string streamName, Report report, System.Collections.Specialized.NameValueCollection reportServerParameters, System.Collections.Specialized.NameValueCollection deviceInfo, System.Collections.Specialized.NameValueCollection clientCapabilities, ref System.Collections.Hashtable renderProperties, Microsoft.ReportingServices.Interfaces.CreateAndRegisterStream createAndRegisterStream)
{
return false;
}
public string LocalizedName
{
get { return "PDF Renderer with background"; }
}
public void SetConfiguration(string configuration)
{
}
}
威迪蒙丹請我的同事的博客對這一解決辦法:[鏈接](http://www.broes.nl/2011/02/pdf-watermarkbackground-rendering-extension-for-ssrs-part-1/) – jhoefnagels 2011-02-22 15:26:06