Printing ABCPDF字体打印布局-取决于机器

Printing ABCPDF字体打印布局-取决于机器,printing,fonts,abcpdf,Printing,Fonts,Abcpdf,我使用ABCPDF通过EMF文件将PDF文件打印到本地打印机。我已经非常密切地基于ABC PDF的示例“ABCPDFView”项目。我的应用程序在我的Windows 7和Windows XP开发设备上运行良好,但当我移动到Windows 2003测试设备时,简单的嵌入式字体(如Times New Roman 12)呈现出完全错误的效果(错误的位置,短而深,几乎像DPI的错误一样) 请注意,我已经将DPI硬编码为240,这里b/c我使用的是一个奇怪的主机打印驱动程序,它强制240x240。我可以认

我使用ABCPDF通过EMF文件将PDF文件打印到本地打印机。我已经非常密切地基于ABC PDF的示例“ABCPDFView”项目。我的应用程序在我的Windows 7和Windows XP开发设备上运行良好,但当我移动到Windows 2003测试设备时,简单的嵌入式字体(如Times New Roman 12)呈现出完全错误的效果(错误的位置,短而深,几乎像DPI的错误一样)

请注意,我已经将DPI硬编码为240,这里b/c我使用的是一个奇怪的主机打印驱动程序,它强制240x240。我可以认为驱动程序是罪魁祸首,因为如果我在打印期间将EMF文件保存在本地,它会显示相同的布局问题。如果我渲染为PNG或TIFF文件,那么使用相同代码(将.PNG替换为.emf)在我的所有服务器上看起来都很好。最后,如果我使用ABCPDFView项目手动将随机文本框添加到PDF中,则该文本在EMF文件中也会呈现错误。(旁注,如果我使用Acrobat打印PDF,文本渲染效果很好)

更新:我遗漏了一个有用的要点,供其他有此问题的人参考。我可以通过将RenderTextAsText设置为“0”(参见下面的代码)来解决这个问题。这将强制ABCPDF将文本渲染为多边形,并使问题消失。不过,这不是一个很好的解决方案,因为它大大增加了EMF文件的大小,而且在我的最终打印文档中,这些多边形的渲染效果也不太好

有人对这个奇怪字体问题的原因有什么想法吗

private void DoPrintPage(object sender, PrintPageEventArgs e)
  {
      using (Graphics g = e.Graphics)
      {
        //... omitted code to determine the rect, used straight from ABC PDF sample
          mDoc.Rendering.DotsPerInch = 240 ;
          mDoc.Rendering.ColorSpace = "RGB";
          mDoc.Rendering.BitsPerChannel = 8;
          mDoc.SetInfo(0, "RenderTextAsText", "0");//the magic is right here
          byte[] theData = mDoc.Rendering.GetData(".emf");
          using (MemoryStream theStream = new MemoryStream(theData))
          {
              using (Metafile theEMF = new Metafile(theStream))
              {
                  g.DrawImage(theEMF, theRect);
              }
          }
          //... omitted code to move to the next page
      }

我最初是以1920x1080分辨率进行RDP,通过切换到1024x768分辨率进行RDP,问题消失了。我的主程序作为服务运行,从RDP会话w/1024x768启动此服务可以修复它

我发了一封带有ABC PDF的电子邮件,想看看他们是否能解释这一点,并提供一个更优雅的解决方案,但目前这是可行的

请注意,这是ABC PDF 7,我不知道这个问题是否适用于其他版本


更新:ABC PDF支持部门确认,该服务可能正在缓存启动该流程的人员提供的显示分辨率。他们确认他们在远程桌面上发现了其他一些奇怪的问题,并鼓励我使用这个1024x768解决方案和/或远程启动服务。

尝试升级到新版本的abcpdf 8,它有自己的基于Gecko的渲染引擎,因此当abcpdf使用IE的内置服务器版本进行渲染时,您可以绕过类似的问题

所以我深入研究了这个错误的更精确的原因。事实证明,远程桌面是罪魁祸首。任何我使用RDP的服务器都有这个问题,任何我不使用RDP的服务器都没有。这是将PDF呈现给EMF,我认为您所指的呈现仅适用于HMTL文件(尽管我可能错了)。不幸的是,我们有一个7的许可证,我不确定在这一点上是否有资金进行升级,尽管我们肯定会记住这一点。谢谢