【发布时间】:2015-11-04 03:13:37
【问题描述】:
我正在尝试编写将在特殊介质上打印的自定义标签打印机。
打印介质大小约为 2.00" x 0.244",使用 DPI 为 600。下面是传入位图标签值的 printLabel 函数。
您会看到我目前正在尝试自定义页面大小,但打印机打印出 12 个标签,只有 1 个具有我需要的信息。
我一次只需要打印一个标签。如果您需要更多信息或有疑问,请随时发表评论,但我不知道我需要做什么。
我无法想象从 Windows 中的打印机设置页面获取页面大小的枚举集合。任何帮助将不胜感激。
PrintServer ps = null;
if (Properties.Settings.Default.ShrinkLabelPrinter.Contains(@"\\serverloc1") || Properties.Settings.Default.ShrinkLabelPrinter.Contains(@"\\SERVERLOC1"))
ps = new PrintServer(@"\\serverloc1");
else if (Properties.Settings.Default.ShrinkLabelPrinter.Contains(@"\\serverloc2") || Properties.Settings.Default.ShrinkLabelPrinter.Contains(@"\\SERVERLOC2"))
ps = new PrintServer(@"\\serverloc2");
else
ps = new PrintServer();
System.Windows.Controls.PrintDialog pd = new System.Windows.Controls.PrintDialog();
PrintQueue queue = ps.GetPrintQueue(@"\\serverloc2\bbp33 (Copy 1)");
List<string> lstPaperSizes = new List<string>();
queue.CurrentJobSettings.CurrentPrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.Unknown, 150, 141);
//queue.CurrentJobSettings.CurrentPrintTicket.PageMediaSize = ;
pd.PrintQueue = queue;
System.Drawing.Image img = label;
//REMOVE IF LABELS ARE PORTRAIT FORMAT
//img.RotateFlip(RotateFlipType.Rotate90FlipNone);
var ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
var bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = ms;
RenderOptions.SetBitmapScalingMode(bi, BitmapScalingMode.HighQuality);
bi.EndInit();
var vis = new DrawingVisual();
var dc = vis.RenderOpen();
Rect angle = new Rect
{
Width = Convert.ToInt32(Math.Round(bi.Width, 0)),
Height = Convert.ToInt32(Math.Round(bi.Height, 0))
};
dc.DrawImage(bi, angle);
dc.Close();
img.Save(@"\temp\Label Creator\Resources\cable_label.png");
pd.PrintVisual(vis, "Cable Label");
【问题讨论】: