gpt4 book ai didi

c# - 打印转换后的 XML

转载 作者:行者123 更新时间:2023-11-30 22:50:11 25 4
gpt4 key购买 nike

由于我无法控制的情况,我用自制的 XML 报告替换了我们所有的 Crystal Reports,这些报告工作得很好。对于弹出 Crystal Reports 查看器的大多数报表,以下代码可以在 IE 中很好地打开它们,并通过 XSLT 样式表将其转换为 HTML。

ProcessStartInfo psi = new ProcessStartInfo(reportFilename)
{
UseShellExecute = true
};

using (Process p = new Process {StartInfo = psi})
{
p.Start();
}

问题是一些报告只是直接打印到打印机,从不向用户显示报告,这在 CR 中工作正常。我不知道如何使用上面的代码执行此操作。

如果可能,我不希望专门启动 IE 进程,但我保证它们运行的​​是 Windows,因此这不是硬性要求。此外,以这种方式直接打印是通过 XSL 将 XML 转换为 HTML 并打印它,还是只打印实际的 XML 文本?

编辑:我已经尝试添加:

Verb = "Print"

到 ProcessStartInfo 对象,但最终会抛出一个异常:

"No application is associated with the specified file for this operation"

再次编辑:将 IE 指定为要启动的 exe,再次加载 XML 就好了,但不提供“打印”操作。在 JavaScript block 中添加“window.print()”是可行的,但需要在允许脚本运行后手动单击打印按钮,因为 IE 会阻止它。

编辑第三个:我的老板告诉我不用担心,他们可以从 IE 打印。我仍然想弄清楚这一点。我试过命令行“print.exe”,但它只将原始 XML 打印到打印机。尝试使用 PrintDocument 进行 XslCompiledTransform,但这也不是我想要的。

最佳答案

终于想通了。我刚刚创建了一个不可见的 WebBrowser 控件来执行 IE 渲染,并在 DocumentCompleted 上调用它的 Print() 方法。使用默认的打印机设置工作得非常棒。

private static void PrintReport(string reportFilename)
{
WebBrowser browser = new WebBrowser();

browser.DocumentCompleted += browser_DocumentCompleted;

browser.Navigate(reportFilename);
}

private static void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;

if (null == browser)
{
return;
}

browser.Print();

browser.Dispose();
}

关于c# - 打印转换后的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707518/

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