gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:37:16 25 4
gpt4 key购买 nike

我正在使用 ABCPDF 通过 EMF 文件将 PDF 文件打印到本地打印机。我非常密切地基于 ABC PDF 的示例“ABCPDFView”项目。我的应用程序在我的 Windows 7 和 Windows XP 开发盒上运行良好,但是当我转移到 Windows 2003 测试盒时,简单的嵌入字体(如 Times New Roman 12)呈现完全错误(位置错误,而且又短又矮,几乎就像DPI 的错误非常严重)。

请注意,我已将 DPI 硬编码为 240,因为我使用的是强制 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
}

最佳答案

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

关于printing - ABCPDF 字体打印布局 - 取决于机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com