前言:我们有一个使用RDLC文件中的Microsoft.Reporting.WebForms. LocalReport类在c#应用程序中生成的报告。它们以PDF格式呈现。该报告中的文字主要是西里尔字母。问题是:不可能从生成的PDF文件中复制它,否则会造成垃圾。
得到垃圾的原因是文本被写为字体的“ Identity-H”编码。这不是真正的编码,只是对PDF文件中使用的字形的CID(基本上是数字)的分配。出于这个原因,Adobe's PDF format has the "ToUnicode"条目是应存储CID与Unicode字符对应关系的内容。如果存在此信息,则可以从文件中正确复制/粘贴文本。
很显然,该类没有编写它。在研究问题时,我碰到this page并意识到缺乏复制/粘贴支持,并称赞它最终在SQL Server 2016 Reporting Services中实现。
好吧,我们不使用ServerReport类和SQL Server RS。还是SQL Server2016。这仅仅是一种怪异的方式,而且架构变化太大,无法迁移到它,只是因为管理人员抱怨他们无法从PDF复制文本。
那么,有没有解决方法?我怀疑以前没有人遇到过这个问题。也许此ToUnicode条目的编写是在dotNet的较新版本的LocalReport中实现的?是否有人编写了一些包装类,它们采用了PDF的字节数组并对其进行了增强?还是人们将报告呈现到DOCX,然后使用其他库正确地制作出PDF?