【问题标题】:AmyuniPDF prints PDF document in wrong font (special characters)AmyuniPDF 以错误的字体(特殊字符)打印 PDF 文档
【发布时间】:2016-05-04 07:21:59
【问题描述】:

我正在使用 Amyuni PDF Creator .Net 通过 Windows 服务打印 PDF。

Windows 服务正在本地系统用户帐户下运行。当我尝试使用上述库打印时,它以错误的字体打印 PDF。见附件(Wrong font in PDF printing)。

只有部分打印机存在此问题,例如 Brother MFC-8890DW 打印机

但是对于具有上述windows服务的同一台打印机,当取消选中上述打印机属性中的启用高级打印功能设置时,它可以正确打印PDF。见附件(Disable Advanced printing features)。

using (FileStream file1 = new FileStream(pdfFile, FileMode.Open, FileAccess.Read))
{
    using (IacDocument doc1 = new IacDocument())
    {
        doc1.Open(file1, string.Empty);
        doc1.Copies = 1;
        bool printed = doc1.Print(printer, false);
    }
}

但相同的 Windows 服务可以为 HP LaserJet P1005 等其他一些打印机正确打印 PDF,无论是启用高级打印功能选中还是未选中。

【问题讨论】:

  • 您能否发布一个指向您以这种方式创建的公开 PDF 的链接?至少我们可以验证它的字体处理是否有什么奇怪的地方。如果做不到这一点,我会将其记为打印机驱动程序试图变得太聪明,例如,通过尝试在本地缓存字体。
  • 能否请您下载同样由 AmyuniPDF 创建者创建的 PDF 文件。 dropbox.com/s/6wwe51ro7ie7j8g/129666_OTQ.pdf?dl=0
  • 是的,它使用其他打印应用程序打印。这里的问题是在 Local System 用户下使用 Windows 服务 打印时。我们正在使用 Amyuni 5.0。感谢您调查此问题。
  • 当我使用 Spire.PDF 库进行测试时,使用上述 Windows 服务和上述打印机正确打印了相同的 PDF。 nuget.org/packages/Spire.PDFAmyuni PDF打印引擎有问题吗?

标签: c# .net pdf printing


【解决方案1】:

如果无法访问您正在使用的同一台打印机,就很难确切知道发生了什么。我最好的猜测是,当检查“启用高级打印功能”时,本打印机的驱动程序具有处理处理级字体(使用GDI函数@ 987654321)的问题。这就是 Amyuni PDF Creator 使用嵌入在 PDF 文件中的字体的方式,您提供的文件就是这种情况。 一个可能的解决方法是使用attribute "PrintAsImage" of the Document class

代码如下所示:

//set license key This is needed only with licensed version
acPDFCreatorLib.SetLicenseKey("your company", "your activation code");

//Create a new document instance
Amyuni.PDFCreator.IacDocument doc = new Amyuni.PDFCreator.IacDocument(null);

doc.AttributeByName("PrintAsImage").Value =1;

//Open the file here (...)

//Print to default printer
pdfCreator1.Document.Print("", false);

另一种选择是使用 Amyuni PDF Creator 将文件保存为 xps,然后将 xps 文件发送到打印机:

// Create print server and print queue.
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();
defaultPrintQueue.AddJob("my document", "c:\\temp\\mytempfile.xps", true);

免责声明:我为 Amyuni Technologies 工作。

【讨论】:

  • 注意:GDI 不是将内容渲染到打印机的唯一方法,还有 XPS 和 DirectX,并且给定打印机驱动程序的行为可能会在它们中的每一个上发生变化(无论好坏) .恰好 Amyuni PDF Creator 5.0 使用 GDI 进行文本渲染,其他工具可能使用其他工具。
  • 感谢 yms 对字体如何嵌入 Amyuni 以及在 Windows 服务下可能导致问题的解释。我将使用 PrintAsImage 属性作为解决问题的解决方法进行测试。让我知道使用 PrintAsImage 是否有任何后果?请注意,我们还使用标签打印机和 postscript 打印机进行打印。
  • 将 pdf 作为图像打印可以工作,但由于发送到后台处理程序的文件大小要大 15-20 倍,因此该过程非常缓慢,这不是我们可以接受的解决方案。 dropbox.com/s/njh2gq9r46gd0mq/… 我们忘记提及的是,相同的打印过程/代码在作为控制台应用程序运行时可以工作。我们也使用相同的 pdf 文件和相同的打印机。
  • @Sachintana 我会把这个发给开发团队看看。
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多