我必须打印到指定的打印机(价格标签打印机)一些数据。 数据看起来像ean13条形码,价格,项目标题等
我有几个设置在每种情况下打印什么。 我想要的是什么:
我应该采用什么方法,以最正确的方式做到这一点? 现在打印例程如下:
private void DrawOnGraphics(Graphics graphics)
{
using (var shF = new Font("Arial", 10, FontStyle.Bold))
{
graphics.DrawImage(_barcode, new Point(0, 0));
// etc...
}
我认为这不是很好的代码,但它可以在这里工作:
var pDoc = new PrintDocument();
pDoc.PrintPage += (a, e) =>
{
DrawOnGraphics(e.Graphics);
e.HasMorePages = false;
};
pDoc.Print();
我可以为这两个动作创建一个'渲染例程':print和printpreview吗? 谢谢。 怎么做到呢?我应该在XAML中用于打印预览
<Image Source="{Binding Path=PrintPreviewImage}" />
或? :)
主要问题是:如何在WPF中为print和printpreview绘制自己的东西(文本,图像等)。
答案 0 :(得分:0)
我试过这种方法:
,我有公共属性PrintPreview(Grid类型)
在XAML中我有
<ContentPresenter Content="{Binding Path=PrintPreview}" />
每个设置都绑定到ViewModel属性
我构建了PrintPreview属性,如下所示:
PrintPreview.Children.Clear(); var title = new TextBlock {...}; PrintPreview.Children.Add(标题); //等
我有“打印”方法,绑定到视图中的“打印”按钮:
PrintQueue pq = new PrintServer().GetPrintQueues(new[]
{
EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections
}).FirstOrDefault(tmp => tmp.FullName.Contains("MyPrintername"));
if (pq == null)
{
MessageBox.Show("Please, setup printer");
return;
}
var pt = new PrintTicket();
// setting printticket
pt.PageMediaSize = new PageMediaSize(FromMMtoPx(96, WidthInMm), FromMMtoPx(96, HeightInMm));
pt.CopyCount = Copies;
pt.PageResolution = new PageResolution(203, 203);
pt.PageOrientation = PageOrientation.Portrait;
pt.PageBorderless = PageBorderless.Borderless;
var pDoc = new System.Windows.Controls.PrintDialog();
pDoc.PrintQueue = pq;
pDoc.PrintTicket = pt;
// scale for whole printer page:
var capabilities = pDoc.PrintQueue.GetPrintCapabilities(pDoc.PrintTicket);
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / PrintPreview.ActualWidth, capabilities.PageImageableArea.ExtentHeight / PrintPreview.ActualHeight);
PrintPreview.LayoutTransform = new ScaleTransform(scale, scale);
var sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
PrintPreview.Measure(sz);
PrintPreview.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
pDoc.PrintVisual(PrintPreview, "MyPrint");
它有效,但我真的不知道,这是不是很好的方法。