12

当生成为 PDF 时,我遇到了 RDLC 报告打印空字符的问题。它只影响我理解为字母组合的字体连字,例如:

  • 英尺
  • tt

我的研究表明,这些字符组合被组合成一个字形,打印出来时我将其视为一个空白区域。剪报示例:

在 PDF 上:

在此处输入图像描述

在此处输入图像描述

打印:

在此处输入图像描述

在此处输入图像描述

因此,症状是:

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

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

在此处输入图像描述

我为了解决这个问题而感到高兴:

  • 防止LocalReport.Render组合连字
  • 启用 Server 2003 将字体视为我的 Windows 7 机器

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

更新:

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

服务器(问题所在):

在此处输入图像描述

本地(没问题):

在此处输入图像描述

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

有趣的一点是,如果我在本地使用 Calibri Regular 48,我会看到连字:

在此处输入图像描述

而服务器不使用它:

在此处输入图像描述

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

4

3 回答 3

4

您可以通过在字符之间插入单词连接符 (U+2060) 或在较旧的系统上使用零宽度无分隔符 (U+FEFF) 来进行搜索、替换和断开连字吗?这应该迫使它不使用连字。

于 2013-12-02T19:42:17.963 回答
1

通常,由 ReportViewer 甚至 Reporting Services 生成的 PDF不会嵌入字体

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

因此我会:

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

一些旁注:

  • 过去,我在重新启动服务器后出现自定义字体的类似问题,因此在第 2 步之后尝试重新启动服务器,然后再继续
  • GhostScript 是一款久负盛名的 免费软件,根据Affero GNU/通用公共许可证(仅适用于使用相同许可证的开源项目)和Artifex 商业许可证对其他人进行双重许可。在这里您可以找到详细信息。
  • 过去,我被要求尝试许多更便宜的 GhostScript 替代品,请相信我:没有更便宜的替代品有效。
于 2013-12-03T12:08:42.573 回答
0

如果您有权访问字体定义(在代码中),则有一个解决方案。

xaml: FontFamily="Calibri" Typography.StandardLigatures="False"

于 2021-09-14T08:27:27.977 回答