使用C#代码生成带有图像的PDF文件时,文件大小限制是多少?

3

我正在使用Web应用程序使用C#代码生成PDF文件。 PDF文件包含.tiff图像。如果包含图像的文件夹大小超过1GB,则浏览器会自动关闭。使用C#代码生成PDF文件的图像大小限制是多少?


恭喜,您的问题被选为StackOverflow上最佳iText问题之一! - Bruno Lowagie
1个回答

1
你的问题的答案取决于三个参数:
  1. PDF版本: PDF 1.5之前与PDF 1.5及更高版本,
  2. PDF样式: 普通文本交叉引用表与交叉引用流, 以及
  3. iText(Sharp)版本: 5.3之前与5.3及更高版本).

让我们从PDF版本和交叉引用表开始。如果你不知道的话: 交叉引用表定义了PDF中每个对象的字节偏移量。

在PDF 1.5之前的PDF版本中,交叉引用表以纯文本形式添加,每个字节偏移量使用10个数字进行定义。因此文件的大小将被限制为10亿字节 (大约10 GB)。

一个版本早于PDF 1.5的PDF的最大大小约为10GB。

从PDF 1.5开始,你可以选择是否要创建纯文本交叉引用表,或者是否要使用交叉引用流。如果使用交叉引用流,则“仅限10位数”的限制消失了。

使用压缩交叉引用流的PDF版本1.5或更高版本的最大大小仅取决于处理PDF的软件的限制。

如果您使用iText(Sharp),则需要确保创建具有压缩交叉引用流的文件,如果需要的文件大小超过10 GB。

iText的版本也很重要:

  • 在iText 5.3之前的所有版本仅支持大约2 GB的文件,因为在这些版本中,所有字节偏移量都存储为int值。
  • 从5.3开始,iText支持长达1 TB的文件,因为在这些版本中,所有字节偏移量都存储为long值。

使用iText 5.3及更高版本创建的PDF的最大大小为1 TB。使用iText 5.3之前的版本创建的PDF的最大大小为2 GB。

但是:您还需要考虑到并非所有查看器都能呈现如此大的文件。尽管该文件可能完全符合ISO-32000-1,但您可能会遇到内存限制。

你正在向随机浏览器上的随机PDF查看器插件发送1GB的数据。如果是旧设备,它甚至没有1GB的内存。当终端用户连接缓慢时,他将永远等待完整的文件。你无法预测浏览器和PDF查看器的响应方式。我猜测浏览器会因为内存不足而关闭。这不是PDF或iText(Sharp)固有的限制所导致的问题,而是你设计中固有的限制。你不应该将GB级别的数据发送到浏览器,而应该将其写入云共享驱动器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接