Printing 从Win RT应用程序打印(Windows 8.1应用程序)
我正在windows 8.1(通用应用程序)中开发POS应用程序。 订单收据将从应用程序中打印出来,甚至我也可以这样做 打印机-EPSON TM-U220D 输入-正在使用ViewModel中的动态内容实际创建网格。所以这个网格是打印机的输入 输出-在打印预览(附件pic 1)中,所有内容看起来都不错,但当收据实际打印时,内容从结尾处被切断(附件pic 2) 图1 图2 观察结果-Printing 从Win RT应用程序打印(Windows 8.1应用程序),printing,winrt-xaml,windows-applications,epson,Printing,Winrt Xaml,Windows Applications,Epson,我正在windows 8.1(通用应用程序)中开发POS应用程序。 订单收据将从应用程序中打印出来,甚至我也可以这样做 打印机-EPSON TM-U220D 输入-正在使用ViewModel中的动态内容实际创建网格。所以这个网格是打印机的输入 输出-在打印预览(附件pic 1)中,所有内容看起来都不错,但当收据实际打印时,内容从结尾处被切断(附件pic 2) 图1 图2 观察结果- 如果我使用打印命令手动打印一个普通文本文件(右键单击文件,然后打印),那么所有内容都可以完美打印 如果我通过创
private void AddRows(Grid grid, int count)
{
for (int i = 0; i < count; i++)
{
RowDefinition row = new RowDefinition();
row.Height = GridLength.Auto;
grid.RowDefinitions.Add(row);
}
}
private void AddColumns(Grid grid, int count)
{
for (int i = 0; i < count; i++)
{
grid.ColumnDefinitions.Add(new ColumnDefinition());
}
}
private TextBlock CreateTextBlock(string text, Color color, FontWeight fw, double fs = 10, int thick = 5)
{
if (color == null) color = Colors.Black;
TextBlock txtBlock1 = new TextBlock();
txtBlock1.Text = text;
txtBlock1.FontSize = fs;
txtBlock1.FontWeight = fw;
txtBlock1.Foreground = new SolidColorBrush(color);
txtBlock1.VerticalAlignment = VerticalAlignment.Center;
txtBlock1.Margin = new Thickness(thick);
return txtBlock1;
}
private async Task<Grid> CreateDynamicWPFGrid()
{
Grid ParentGrid = new Grid();
AddRows(ParentGrid, 8);
/* Start First Grid*/
Grid DynamicGrid = new Grid();
DynamicGrid.Width = 230;
DynamicGrid.HorizontalAlignment = HorizontalAlignment.Left;
DynamicGrid.VerticalAlignment = VerticalAlignment.Top;
DynamicGrid.Margin = new Thickness(24, 0, 0, 0);
AddColumns(DynamicGrid, 2);
AddRows(DynamicGrid, 3);
TextBlock txtBlock1 = CreateTextBlock(DateTime.Now.ToString("M/d/yy"), Colors.Black, FontWeights.Normal);
Grid.SetRow(txtBlock1, 0);
Grid.SetColumn(txtBlock1, 1);
.
.
.
.
Return ParentGrid;
}
private void AddRows(网格、整数计数)
{
for(int i=0;i
打印机事件代码
//Register Print Contract
async Task RegisterPrintContract()
{
PrintManager manager = PrintManager.GetForCurrentView();
manager.PrintTaskRequested += OnPrintTaskRequested;
await PrintManager.ShowPrintUIAsync();
}
//Unregister Print Contract
void UnregisterPrintContract()
{
PrintManager printMan = PrintManager.GetForCurrentView();
printMan.PrintTaskRequested -= OnPrintTaskRequested;
}
void OnPrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
// If I need to be asynchronous, I can get a deferral. I don't *need*
// to do this here, I'm just faking it.
var deferral = args.Request.GetDeferral();
PrintTask printTask = args.Request.CreatePrintTask("My Print Job", OnPrintTaskSourceRequestedHandler);
printTask.Completed += OnPrintTaskCompleted;
deferral.Complete();
}
void OnPrintTaskCompleted(PrintTask sender, PrintTaskCompletedEventArgs args)
{
// TODO: Tidy up.
this._document = null;
this._pages = null;
}
async void OnPrintTaskSourceRequestedHandler(PrintTaskSourceRequestedArgs args)
{
var deferral = args.GetDeferral();
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
this._document = new PrintDocument();
this._document.Paginate += OnPaginate;
this._document.GetPreviewPage += OnGetPreviewPage;
this._document.AddPages += OnAddPages;
// Tell the caller about it.
args.SetSource(this._document.DocumentSource);
});
deferral.Complete();
}
void OnAddPages(object sender, AddPagesEventArgs e)
{
// Loop over all of the preview pages and add each one to add each page to be printied
// We should have all pages ready at this point...
foreach (var page in this._pages)
{
//this._pages[page.Key]
this._document.AddPage(this._pages[page.Key]);
}
PrintDocument printDoc = (PrintDocument)sender;
// Indicate that all of the print pages have been provided
printDoc.AddPagesComplete();
}
async void OnGetPreviewPage(object sender, GetPreviewPageEventArgs e)
{
Grid x = await CreateDynamicWPFGrid();
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// NB: assuming it's ok to keep all these pages in
// memory. might not be the right thing to do
// of course.
if (this._pages == null)
{
this._pages = new Dictionary<int, UIElement>();
}
if (!this._pages.ContainsKey(e.PageNumber))
{
this._pages[e.PageNumber] = x;
}
if (this._document == null)
this._document = new PrintDocument();
this._document.SetPreviewPage(e.PageNumber, this._pages[e.PageNumber]);
}
);
}
async void OnPaginate(object sender, PaginateEventArgs e)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// I have one page and that's *FINAL* !
this._document.SetPreviewPageCount(e.CurrentPreviewPageNumber, PreviewPageCountType.Final);
});
}
//注册打印合同
异步任务注册表PrintContract()
{
PrintManager=PrintManager.GetForCurrentView();
manager.PrintTaskRequested+=OnPrintTaskRequested;
等待PrintManager.ShowPrintUIAsync();
}
//未注册打印合同
作废未注册的打印合同()
{
PrintManager printMan=PrintManager.GetForCurrentView();
printMan.PrintTaskRequested-=OnPrintTaskRequested;
}
无效OnPrintTaskRequested(PrintManager发件人,PrintTaskRequestedEventArgs)
{
//如果我需要异步,我可以得到延迟。我不需要
//在这里这么做,我只是假装而已。
var deferral=args.Request.GetDeferral();
PrintTask PrintTask=args.Request.CreatePrintTask(“我的打印作业”,OnPrintTaskSourceRequestedHandler);
printTask.Completed+=OnPrintTaskCompleted;
延迟。完成();
}
无效OnPrintTaskCompleted(PrintTaskSender、PrintTaskCompletedEventArgs args args)
{
//托多:整理一下。
此._文件=null;
此参数为.\u pages=null;
}
异步无效OnPrintTaskSourceRequestedHandler(PrintTaskSourceRequestedArgs args)
{
var deferral=args.GetDeferral();
等待Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
此._文档=新的打印文档();
本文件为.u document.Paginate+=OnPaginate;
此._document.GetPreviewPage+=OnGetPreviewPage;
此._document.AddPages+=OnAddPages;
//把这件事告诉打电话的人。
args.SetSource(此._document.DocumentSource);
});
延迟。完成();
}
无效OnAddPages(对象发送方,AddPagesEventArgs e)
{
//在所有预览页面上循环并添加每个页面,以添加要打印的每个页面
//我们应该在这一点上准备好所有页面。。。
foreach(此中的变量页。\u页)
{
//这是。_页面[page.Key]
本._文件.AddPage(本._页[页.键]);
}
PrintDocument printDoc=(PrintDocument)发件人;
//指示已提供所有打印页
printDoc.AddPagesComplete();
}
异步void OnGetPreviewPage(对象发送方,GetPreviewPageEventArgs e)
{
Grid x=等待CreateDynamicWPFGrid();
等待Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
//注意:假设可以保留所有这些页面
//记忆。可能不是正确的选择
//当然。
if(this.\u pages==null)
{
这是一本新字典();
}
如果(!this._pages.ContainsKey(e.PageNumber))
{
这._页[e.页码]=x;
}
if(此._文档==null)