iText PDF writer有没有办法动态检查PDF大小?

时间:2012-06-27 19:16:00

标签: java pdf pdf-generation itext

我认识到这里有一个类似的问题,来自一个想要将单个文件分成多个文件的人。遗憾的是,由于创建新文件会产生一定的开销,因此该解决方案对我无效。

背景(无需阅读):

我要做的是生成任意大小的PDF文件以播种数据库(即调用所需文件大小的方法,以千字节或兆字节为单位,应该生成所需大小的文件)。 / p>

目前,我确保输入数据是不可压缩的,方法是将其随机放入文件中,并将其放入1KB块(段落形式)中。在绘制输出字节数作为所需字节数的函数之后,我已经改变算法以考虑这种(令人愉快的和预期的)线性关系。

然而,由于输入数据的随机性,这种方法存在一定的不确定性,其绝对值随着所需的大小而增加(因此,尽管它是百分之一的百分之一,在20 MB的文件中,百分之百的百分比在绝对意义上变得非常重要。)

最理想的情况是,我能够生成任意大小的文件到千字节内,但为了做到这一点,我需要知道任何给定操作后的文件大小,并且为了知道这一点,我需要知道PDFWriter何时写入其缓冲区。或者至少有多大的缓冲区(即,如果缓冲区小于1千字节,当它写入时无关紧要,因为我只关心在该边界内是否准确)。

问题:

有没有办法在没有实际关闭文档的情况下使用文本检查实际要写入PDF的磁盘的数据字节数?

或者“关闭文档”只是意味着它刷新缓冲区并关闭流(即它关闭时不需要向文件写入任何额外的非用户输入数据量)?

1 个答案:

答案 0 :(得分:2)

构建 PdfWriter 时,必须指定 OutputStream ,这不一定是FileOutputStream。所以,如果你以这种方式构建它

      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      PdfWriter writer = PdfWriter.getInstance(document, baos);
       . . .          

您可以随时检查缓冲区大小:

 System.out.println("Current size: " + baos.size());

希望这会对你有所帮助。