AmyuniPDF 以错误的字体(特殊字符)打印 PDF 文档
本文关键字:打印 PDF 文档 特殊字符 错误 字体 AmyuniPDF | 更新日期: 2023-09-27 18:32:02
我正在使用Amyuni PDF Creator .Net使用Windows服务打印PDF。
Windows 服务在本地系统用户帐户下运行。当我尝试使用上面的库打印时,它以错误的字体打印PDF。请参阅附件(PDF 打印中的字体错误)。
只有部分打印机(如兄弟MFC-8890DW打印机)仍然存在此问题。
但对于具有上述 Windows 服务的同一台打印机,当取消选中上述打印机属性中的启用高级打印功能设置时,它会正确打印 PDF。请参阅附件(禁用高级打印功能)。
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,选中或取消选中启用高级打印功能。
如果没有访问您正在使用的同一台打印机,就很难确切地知道发生了什么。我最好的猜测是,当选中"启用高级打印功能"时,此打印机的驱动程序在处理进程级字体(使用 GDI 函数 AddFontResourceEx 注册的字体)时出现问题。这就是Amyuni PDF Creator使用嵌入在PDF文件中的字体的方式,您所呈现的文件就是这种情况。 解决此问题的可能方法是使用 Document 类的属性"PrintAsImage"。
代码如下所示:
//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工作。