点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,我遇到的是此KB中描述的问题 使用Crystal Reports Developer for Visual Studio SP21(我认为这是当前可用的最新版本)时的文章。 知识库文章指出,原因是从Windows系统目录而不是从.NET Framework 4.0 \ Common \ SAP BusinessObjects Enterprise XI 4.0 \ win32_x86的C:\ Program Files(x86)\ SAP BusinessObjects \ Crystal Reports加载usp10.dll, 但是我已经检查了Process Explorer和Process Monitor,并且它使用的是Crystal目录中的DLL。
已经在论坛上多次报告了此问题,例如,在此处,< a rel =" nofollow" hraf=" https://archive.sap.com/discussions/thread/3480841">此处,此处,以及此处,但 似乎从来没有真正的修复,只有解决方法:("最好的"解决方法是Vitaly Vedmetskiy在中的评论 ,他建议使用特定版本的usp10.dll(作为SAP某人的评论的后续内容,他说:"我们需要非常特定版本的usp10.dll才能使文本呈现正常工作 正确。"这引起了一个问题,如果CR的文本渲染不能在该版本上正常工作,为什么SAP会分发1.626.7601.23259版本)但是正如我所说的那样, 这只是一个解决方法-Crystal不需要usp10.dll的非常特定的版本,尤其是从2005年(usp10.dll 1.422.3790.1830的日期)一直不需要。 较新的版本usp10.dll没有任何问题。
usp10.dll较新版本不起作用的原因是,它们现在使用OpenType字体的标准连字('liga')表进行自动连字替换。 例如,如果某些文本的字符为" fi",则字体可以告诉渲染器(例如usp10.dll)将其显示为连字fi。 Crystal的PDF导出中的错误是它不能正确处理该替换。 当它生成要嵌入PDF的字体的子集时,它将连字的第一个字符映射到整个连字的字形。 例如,如果文本包含" fi",则会将" f"映射到" fi"连字,将所有其他" f"(即使不带" i"时)也转到" fi"连字。
为了演示,我创建了一个简单的报告,其中只有一个文本框,其中带有Calibri字体的文本" ta ti fa fi"(Windows Vista引入的大多数其他" C"字体都将显示相同的内容)。 问题-坎德拉(Candara),康斯坦西亚(Constantia)和科贝尔(Corbel)。 这是报表设计视图中的外观。 注意" ti"和" fi"是如何连接的。
如果您单击它来编辑文本,它们将更改为单独的字母:
然后,如果转到"报告预览"选项卡,右键单击并导出到PDF文件,它将变成以下内容:
PDF已被压缩,但是有许多实用程序可以将其解压缩...如果您这样做并查看显示的文本,则会看到:
[t,13,a t,f,19,a f] TJ
这意味着显示" t",向右移动额外的13个单位,显示" a t",显示" f",向右移动额外的19个单位,显示" a f"。 放在一起,您会看到它认为它应该显示" ta t fa f"。 实际上,如果您从Acrobat Reader复制文本并将其粘贴,那么您就可以得到。 因此,如果它认为显示的是" ta t fa f",为什么它看起来像" tia ti fia fi"? 因为PDF中的字符与该字符应显示的字形(图像)之间存在映射关系。 CR生成的PDF将" t"映射为" ti"连字的字形,并将" f"映射为" fi"连字的字形。
似乎CR的PDF导出正在调用usp10.dll的ScriptShape函数来确定一段文本的字形列表,但是当多个字符被单个字形替换时,这似乎没有做正确的事情。 理想情况下,出口将是固定的,因此可以正确处理这种情况。 但是我想一个快速而肮脏的解决方法是告诉usp10禁用对" liga"表的处理。 而旧版本的usp10.dll"修复"问题的原因是因为它们不处理" liga"表...对新的usp10.dll禁用" liga"处理将产生恢复到旧版本的效果。 usp10.dll,而不必麻烦地获取旧版本的DLL。
无论如何,我希望Crystal Reports开发人员能够一劳永逸地解决此问题。
(3.8 kB)
大卫,您好,
感谢您提供详细信息。 我确定他们已解决此问题,但看来它又被打破了。
我会在早上将其升级,然后让DEV重新研究它。
现在可能是导出dll中的问题。 CR 14.2.4现在使用的是1.6 usp10,因此可能是他们需要撤消之前所做的一切才能使它工作。
唐
仅供参考,CR格式化引擎基于硬件和软件,包括打印机驱动程序,USP10,GDI,GDIPlus和各种框架。 有很多依赖项可用于尝试实现此目的。 一种改变就是打破事物的一切...这已全部通过注册表项解决:
KBA 2534523-使用字体Calibri时,单词从Crystal Reports错误地导出为PDF格式
症状
环境
复制问题
-引号,变为:quoties
-测试,变为:tiest
-日期,变为:datie
决议
-引号,变为:quoties
-测试,变为:tiest
-日期,变为:datie
原因
这是程序错误。
解决方案
"支持软件包和修补程序"部分一旦发布,将填充相关的修补程序级别。
有关Business Intelligence平台的维护时间表和策略,请参阅"参考"部分中的知识库文章2144559。/p>
1。 关闭Crystal Reports设计器。
2。 打开Microsoft注册表编辑器。
(在MS Windows中,在"开始"菜单下,选择"运行",然后键入:regedit)
3。 导航到以下路径:
HKEY_CURRENT_USER \ SOFTWARE \ SAP Business Objects \ Suite XI 4.0 \ Crystal Reports \ Export \ PDF
对于VS 32位的CR,请使用以下密钥:
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ SAP BusinessObjects \ Crystal Reports for .NET Framework 4.0 \ Crystal Reports \ Export \ PDF
对于VS 64位CR,请使用以下密钥:
.NET Framework 4.0的HKEY_LOCAL_MACHINE \ SOFTWARE \ SAP BusinessObjects \ Crystal Reports \ Crystal Reports \ Export \ PDF
注意:路径的最后一部分可能不存在。 如果是这种情况,只需添加缺少的密钥即可。
4.右键单击PDF键,然后选择:"新建-DWORD值"
5.将名称设置为:UseCustomEncoding
6.将值设置为:0
7.重新启动Crystal。 报告。
关键字
Calibri字体," a",usp10 1.6 CR,xport,Calibri,PDF
VS 2010SP021的晶体报告
BI平台服务器4.1SP011
BOP BI平台服务器4.2 SP005
SBOP BI平台服务器4.3
嗯,这是我将UseCustomEncoding设置为0的PDF:LigatureTest.pdf
我已经在一些PDF查看器中打开了它:Adobe Acrobat Reader DC,Chrome Web浏览器,Windows 10 PDF查看器应用程序和SumatraPDF,它们都正确显示了它(" ta ti fa fi")。 但是,如果我突出显示文本,请按Ctrl + C进行复制,然后在记事本中按Ctrl + V,它们都会复制/粘贴" ta t fa f"。
如果设置注册表项的唯一作用是使注册表项正常工作,那么为其设置注册表项有什么意义呢? 为什么您要它不工作? 我只是对为什么必须设置注册表项而不是默认行为感到困惑。
由于USP10.dll 1.4版中的错误,CR使用了注册表 解决这些问题的关键。
我们更新到1.6,所以里面也可能有错误。
我注意到Adobe正在使用版本10 usp10.dll(Windows 10版本),因此在转换/复制字符时可能会出现问题。
如果您不想使用有效的字体,请不要使用该字体。
唐
一周热门 更多>