gpt4 book ai didi

c# - 在 WPF 中打印隐藏窗口

转载 作者:行者123 更新时间:2023-11-30 12:16:56 26 4
gpt4 key购买 nike

我有一个 Window 对象,我想创建它,设置一些值,然后直接发送到打印机而不显示它。我认为这是正确的做法,但显示的是空白文档。

PrintDialog dlg = new PrintDialog();

ReportWindow rw = new ReportWindow(); //WPF Window object

var sz = new Size(96*8.5, 96*11); //size of a paper page, 8.5x11

rw.Measure(sz); rw.Arrange(new Rect(sz));

// rw.Show(); //want to keep it hidden

dlg.PrintVisual(rw, "report printout");

rw.Close();

为了验证打印代码是否正常,我将其放入窗体加载事件中,调用 Show(),它工作正常。

最佳答案

无需创建隐藏窗口,您可以使用 DocumentPage 呈现 WPF 控件以进行打印.要打印 DocumentPage,您需要扩展 DocumentPaginator类。

下面是实现一个简单的 DocumentPaginator 的代码,它将打印出 UIElements 的任何 List

class DocumentPaginatorImpl : DocumentPaginator
{
private List<UIElement> Pages { get; set; }

public DocumentPaginatorImpl(List<UIElement> pages)
{
Pages = pages;
}

public override DocumentPage GetPage(int pageNumber)
{
return new DocumentPage(Pages[pageNumber]);
}

public override bool IsPageCountValid
{
get { return true; }
}

public override int PageCount
{
get { return Pages.Count; }
}

public override System.Windows.Size PageSize
{
get
{
/* Assume the first page is the size of all the pages, for simplicity. */
if (Pages.Count > 0)
{
UIElement page = Pages[0];

if (page is Canvas)
return new Size(((Canvas)page).Width, ((Canvas)page).Height);
// else if ...
}

return Size.Empty;
}
set
{
/* Ignore the PageSize suggestion. */
}
}

public override IDocumentPaginatorSource Source
{
get { return null; }
}
}

最后,要进行打印,您只需要:

dialog.PrintDocument(new DocumentPaginatorImpl(pages), "Print Job Description");

关于c# - 在 WPF 中打印隐藏窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4452578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com