PDFBox:使用非常大的PDF。

时间:2012-07-02 22:06:48

标签: java pdfbox

我正在使用一些非常大的PDF,一些超过7GB。 PDF包含多达20,000页和许多整页彩色图像。我想使用PDFBox来处理PDF,但由于我在尝试打开PDF时出现OutOfMemoryError的大小。

我正在使用版本pdfbox-app-1.6.0,在Windows 7上使用Intellij,java 6。

首先,我尝试编写一个简单的程序,只是在PDDocument中打开PDF并将每个页面复制到另一个PDDocument:http://ideone.com/arKhB

接下来,我尝试使用PDFBox CopyDoc示例。

这两个例子都没有内存。

我假设这是因为PDFBox试图将整个文档读入内存。有没有办法让它一次只打开1页?我知道处理速度会慢一些,但目前我无法处理任何事情。

1 个答案:

答案 0 :(得分:8)

在2.0。*版本中,打开PDF,如下所示:

'AudioTracks
    Set oAudioNodes = featureNode.SelectSingleNode("videos/video/AudioTracks")

    For i = 0 To oAudioNodes.ChildNodes.Length
          sAudio = oAudioNodes.ChildNodes.Item(i).nodeTypedValue & ";" & sAudio
    Next

    sAudio = Left(sAudio, Len(sAudio) - 1)
    ActiveSheet.Cells(intRow, colAudioTracks).Value = NullCheck(sAudio)
    sAudio = ""
    sRawData = ""

这会将缓冲内存使用设置为仅使用大小不受限制的临时文件(无主内存)。

更新17.4.2018:FAQ中描述了更多节省内存的技巧。尚未描述但有效,因为2.0.9在进行渲染时使用PDDocument doc = PDDocument.load(file, MemoryUsageSetting.setupTempFileOnly()); 进行子采样(跳过像素行/行)。这为拥有巨大图像文件的PDF文件节省了空间。