使用Calibri字体连接防止LocalReport.Render

时间:2013-11-25 12:27:46

标签: c# pdf fonts rdlc ligature

我遇到了RDLC报告在以PDF格式生成时打印空字符的问题。它只影响font ligatures,我理解为字母组合,例如:

  • TI
  • 英尺
  • 网络连接
  • TT

我的研究显示这些字符组合被组合成一个字形,我在打印时看到它是一个空白区域。示例剪报:

PDF格式:

enter image description here

enter image description here

印刷:

enter image description here

enter image description here

因此症状是:

  • PDF在屏幕上显示正常
  • 打印时(物理上或使用XPS writer)所有连字都显示为空格

到目前为止,我已将其缩小为特定字体(Calibri)和特定服务器(Windows Server 2003 R2)。 PDF嵌入了字体:

enter image description here

我为了解决这个问题,我很满意:

  • 阻止LocalReport.Render组合连字
  • 启用Server 2003以将字体视为我的Windows 7计算机

我不确定如何/在何处开始比较字体环境,因此非常感谢想法和指针。

更新

感谢下面的答案,我检查了两台机器上的charmaps,但它们看起来完全相同:

服务器(问题所在):

enter image description here

本地(没有问题):

enter image description here

这也提醒我,我通过复制字体文件并直接安装来安装字体。两个版本都是5.72,数字签名,TrueType轮廓,但服务器显示OpenType Font,而本地显示OpenType Layout(可能只是不同的操作系统显示)。

一个有趣的观点是,如果我在本地使用Calibri Regular 48,我会看到结扎线:

enter image description here

而服务器不使用它:

enter image description here

此外,两台PDF都在同一台机器上打印,但只有服务器上生成的PDF才显示问题,因此我认为打印机驱动程序不是问题吗?

2 个答案:

答案 0 :(得分:5)

你可以通过在字符之间插入单词joiner字符(U + 2060)或旧系统来进行搜索并替换和断开连字,零宽度没有中断空格(U + FEFF)吗?这应该强制它不使用连字。

答案 1 :(得分:1)

通常,ReportViewer生成的PDF甚至是Reporting Services won't embed fonts生成的PDF:

  

PDF呈现扩展插件不嵌入字体。必须在报表服务器和用于查看报表的客户端计算机上安装报表中使用的字体。

因此我会:

  1. 检查2003服务器中的Calibrì字体版本是否与客户端中的相同(浏览到两台计算机中的%windir%\fonts,单击Calibrì,右键单击每个ttf文件,选择Properties和在File version标签中查找Details
  2. 修复差异:从2003服务器中删除旧版本并导入在Windows 7中找到的新ttf,全部使用操作系统提供的工具(参见下图)tool provided by the os
  3. 再次尝试你的过程:如果你得到你需要的,你已经完成了。
  4. 如果您确实需要将生成的报告分发给可能存在相同问题的客户,则必须安装GhostScript并使用以下内容对您的pdf进行后期处理(这将生成{{3 }})
  5. gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -dHaveTransparency=false -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf
    

    一些附注:

    • 过去我遇到类似的问题,自定义字体在重新启动服务器后会消失,因此在步骤2之后尝试重新启动服务器然后再继续
    • GhostScript是一个值得尊敬的 PDF/A output file,在free software下获得双重许可(仅适用于使用相同许可的开源项目),并且在Affero GNU/General Public Licence下其他人。 Artifex Commercial License您可以找到详细信息。
    • 在过去,我被要求尝试更多更便宜的GhostScript替代品,并相信我:没有更便宜的替代品可行。