问题标签 [fixeddocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
312 浏览

wpf - VisualBrush 做“懒惰评估”?

我在更多迭代(每次迭代一页)中创建 FixedDocument,如下所示:

在每次迭代中,我都会稍微更改 MainGrid。所以每个页面都应该包含 MainGrid 的实际状态。但是打印的文档包含与上次迭代内容相同的页面(换句话说 - 最后一个状态在文档的所有页面上)。VisualBrush有什么“懒惰的评价”之类的吗?

0 投票
0 回答
699 浏览

pagination - 渲染后处理流文档页面

上面的代码没有释放任何东西。一旦对流文档进行分页并获取页面的视觉表示,则流文档的内容将由 Visual 引用。因此,Visual 和 flowdocument 的内容都不会被处理。上面这段代码在执行时连续出现内存不足。

有谁知道如何释放所有这些资源所持有的内存?

提前致谢。

0 投票
2 回答
6171 浏览

wpf - 将 FixedDocument 保存到 XPS 文件会导致内存泄漏

我创建了一个 .NET Windows 服务,它执行某些操作并生成报告。这些报告是我保存在某个目录中的 XPS 文档。

熟悉 WPF,我选择创建报告的方式是实例化 a System.Windows.Documents.FixedDocument,根据需要添加FixedPage具有内容的对象。

我的问题是服务内存使用量随着时间的推移不断上升。

起初,我严格检查了我的代码,确保所有一次性对象都被释放,等等,以及其他明显的内存泄漏候选,但仍然存在问题。然后我使用 CLR Profiler 详细查看了 Service 的内存使用情况。

我发现当服务生成这些报告并将它们保存为 XPS 文件时,与对象(、、、、等)FixedDocument关联的所有各种 UI 元素都保留在内存中。FixedDocumentDispatcherFixedPageUIElementCollectionVisual

当我在我的 WPF 应用程序中做同样的事情时,这似乎不会发生,所以我的直觉是它与在 WPF 应用程序之外使用的 WPF UI Dispatcher 模型有关。

FixedDocument在这样的服务中(或一般在 WPF 应用程序之外)使用对象时,如何“处置”我的对象?

======== 编辑 =========

好的,我发现我的内存泄漏与创建/填充 FixedDocument 无关。如果我这样做了,但实际上并没有将它作为 XPS 保存到磁盘,则不会发生内存泄漏。所以,我的问题一定与另存为 XPS 文件有关。

这是我的代码:

我试过的:

  • 手动垃圾收集
  • 在获取它的分页器之前调用UpdateLayout()每一页myFixedDocument(如下面的答案中所建议) - 我也尝试过myFixedDocument直接传递给Write() ie 而不是分页器
  • 将这些代码行放在自己的线程中并手动关闭调度程序

仍然没有运气。

========== 解决方法 ==========

通过使用http://msdn.microsoft.com/en-us/library/system.appdomain.aspx示例中所示的通用方法将上述代码隔离到它自己的 AppDomain 中,内存泄漏不再影响我的服务(我说“不再影响”,因为它仍然会发生,但是当 AppDomain 被卸载时,所有泄漏的资源都会被卸载)。

我仍然渴望看到一个真正的解决方案。

(在相关说明中,对于那些感兴趣的人,使用单独的 AppDomain 会导致我用来将某些 XPS 文件转换为 PDF 文件的 PDFSharp 组件中的内存泄漏。原来 PDFSharp 使用在正常情况下不会增长的全局字体缓存显着。但是使用这些 AppDomain 后缓存越来越大。我编辑了 PDFSharp 源代码,使我能够手动清除 FontDescriptorStock 和 FontDataStock,解决了这个问题。)

========== 解决方案 ==========

请参阅下面的答案以获取最终解决方案。

0 投票
1 回答
1202 浏览

.net - WPF 打印大报表导致 OutOfMemoryException

我创建了一个每月打印的 FixedDocument 报告。它的平均长度约为 350 页,其中大约一半的页面是约 200kb 的 jpeg 图像。该报告在 DocumentViewer 中显示得很好,但我在尝试打印它时遇到了问题。

使用时

如果我只是尝试打印前三分之一的月份数据,例如。120页,很好用。但是,如果我尝试整个月,大约在第 160 页,我会收到以下错误

然后我认为我可以通过将文档拆分为 30 页的小文档来一次打印 30 页来胜过它:

但这只是导致完全相同的错误。我已经尝试从中点到月底打印一百页,这很有效,所以它必须是页面的数量而不是特定的图像(图像只是 jpeg 全部来自一个来源,最大大小 400kb)。

我看到一次打印 30 页时正在使用的内存量

然后在下一批以 1281Mb 崩溃

我已经在一台真正的打印机和 XPS windows 打印机上进行了测试。当我记下这些内存值时,我一直等到每个部分都完全假脱机并打印出来。

我不明白为什么当我将它们分成单独的单独文档时它只是这样构建。我必须处理一些东西,但我不确定是什么?

0 投票
1 回答
347 浏览

xps - 与 XP 相比,什么会导致 XPS FixedDocument 在 Windows 7 上看起来不同?

我有一个程序可以生成一个 FixedDocument 对象并将其显示在 XPS DocumentViewer 中。根据 MSDN 上的文档,“固定文档适用于需要精确的“所见即所得”(WYSIWYG) 演示的应用程序,与所使用的显示器或打印机硬件无关。”

然而,这正是我想要的..

当我在 Windows XP 和 Windows 7 的 XPS DocumentViewers 中打开同一个文档时,文档的呈现方式存在很大差异。Windows 7 版本似乎使用了更大的字体和更大的元素间距。什么会导致这种情况?FixedDocument 的目的难道不是不管操作系统、打印机或其他任何东西,它看起来总是一样吗?

我已经对该主题进行了一些谷歌搜索,但找不到任何相关内容,并感谢您提供的任何建议。

谢谢!

0 投票
3 回答
2257 浏览

c# - 固定文档页面大小

我正在从网上提取图像并将其添加到 FixedDocument 页面。我拉的图像尺寸为 1200px X 1500px。但是在 FixedDocument 中,图像显示为小缩略图(请参阅屏幕截图)。

下面给出的是代码片段。

我需要图像按照其尺寸而不是缩略图显示。请问有人可以让我知道需要做什么才能根据其大小显示图像吗?

非常感谢。

在此处输入图像描述

0 投票
1 回答
1082 浏览

c# - 固定文档动态页面插入

我正在尝试在我的固定文档中循环插入动态页面

但是在第一页之后它给出的错误内容已经是另一个控件的子控件。您能指导我如何将页面添加到您的固定文档。如何制作页面数组?

0 投票
2 回答
8516 浏览

c# - wpf 固定文档动态数据

我正在FixedDocument动态地创建和添加页面。

代码仍然给出 page1content 是另一个父级的子级的错误。

0 投票
2 回答
6575 浏览

c# - 如何设置 Xps 文档的页面大小?

我正在尝试使用FixedDocument保存 XPS 文档。到目前为止,我未能更改页面大小。如何将其更改为自定义尺寸?

我的代码基于这个问题的第一个答案,更具体地说,我正在使用这个代码:

它将用户控件复制到 XPS 文档中并成功完成,但正如我所说,使用默认纸张大小。

我尝试使用该DocumentPaginator.PageSize属性来设置新的页面大小(在实例化之后FixedDocument),但是我分配给该属性的任何内容似乎都被忽略了;生成的 XPS 文档中的页面保留其默认纸张大小。

逐步执行时,我可以看到PageSize属性的值确实发生了变化,所以它并不像新值不被DocumentPaginator.

我找到了各种在线资源,但都没有解决我的问题:

  • 这个在 MS Social 上发帖的论坛坚持认为设置PageSize属性是有效的,但据我所知并没有。
  • 文档声称设置PageSize属性有效,并提供了一个与我尝试过的相同的示例。(除此之外,基于此文档页面,我什至无法说出要使用的数字的单位。)
  • 文档还指向DocumentPage.Size属性,但是该属性不能公开更改。在将页面添加到文档之前,我是否真的必须覆盖某些页面类才能获得不同的页面大小?
  • 这个论坛帖子描述了同样的问题,但答案对我来说似乎很荒谬。我DocumentPaginator只使用过一次该属性,因此没有“再次调用 (...).DocumentPaginator”可以保存一个实例。
  • 这个问题听起来很有希望,但实际上不是关于页面大小,而是关于给定页面上图像的比例。
  • 除了前面提到的属性(PageSize无论如何这里设置为默认大小),本教程使用. 但是,为快速测试分配一些正随机值会导致我的 XPS 文档明显损坏,并且 XPS 查看器在打开它时会显示错误消息。WidthHeightFixedPage
0 投票
0 回答
853 浏览

c# - 创建固定文档会导致内存泄漏

我在我的应用程序中创建 WPF 报告,我发现每次创建报告时,报告都会保留在内存中。我完全清除了文档内容,并且只打印了一个空的 UserControl。我将代码减少到最低限度,但它仍然在泄漏。你知道我做错了什么 - 或者我没有做什么吗?

分析表明问题在于 ContextLayoutManager 在 ContextLayoutManager.LayoutQueue.Request 中的 FixedPage 上保持引用

感谢您的任何建议。