Printing 从Win RT应用程序打印(Windows 8.1应用程序)

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 观察结果- 如果我使用打印命令手动打印一个普通文本文件(右键单击文件,然后打印),那么所有内容都可以完美打印 如果我通过创

我正在windows 8.1(通用应用程序)中开发POS应用程序。 订单收据将从应用程序中打印出来,甚至我也可以这样做

打印机-EPSON TM-U220D

输入-正在使用ViewModel中的动态内容实际创建网格。所以这个网格是打印机的输入

输出-在打印预览(附件pic 1)中,所有内容看起来都不错,但当收据实际打印时,内容从结尾处被切断(附件pic 2)

图1

图2

观察结果-

  • 如果我使用打印命令手动打印一个普通文本文件(右键单击文件,然后打印),那么所有内容都可以完美打印
  • 如果我通过创建动态网格从应用程序中打印相同的内容,那么使用小字体打印是很好的,但是使用大一点字体的内容会再次被切断
  • 尝试过-

  • 通过指定高度,优化了创建网格的代码
  • 问题-

  • 如果预览都很好,为什么不输出呢
  • 是否有人尝试将ePOS-Print_SDK_141020E用于Windows应用商店应用程序
  • 生成动态网格代码

     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)