- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 WPF 应用程序中,我正在创建一个 FlowDocument
通过将其 XAML 标记构建为字符串,然后使用 XamlReader.Parse
将字符串转换为 FlowDocument
对象,然后我将其保存到 XPS 文档文件中。它有效。
我需要在文档中包含图像,因此为了实现此目的,我在临时目录中创建并保存图像作为临时文件,然后在我的 FlowDocument
中使用绝对路径引用它。的 XAML。这也有效 - 在 XPS 文档创建过程中,图像实际上嵌入到 XPS 文档中,这很棒。
但问题是,我的应用程序在此图像上保留文件锁定,直到应用程序退出。
我正在清理所有资源。我生成的 XPS 文件没有文件锁定 - 只有图像文件。如果我注释掉创建 XPS 文件的代码部分,则图像文件不会被锁定。
我的代码(我使用 .NET 4 CP):
var xamlBuilder = new StringBuilder();
// many lines of code like this
xamlBuilder.Append(...);
// create and save image file
// THE IMAGE AT THE PATH imageFilePath IS GETTING LOCKED
// AFTER CREATING THE XPS FILE
var fileName = string.Concat(Guid.NewGuid().ToString(), ".png");
var imageFilePath = string.Format("{0}{1}", Path.GetTempPath(), fileName);
using (var stream = new FileStream(imageFilePath, FileMode.Create)) {
var encoder = new PngBitmapEncoder();
using (var ms = new MemoryStream(myBinaryImageData)) {
encoder.Frames.Add(BitmapFrame.Create(ms));
encoder.Save(stream);
}
stream.Close();
}
// add the image to the document by absolute path
xamlBuilder.AppendFormat("<Paragraph><Image Source=\"{0}\" ...", imageFilePath);
// more lines like this
xamlBuilder.Append(...);
// create a FlowDocument from the built string
var document = (FlowDocument) XamlReader.Parse(xamlBuilder.ToString());
// set document settings
document.PageWidth = ...;
...
// save to XPS file
// THE XPS FILE IS NOT LOCKED. IF I LEAVE OUT THIS CODE
// AND DO NOT CREATE THE XPS FILE, THEN THE IMAGE IS NOT LOCKED AT ALL
using (var xpsDocument = new XpsDocument(filePath, FileAccess.ReadWrite)) {
var documentWriter = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
documentWriter.Write(((IDocumentPaginatorSource) document).DocumentPaginator);
xpsDocument.Close();
}
(实际上,它是临时目录中动态生成的图像这一事实是无关紧要的 - 如果我在计算机上的任何图像文件的路径中进行硬编码,则会出现此问题 - 它将被锁定。)
人们可能会认为 XPS 创建代码中存在导致文件锁定的错误。
还有什么我可以尝试的吗?或者通过代码解除文件锁定的方法?
最佳答案
您可以像这样更改您的 xaml:
<Image>
<Image.Source>
<BitmapImage CacheOption="None" UriSource="your path" />
</Image.Source>
</Image>
能够使用 CacheOption
参数,指定 Xaml Builder 应如何加载图像文件,因为默认值似乎会锁定它(等待 GC似乎完成了它的工作)。
这里有一些相关的问题:How do you make sure WPF releases large BitmapSource from Memory?
关于wpf - 在 WPF 中创建 XPS - 使用的图像文件将被锁定,直到我的应用程序退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422992/
有没有办法在使用 WPF XPS 查看器打印 XPS 时设置默认布局方向? 我的固定文档 XPS 的页面方向设置为横向,页面媒体大小的宽度大于其高度,并且在查看器中正确显示为横向。 只是当您点击打印按
我正在将 WPF FlowDocument 保存到文件系统,使用此代码和带有 xps 扩展名的文件名: // Save FlowDocument to file system as XPS docum
我正在研究批量打印解决方案。 要打印的文件将采用各种(典型)格式,例如 PDF、Word、Excel 等。根据我收集(和测试)的结果,打印 XPS 文件是在 Windows 平台上进行的方式。 但是,
使用 Microsoft XPS Document Writer 打印 pdf 文档: string filename = "C:\\1.pdf"; Process process = new Pro
在他的博客条目中 Printing documents to Microsoft XPS Document Writer without user interaction冯远说 If you're p
我们的工具允许导出为 PNG,效果非常好。 现在,我想将导出添加到某种矢量格式。我尝试了 XPS,但结果根本不令人满意。 看看对比http://www.jakubmaly.cz/xps-vs-png.
我正在尝试在 XPS 文档中添加注释。是否可以使用 .Net API 并读取它们?我需要添加嵌入在 XPS 文件中的隐藏文本。 最佳答案 您可以使用 XpsDocument class 将元数据添加到
当我阅读有关 WPF 的书籍时,我看到作者提到 XPS 就像它很重要一样。 Windows 还包括它的 XPS 查看器,我已经看到它被列为 Windows 的“功能”。 但为什么?重点是什么?谁他妈的
XPS 文档的安全性如何?从XPS内部查看后文档中,找到了 Unicode-string 属性。有人可以注入(inject) e.x.吗?将脚本写入 Unicode 字符串属性? XPS 查看器如何处
我喜欢 DocumentViewer 在 WPF 应用程序中显示 XPS 文档。但我还需要编辑 XPS 文档。我找到了用于编辑 XPS 的独立应用程序 (.exe)。我需要的是一个用于查看和编辑 XP
我认为,XPS 文件类似于 PDF 文件,但 XPS 文件的结构是什么?就像 PDF 文件一样? 最佳答案 XPS vs. PDF on CNET 摘录: XPS 文档更像是 ZIP 存档文件,包含在
我正在用 C# 创建一个 asp.net web 应用程序来将一堆 .xps 文件转换为 .pdf 我想验证输入文件是出于安全原因,按其内容类型而不是文件扩展名转换。 最佳答案 According t
我尝试打印到 XPS 打印机(它不是我的默认打印机),但程序打开了一个对话框。我可以跳过对话框吗?这是代码: pSettings = new PrinterSettings()
我将使用 PrintDocument 显示我的 C# WinForms 应用程序的一部分,这几乎完成了,但是我的打印机出现了问题。我使用以下代码捕获表单图像,然后打印该图像,最后我使用 PrintPr
首先,我想指出,我已将此问题作为一个错误提交给 Microsoft,但他们此时不愿修复它。我正在寻找一种解决方法或更好的方法来实现我正在尝试做的事情,因为我们的客户认为这是一个相当重要的问题。 代码
如果用户打印报告,并且他们碰巧正在使用 微软 XPS 打印机 ,我希望默认文件名有意义。 我原以为 XPS 打印机会采用打印作业的名称,并将其用作默认文件名 - 但事实并非如此。 当我打印到该打印机时
我有一个 C# WinForms 应用程序。用户上传一个 .XPS 文件并指定一些打印机设置(份数、纸盒等)。该程序需要以编程方式打印具有这些设置的文档。即,不能有要打印的用户交互。 我可以接近 Sy
我的代码生成一个 saveFileDialog 来保存一个 .xps 文件,而不是实际打印任何东西。我的代码有问题吗?如果没有,我如何配置我的机器才能使此代码正常工作? class Printer {
我需要用 C# 保护 XPS 文档,但我找不到任何库,请帮助我... 谢谢。 最佳答案 我不完全确定“保护 XPS 文档”是什么意思。 如果您的意思是添加签名以便读者可以验证文档是否由您生成,我建议您
我需要拆分现有的 XPS 文档并创建一个只有原始文档的一页的新 XPS 文档。我尝试复制文档并从复制的文档中删除页面,但速度很慢。有没有更有效的方法来做到这一点?请使用 C#。 谢谢。 已解决: pu
我是一名优秀的程序员,十分优秀!