PDFBOX 1.8.9叠加两个PDF文档:当前不支持带有COSArray的布局页面

时间:2015-07-02 07:25:46

标签: java pdf overlay pdfbox

我想使用Apache PDFBOX(1.8.9)库在现有PDF文档上打印白色/不可见文本,因此我创建了一个新文档,在Color.WHITE中添加文本并使用" overlay&# 34;将两个文档合并在一起的方法。 通过这样做我遇到了以下问题:

java.lang.UnsupportedOperationException: Layout pages with COSArray currently not supported.
at org.apache.pdfbox.Overlay.collectLayoutPages(Overlay.java:269)
at org.apache.pdfbox.Overlay.overlay(Overlay.java:224)
at com.db.jocr.Main.overlay(Main.java:194)
at com.db.jocr.Main.main(Main.java:91)

代码看起来像这样:

realDoc = PDDocument.load(pathInputDoc);
String pathWatermarkDoc = createWhiteOnWhiteDoc(text, pageCount, color);
watermarkDoc = PDDocument.load(pathWatermarkDoc);
Overlay overlay = new Overlay();
overlay.overlay(realDoc,watermarkDoc);

显然"导致"错误消息也没有给我一个如何解决这个问题的提示:

        COSBase contents = page.getCOSDictionary().getDictionaryObject( COSName.CONTENTS );
        if( contents instanceof COSStream )
        {
            ...
        }
        else if( contents instanceof COSArray )
        {
            throw new UnsupportedOperationException("Layout pages with COSArray currently not supported.");
            // layoutPages.add(new LayoutPage(contents, res));
        }

有人可以向我解释一下COSStream和COSArray之间的区别是什么以及为什么不支持COSArray页面?

感谢任何暗示我指向正确方向的提示,

谢谢,丹尼尔

P.S。:我正在研究的项目是:https://github.com/dbrenk/JOCR

编辑:好吧我有错误: OverlayPDF类似乎仍然在PDFBOX中

1 个答案:

答案 0 :(得分:0)

似乎我找到了一个有效的解决方法: 而不是使用Overlay.class使用OverlayPDF.class,它为原始PDF添加了一些布局,因此您也可以覆盖“基于tif”的PDF文件。 OverlayPDF.class的接口看起来很奇怪(没有方法,只有main())但是它适用于我所有的测试PDF文件,这里是代码:

// ... app creation and other middlewares

app.use(function(req, res, next) {
  var requestedSubdomain = req.subdomains.join('.');

  // Do something with it, e.g.:
  return database.getResourceWithName(requestedSubdomain, function(err, result) {
    if (err)
      return next(err);

    req.resource = result;
    // Now all subsequent middleware will have access to the resource via `req.resource`
    return next();
  });
});

// ... other middlewares and route definitions, then `app.listen()`

我仍然不确定OverlayPDF.class中发生了什么 - 所以如果有人能解释 - 会很棒。