【问题标题】:Not able to print fixed document with large user control element in wpf无法在 wpf 中打印具有大型用户控件元素的固定文档
【发布时间】:2015-08-14 18:41:32
【问题描述】:

我正在尝试打印用户控件。我将用户控件作为固定文档中的框架元素传递。当用户控件很大时,它不会完全打印,只有一页被打印,剩余的内容被截断。我没有得到剩余的页面。我需要在多个页面中连续打印固定文档而不截断内容。

  public void PrintAllReceipts(object datatoprint, string resourceNameToUserControl)
         {

             var assembly = Assembly.GetEntryAssembly();
             string resourceName = resourceNameToUserControl;

             FrameworkElement elem;
             using (Stream stream = assembly.GetManifestResourceStream(resourceName))
             {
                 using (StreamReader reader = new StreamReader(stream))
                 {
                     elem = XamlReader.Parse(reader.ReadToEnd()) as FrameworkElement;
                 }
             }

             var data = datatoprint;

             elem.DataContext = data;


             //var pageSize = new Size(8.26 * 96, 11.69 * 96); // A4 page, at 96 dpi
             //FixedDocument fixedDoc = new FixedDocument();
             //PageContent pageContent = new PageContent();
             //FixedPage fixedPage = new FixedPage();

             //fixedDoc.DocumentPaginator.PageSize = pageSize;
             //fixedPage.Width = pageSize.Width;
             //fixedPage.Height = pageSize.Height;
             //Create first page of document
             //fixedPage.Children.Add(elem);
             //fixedPage.Measure(pageSize);
             //fixedPage.Arrange(new Rect(new Point(), pageSize));
             //fixedPage.UpdateLayout();
             //((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
             //fixedDoc.Pages.Add(pageContent);

        PrintDialog dial = new PrintDialog();
        PrintContinuous(elem);
           //List<FixedDocument > docss = GetFixedDocument(elem, dial);
           //foreach (FixedDocument docs in docss)
           //{
           //    dial.PrintDocument(docs.DocumentPaginator, "");
           //}

          //   ShowPrintPreview(docss);

         }



public static void PrintContinuous( FrameworkElement fe)
         {
             PrintDialog pd = new PrintDialog();

             bool? result = pd.ShowDialog();

             if (!result.HasValue || !result.Value) return;

             fe.Dispatcher.Invoke(new Action(() =>
             {
                 fe.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                 fe.Arrange(new Rect(fe.DesiredSize));
                 fe.UpdateLayout();
             }), System.Windows.Threading.DispatcherPriority.Render);

             pd.PrintVisual(fe, ((String.IsNullOrWhiteSpace
             (fe.Name) ? "Temp" : fe.Name) + " PRINT"));
         }

【问题讨论】:

  • 看看RenderTargetBitmap类。
  • 谢谢,我会试试你的建议。

标签: c# wpf


【解决方案1】:

您需要对视觉对象进行分页。

您可以获取控件并将其转换为位图,然后将位图切成适合页面的部分,将页面添加到 FixedDocument 并使用 PrintDialog.PrintDocument 将其发送到打印机。

请参阅这篇相当长的 CodeProject 文章,它完全涵盖了所需的流程和代码:Printing-large-WPF-UserControls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多