在标签打印机上以非标准尺寸在 C# 中打印 PDF
Print a PDF in C# with non standard size on a label printer
我在 C# 网络应用程序中创建了一个 PDF,其中包含一个必须打印在 Dymo LabelWriter 450 上的标签。
创建和打印我正在使用的标签 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();
我最终使用 PdfiumViewer 打开我的文档并创建一个 PrintDocument 以发送到打印机。
以下代码现在可以在我的 Dymo 打印机上正确打印
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
(只读)的大小错误,因此文档最终在该区域被压缩。
我可以通过在我的服务器上保存文件的副本来解决这个问题。如果我在打印之前 "save" 文档,它会正确打印,即使我从同一个 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();
我在 C# 网络应用程序中创建了一个 PDF,其中包含一个必须打印在 Dymo LabelWriter 450 上的标签。
创建和打印我正在使用的标签 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();
我最终使用 PdfiumViewer 打开我的文档并创建一个 PrintDocument 以发送到打印机。
以下代码现在可以在我的 Dymo 打印机上正确打印
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
(只读)的大小错误,因此文档最终在该区域被压缩。
我可以通过在我的服务器上保存文件的副本来解决这个问题。如果我在打印之前 "save" 文档,它会正确打印,即使我从同一个 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();