2016-03-07 126 views
0

我在包含必須打印在Dymo LabelWriter 450上的標籤的C#Web應用程序中創建PDF。使用標準打印機在C#中使用非標準尺寸打印PDF

創建並打印我使用的標籤Spire.PDF

如果我將PDF保存在一個文件夾中,然後使用Acrobat Reader打印它,它會正確打印(因此我可以確認在我的應用程序中設置的頁面大小是否正確)。

當我直接從應用程序打印時,PDF被拉伸異常,寬度減小,高度增大,超出標籤邊界。

我的代碼如下:

PdfDocument doc = new PdfDocument(); 
doc.LoadFromFile(fileName); 

SizeF pageSize = doc.Pages[0].Size; 

PageSettings ps = new PageSettings(); 
ps.PaperSize = new PaperSize("MyPaperSize", (int)pageSize.Width, (int)pageSize.Height); 

doc.PrintDocument.DefaultPageSettings = ps; 

doc.PrinterName = printerName; 

doc.PrintDocument.PrinterSettings.DefaultPageSettings.Margins.Left = 0; 
doc.PrintDocument.PrinterSettings.DefaultPageSettings.Margins.Right = 0; 
doc.PrintDocument.PrinterSettings.DefaultPageSettings.Margins.Top = 0; 
doc.PrintDocument.PrinterSettings.DefaultPageSettings.Margins.Bottom = 0; 

PrintDocument printDoc = doc.PrintDocument; 
printDoc.Print(); 
+1

我曾經在Dymo擔任QA工程師,現在我是Spire.pdf的競爭對手iText的QA工程師,所以我碰巧對硬件和PDF格式有一些經驗。是否可以分享高分辨率照片或掃描一個好的標籤和拉伸的標籤?和一個PDF文件?然後從Adobe和您自己的應用程序打印到prn文件,然後將該prn文件發送到打印機。我忘記了如何做Windows,作爲Linux用戶,但這應該可以幫助您開始進行故障排除。 –

+0

基於過去的經驗,我有一種預感,但我希望首先看到你的文件。 –

+0

@AmedeeVanGasse我掃描了兩個標籤。 http://imgur.com/jt5tFF4左邊的是正確的,另一個是拉伸的。 – Alessandro

回答

0

我終於結束了使用PdfiumViewer打開我的文檔並創建一個PrintDocument的發送到打印機。

下面的代碼現在打印正確我戴莫打印機上

PrinterSettings printerSettings = new PrinterSettings(); 
printerSettings.PrinterName = printerName; 
printerSettings.DefaultPageSettings.PaperSize = paperSize; 
printerSettings.DefaultPageSettings.Landscape = true; 
printerSettings.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0); 

PdfiumViewer.PdfDocument pdfiumDoc = PdfiumViewer.PdfDocument.Load(fileName); 
PrintDocument pd = pdfiumDoc.CreatePrintDocument(PdfiumViewer.PdfPrintMode.CutMargin);    
pd.PrinterSettings = printerSettings; 
pd.Print(); 

我想與該文件由Spire.Pdf正在加載的問題是DefaultPageSettings.PrintableArea(只讀)有錯誤的大小等文件最終在該區域被壓縮。

0

我可以通過在我的服務器上保存該文件的副本來解決此問題。如果在打印文檔之前「保存」文檔,即使從同一個C#對象打印,但不觸及我新創建的文件,它也能正確打印。

document.SaveToFile(HttpContext.Current.Server.MapPath(string.Format(@".\my-ticket-{0}-{1}.pdf", DateTime.Now.Ticks, Ticket.OrderNumber))); 
PrintDocument printDoc = document.PrintDocument; 
printDoc.Print();