我尝试将RDLC报告呈现为PDF文件,并且生成的文件大小超过正常值。经过一些研究,我发现PDF生成的嵌入字体: ..... 9 0 obj << / Filter / FlateDecode / Length 52986 / Length1 194264>> 流 .....
当我生成PDF并使用相同的方法保存到磁盘时,一个PDF的大小为:6.82 KB,其他为109 KB。
如果我使用Adobe Acrobat打开PDF,则相同。
解决方案1:
我使用" Microsoft.ReportViewer.WebForms"在MVC 4应用程序中生成PDF。版本11。 我尝试使用" Microsoft.ReportViewer.WinForms"同一个MVC应用程序中的库,以查看大小是否减少但没有结果。
失败
Solutin 2:
我在带有记事本的RDLC文件中搜索有关字体但不存在的内容,只有字体大小,如果是粗体而不是某些名称。
失败
小PDF字体属性:
大PDF字体属性:
我的问题是:如何不在RDLC中呈现的PDF中嵌入默认字体?
答案 0 :(得分:3)
事实证明我们只需要在DeviceInfo.xml中添加一个键:
<DeviceInfo>
<EmbedFonts>None</EmbedFonts>
</DeviceInfo>
我找到了the answer here。
答案 1 :(得分:0)
根据How to embed a Font in a PDF with RDLC,您必须满足以下要求:
- 字体必须标记为允许嵌入
- 字体必须为TrueType
类型
这与从报表生成器和SSRS导出到PDF文件时的字体嵌入类似MSDN documentation:
- 字体嵌入权限由字体作者授予。安装的字体包含一个属性,指示字体作者是否 打算允许在文档中嵌入字体。如果属性为 值为EMBED_NOEMBEDDING,字体未嵌入PDF文件中。 有关详细信息,请参阅msdn.microsoft.com上的“TTGetEmbeddingType”。
- 字体为TrueType。
- 字体由报表中的可见项引用。如果某个字体被Hidden属性设置为True的项引用,则为 显示渲染数据不需要字体,也不包含字体 在文件中。仅在需要显示字体时才嵌入字体 呈现的报告数据。
因此,如果您不满足这些要求,则不应嵌入您的字体。
答案 2 :(得分:0)
你真的不应该在ASP.NET MVC中使用 Microsoft.ReportViewer.WebForms 。 而只需调用您的报表服务器并获取所需的报表。
public async Task<FileStreamResult> GenerateReport()
{
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri("http://domainORipaddress"), "NTLM", new NetworkCredential(
ConfigurationManager.AppSettings["username"],
ConfigurationManager.AppSettings["password"]
));
Stream report = null;
using (var httpClient = new HttpClient(new HttpClientHandler { Credentials = credentialCache }))
{
//put the desired timeout here if needed to cancel the task
httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
report = await httpClient.GetStreamAsync("reportUrl");
}
Response.AppendHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", reportName));
return File(reportPath, MediaTypeNames.Application.Pdf);
}
参考:SQL Server Reporting Service with ASP.NET MVC
引入了字体嵌入:
SQL Server 2008累积更新1 (Unicode字符的全字体嵌入和子集化)
SQL Server 2005 Service Pack 3 (仅限于非ANSI字符)
字体嵌入不再与客户端上安装的字体版本无关 - 无论客户端操作系统,字体版本和客户端PDF查看器如何,都可以以相同的方式查看文档。
因此,当您禁用字体嵌入时,您基本上还原为旧行为。
如何禁用:
参考:Modify a Reporting Services Configuration File (RSreportserver.config)
找到以下
<Extension Name="PDF" Type="
Microsoft.ReportingServices.Rendering.ImageRenderer.PdfReport,
Microsoft.ReportingServices.ImageRendering"/>
添加以下内容
<Configuration>
<DeviceInfo>
<EmbedFonts>None</EmbedFonts>
</DeviceInfo>
</Configuration>
您需要执行 IISReset (IISReset停止并重新启动整个Web服务器(包括非ASP.NET应用程序)以设置更改。
参考:How to disable this Font embedding in Reporting Services 2005 Service Pack 3?