【问题标题】:When is the content flushed to a PDF File by itextsharp?itextsharp 何时将内容刷新到 PDF 文件?
【发布时间】:2014-03-18 05:51:34
【问题描述】:

我假设Document.Add() 立即将内容刷新到 PDF 文件(文件流),但看起来情况并非如此。

【问题讨论】:

  • 如果您只是在文档中添加一个段落,那么您将它添加到某个页面。只有当页面完成并且文档开始下一页时,才有理由希望该页面(至少部分)写入磁盘。但是在关闭文档之前你不能确定。
  • 我很好奇您为什么想知道这一点以及您将如何处理这些信息。这不是秘密,我只是好奇。
  • @Chris,我正在将 100K 多条记录写入 pdf,这需要时间,所以我认为只有在一批 1K 中将内容刷新到 pdf 文件才能优化 pdf 文件的创建时间。
  • 你说“100K plus records”,这是否意味着你正在写一个表?如果是这样,请参阅此帖子:stackoverflow.com/a/15483598/231316
  • 显然,只要不将段落添加到文档中,您就不应该期望将段落的任何内容写入输出流。这样的段落不“知道”输出流的存在。但是你已经知道了,因为你提到了Add() 方法。

标签: c#-4.0 pdf-generation itextsharp itext


【解决方案1】:

PDF 是一种页面描述语言。每个页面都是一组自治的对象。内容存储在一个或多个流中。 PDF 中没有段落或表格等内容。它只是在页面上绘制的一系列线条、形状和字形。

当您使用Add() 方法向文档添加内容时,此内容将转换为附加到页面内容流的PDF 语法。一旦页面满了,这个内容流和对应的页面字典就会被写入输出流并刷新。

不早了!

一些对象,例如字体、交叉引用表、Form XObjects……都保存在内存中,因为它们可以在文档创建过程中发生变化。

在某些情况下,您可以提前释放这些对象。例如:有一个“发布模板”方法可以立即将 Form XObject 写入输出流。图像 XObject 总是立即写入。

您的问题并不是真正的问题。这是一个错误的假设。如果您有真正的问题,请澄清。

【讨论】:

  • 我很想知道 pdf 对象的内容何时刷新到文件中,是否可以在 itextsharp 中控制它(比如只在 n 页后将内容刷新到文件,而不是在之后刷新内容每一页都满了。这不是有道理吗?我是pdf语言的新手。
  • 一旦页面内容流完成,等待刷新页面内容流是没有意义的,因此不可能将其“搁置”。然而,有些对象必须保存在内存中。例如:当我们嵌入字体的一个子集时,我们将该字体保存在内存中,因为“未来”页面可能需要向该子集添加一个在前一页上没有使用过的字形。您的问题有道理,但措辞很尴尬(因为它提出了未经证实的指控)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多