图像生成期间在pdfbox中的线程问题

时间:2013-01-25 22:13:01

标签: java multithreading pdfbox

我正在尝试使用pdfbox提取嵌入在pdf中的图像的图像元数据(和图像)。我有以下问题,

for each page i:
 for each image j in page i:
  extract metadata, output
  create the image file in separate thread

现在,我有以下用于创建图像文件的代码,该代码包含在实现generate_image()的{​​{1}}类中的FileWriting方法中。从Runnable调用此方法。代码如下:

run()

其中try { File F=new File(figurename); item.getImage().write2file( F ); } catch (Exception e) { e.printStackTrace(); } 返回item.getImage()个对象。如果我这样做而不创建一个单独的线程,它工作正常,但当我创建一个线程来执行此任务时,它显示以下错误:

PDXObjectImage

任何人都可以指出我哪里出错了吗?

1 个答案:

答案 0 :(得分:2)

我怀疑您的问题是您在多个线程中使用相同的pdfbox类。

来自PDFBox FAQ page

  

PDFBox线程安全吗?

     

没有!一次只能有一个线程访问单个文档。您可以拥有多个线程,每个线程都可以访问自己的PDDocument对象。

您应该考虑使用ThreadLocal并保留一个PDDocument或您正在使用的任何类别。类似的东西:

private ThreadLocal<PDDocument> localPdDocument = new ThreadLocal<PDDocument>() {
    @Override
    protected PDDocument initialValue() {
        return new PDDocument();
    }
};

...
PDDocument doc = localPdDocument.get();
...