如此罕见的事情正在发生。
在我的 rdlc 报告中,我将一些文本框设置为在 MVC 4 项目中显示为 PDF,如果我在 localhost 模式下运行它,它的效果非常好。
但是,如果我部署了解决方案,则会引发以下错误。
参数无效。[ArgumentException: 参数无效。] System.Drawing.Graphics.GetHdc() +1144409
Microsoft.ReportingServices.Rendering.RichText.LineBreaker.Flow(TextBox textBox, Graphics g, FontCache fontCache, FlowContext flowContext, Boolean keepLines, Single& height) +57
Microsoft.ReportingServices.Rendering.RichText.TextBox.MeasureFullHeight(TextBox textBox, Graphics g, FontCache fontCache, FlowContext flowContext, Single& contentHeight) +500
Microsoft.ReportingServices.Rendering.HPBProcessing.TextBox.DetermineVerticalSize(PageContext pageContext, Double topInParentSystem, Double bottomInParentSystem, ....[LocalProcessingException: 本地报表处理过程中发生错误。]
Microsoft.Reporting.WebForms.LocalReport.InternalRender(String format, Boolean allowInternalRenderers, String deviceInfo, PageCountMode pageCountMode, CreateAndRegisterStream createStreamCallback, Warning[]& warnings) +338
Microsoft.Reporting.WebForms .LocalReport.InternalRender(字符串格式,布尔allowInternalRenderers,字符串设备信息,PageCountMode ...
注意:我注意到如果删除我的 rdlc 中的那些文本框(我的意思是删除所有内容),生成一个空白 PDF。所以,我意识到文本框是个麻烦,但我不知道为什么只有当我部署时。
我错过了什么?
我正在使用的代码是下一个:
public ActionResult SampleReport()
{
LocalReport localReport = new LocalReport();
localReport.ReportPath = Server.MapPath("~/Reports/Report1.rdlc");
string reportType = "PDF";
string mimeType;
string encoding;
string fileNameExtension;
//The DeviceInfo settings should be changed based on the reportType
//http://msdn2.microsoft.com/en-us/library/ms155397.aspx
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>PDF</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>1in</MarginLeft>" +
" <MarginRight>1in</MarginRight>" +
" <MarginBottom>0.5in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes;
//Render the report
renderedBytes = localReport.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
//Response.AddHeader("content-disposition", "attachment; filename=NorthWindCustomers." + fileNameExtension);
return File(renderedBytes, mimeType);
}
更新: 当我开始研究如何使用 Report Services 创建 PDF 时,我只遵循以下指南:
- http://weblogs.asp.net/rajbk/archive/2009/11/25/rendering-an-rdlc-directly-to-the-response-stream-in-asp-net-mvc.aspx
- 在不安装 Microsoft Report Viewer 的情况下发布网站
最后一个是因为,我必须将其中三个作为引用库包括在内Microsoft.ReportViewer.Common
,Microsoft.ReportViewer.WebForms
并且Microsoft.ReportViewer.ProcessingObjectModel
因为,当我部署我的解决方案时不计入这些库,所以我手动添加。
就是这样!