2016-01-27 85 views
3

我正在使用Amyuni PDF Creator .Net使用Windows服務打印PDF。AmyuniPDF以錯誤的字體打印PDF文檔(特殊字符)

Windows服務正在本地系統用戶帳戶下運行。當我嘗試使用上述庫進行打印時,它會以錯誤的字體打印PDF。見附件(Wrong font in PDF printing)。

只有部分打印機存在此問題,例如兄弟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); 
    } 
} 

但同一窗口服務打印PDF正確一些其他的打印機,如的HP LaserJet P1005無論是啓用高級打印功能選中或取消選中。

+1

你可以發佈一個鏈接到你創建這種方式公開可用的PDF?至少我們可以驗證在其字體處理中是否有奇怪的東西。否則,我會記下它作爲打印機驅動程序試圖太聰明,即嘗試在本地緩存字體。 – usr2564301

+0

您可以下載AmyuniPDF創建者創建的PDF文件嗎? https://www.dropbox.com/s/6wwe51ro7ie7j8g/129666_OTQ.pdf?dl=0 – Sachintana

+0

是的,它使用其他打印應用程序打印。這裏的問題是在** Local System **用戶下使用** Windows服務**進行打印時。 我們使用Amyuni 5.0。 感謝您關注此問題。 – Sachintana

回答

3

無法訪問您正在使用的同一臺打印機,很難確切知道發生了什麼。我最好猜測的是,當選中「啓用高級打印功能」時,本打印機的驅動程序在處理級別字體(使用GDI功能AddFontResourceEx註冊的那些字體)時遇到問題。這就是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創建然後發送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工作。

+0

注意:GDI不是將內容呈現到打印機的唯一方式,還有XPS和DirectX,並且給定打印機驅動程序的行爲可能會改變(無論更好還是更糟)。只是發生Amyuni PDF Creator 5.0使用GDI進行文本渲染,其他工具可能會使用其他工具。 – yms

+0

感謝yms您解釋如何在Amyuni中嵌入字體以及哪些可能會導致Windows服務下的問題。我將使用PrintAsImage屬性進行測試,作爲解決此問題的解決方法。讓我知道是否有任何使用PrintAsImage的後果?請注意,我們還使用標籤打印機和postscript打印機進行打印。 – Sachintana

+0

將PDF作爲圖像打印,但由於發送到假脫機程序的文件大小比原來大15-20倍,並且我們無法解決問題,因此該過程非常緩慢。 https://www.dropbox.com/s/njh2gq9r46gd0mq/PrintAsImage-print-spooler.png?dl=0 我們已經忘記提及的是,當將其作爲控制檯應用程序運行時,相同的打印過程/代碼可以工作。 我們也使用相同的pdf文件和相同的打印機。 – Sachintana