2016-03-07 125 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();