【问题标题】:WPF application throws an exception after printing to file via doPDF printerWPF 应用程序在通过 doPDF 打印机打印到文件后引发异常
【发布时间】:2011-06-23 06:21:26
【问题描述】:

我为会计目的制作了一个 wpf 独立应用程序。该应用程序可以很好地打印到外部打印机或 Microsoft XPS 打印机。当我选择 doPDF(一个输出 pdf 文件的应用程序)作为打印机时,问题就出现了。输出很好;它会创建 pdf 文件并保存它,但是,当我返回应用程序并按任意按钮时,会抛出 XamlParseException was unhandled 错误,上面写着

'对匹配指定绑定约束的类型'RegisterMaintenance.DisplayInvoice' 的构造函数的调用引发了异常。'行号'5'和行位置'7'

InnerException: 验证文件是否存在于指定位置

InnerException:使用相对路径时,请确保当前目录正确

为什么会发生这种情况,我该怎么做才能摆脱这个问题。

【问题讨论】:

  • 我在调试模式下运行了解决方案,发现当前目录更改为我保存 pdf 文件的目录。抛出以下错误“FileNotFoundException 未被用户代码处理”。这是代码var records = from r in XElement.Load(@"Transactions.xml").Elements("Transaction") where r.Element("Invoice").HasElements select r;。由于目录已更改,程序无法找到 Transaction.xml 文件。奇怪的是,当我使用 XPS 并将文件保存在任何地方时,它不会发生

标签: wpf xaml printing


【解决方案1】:

似乎这台 pdf 打印机更改了进程的当前目录。 对于您的问题,我可以想到 2 种可能的解决方法。

解决您的问题的第一个也是最明显的解决方法是使用“Transactions.xml”的绝对路径并将其存储在您的 app.config 中。但是,如果您的应用程序分布在不同的机器上并安装在不同的位置,这可能会出现问题。

第二种解决方法是在调用打印函数之前暂时存储您当前的工作目录,然后如果它已更改,则在之后恢复它。像这样的:

string path = Directory.GetCurrentDirectory();
//Do the print stuff
Directory.SetCurrentDirectory(path);

【讨论】:

    【解决方案2】:

    似乎最可能的原因是某些资源未找到或已被占用。请与我们分享您的行号“5”和行位置“7”的代码。

    【讨论】:

      【解决方案3】:

      您可以使用调试器并在调用 RegisteMaintenance.DisplayInvoice 的构造函数的第 5 行设置断点。查看正在使用的文件路径并解决问题。或者,如果您非常确信这不是问题,您可以尝试/捕获并忽略异常,但我不建议这样做。

      【讨论】:

        猜你喜欢
        • 2021-07-17
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多