我是做前端的,(lll¬ω¬)!!!,由于.net的工程师离职,遗留下来一个问题,就是wpf打印条形码的时候,出现锯齿的现象。
我也不清楚如何解决,请教wpf的大神,帮忙看下!!!小弟感激不尽。打印机是TSC的
下面是.xmal里面的内容,打印的主要内容:
<Grid>
<Grid Name="grdLabel" Width="840" Height="260" >
<Grid.RowDefinitions>
<RowDefinition Height="0*" />
<RowDefinition Height="23*" />
<RowDefinition Height="2*" />
<RowDefinition Height="5*" />
<RowDefinition Height="4*" />
<RowDefinition Height="5*" />
<RowDefinition Height="5*" />
<RowDefinition Height="5*" />
<RowDefinition Height="6*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition Width="33*"/>
<ColumnDefinition Width="51*"/>
</Grid.ColumnDefinitions>
<Image Grid.Row="1" Grid.Column="1" Name="imgSN" HorizontalAlignment="Left" Stretch="Uniform" UseLayoutRounding="False"/>
<StackPanel Orientation="Horizontal" Grid.Row="4" Grid.Column="1" Margin="15,0,0,0">
<TextBlock Margin="1,0,0,0" FontSize="18" VerticalAlignment="Bottom" Text="产品序列号:" Grid.Column="1" FontWeight="Bold"/>
<TextBlock Name="tbLabelSN" FontSize="18" VerticalAlignment="Bottom" Grid.Column="1" FontWeight="Bold"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="5" Grid.Column="1" Margin="15,0,0,0">
<TextBlock FontSize="18" VerticalAlignment="Bottom" Text="颜色:" Grid.Column="1" FontWeight="Bold"/>
<TextBlock FontSize="18" VerticalAlignment="Bottom" Text="{Binding Path=Model.Color.Color,Mode=OneWay}" Grid.Column="3" FontWeight="Bold"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="6" Grid.Column="1" Margin="15,0,0,0">
<TextBlock FontSize="18" VerticalAlignment="Top" Text="型号:" Grid.Column="0" FontWeight="Bold"/>
<TextBlock FontSize="18" VerticalAlignment="Top" Text="{Binding Path=Model.Name,Mode=OneWay}" Grid.Column="1" FontWeight="Bold"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="7" Grid.Column="1" Margin="15,0,0,0">
<TextBlock FontSize="18" VerticalAlignment="Top" HorizontalAlignment="Right" Text="生产日期:" Grid.Column="2" FontWeight="Bold"/>
<TextBlock FontSize="18" VerticalAlignment="Top" Text="{Binding Path=BatchDate}" Grid.Column="3" FontWeight="Bold"/>
</StackPanel>
</Grid>
下面是打印标签的代码:
void PrintLabel(string sn)
{
System.Drawing.Bitmap m_Bitmap = new System.Drawing.Bitmap(Elecnode.GeneratorBarcode(sn),276*6,94*6);
//m_Bitmap.Save("./lalalala.png");
//m_Bitmap.Save("./nidayue.png");
IntPtr ip = m_Bitmap.GetHbitmap();
BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ip, IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
DeleteObject(ip);
imgSN.Source = bitmapSource;
tbLabelSN.Text = sn;
grdLabel.UpdateLayout();
PrintDialog printDialog = new System.Windows.Controls.PrintDialog();
//var renderTarget = new RenderTargetBitmap((int)grdLabel.Width, (int)grdLabel.Height, 600, 600, PixelFormats.Default);
var renderTarget = new RenderTargetBitmap(940, 260, 310, 320, PixelFormats.Default);
renderTarget.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.NearestNeighbor);
printDialog.PrintTicket = new PrintTicket();
printDialog.PrintTicket.PageMediaSize = new PageMediaSize(renderTarget.Width, renderTarget.Height);
var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);//0.33502812148481437 0.31995154451847363 0.1599030890369473
var scale = Math.Max(capabilities.PageImageableArea.ExtentWidth / grdLabel.Width, capabilities.PageImageableArea.ExtentHeight / grdLabel.Height);
grdLabel.LayoutTransform = new ScaleTransform(scale, scale);
var sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
grdLabel.Measure(sz);
grdLabel.Arrange(new Rect(new Point(0, 0), sz));
printDialog.PrintVisual(grdLabel, "标签打印");
//isFirstPrint = false;
}