【问题标题】:JAVA pdfbox & GROOVY - show Bookmark when PDF is opened, setPageMode not workingJAVA pdfbox & GROOVY - 打开 PDF 时显示书签,setPageMode 不起作用
【发布时间】:2020-07-18 03:31:15
【问题描述】:

我正在尝试合并所有 PDF 文件并创建书签,它运行良好。 最后一步是设置打开 PDF 时自动显示书签的功能。

我已经在pdfbox-2.0.20中测试了以下代码。

下面的部分代码...

totalPages = totalPages + pdfDocPages
            println it["TLF_NUM"] + ": " + it["TLF_TITLE"]
            def page = pages.get( totalPages - pdfDocPages);
            def dest = new PDPageFitWidthDestination()
            dest.setPage(page)

            def bookmark = new PDOutlineItem()
            bookmark.setDestination(dest)
            bookmark.setTitle( it["TLF_NUM"] + ": " + it["TLF_TITLE"] )
            pagesOutline.appendChild( bookmark )
                        }
                    }
            }

    pagesOutline.openNode()

    outline.openNode()

    pdfDocument.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES)

    pdfDocument.save(pdfoutfullpath)
    pdfDocument.close()
    }

我得到的错误在下面列出。

org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No 
signature of method: org.apache.pdfbox.pdmodel.PDDocumentCatalog.setPageMode() is applicable for 
argument types: (org.apache.pdfbox.pdmodel.PageMode) values: [USE_OUTLINES]
Possible solutions: 
setPageMode(java.lang.String), getPageMode()
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:95)
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
     at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:706)
     at MergePDFBookmarks.invokeMethod(Script1.groovy)
     at org.codehaus.groovy.runtime.InvokerHelper$2.run(InvokerHelper.java:415)
Caused by: groovy.lang.MissingMethodException: No signature of method: 
org.apache.pdfbox.pdmodel.PDDocumentCatalog.setPageMode() is applicable for argument types: 
(org.apache.pdfbox.pdmodel.PageMode) values: [USE_OUTLINES]
Possible solutions: 
setPageMode(java.lang.String), getPageMode()

【问题讨论】:

  • 我怀疑你的类路径中有一个 pdfbox 1.8 .jar 文件。因为 String 参数在 1.8 中而不是在 2.0 中。在开发和运行时清理旧的东西。
  • @TilmanHausherr,谢谢!是啊,你说得对。但我必须使用 1.8,因为有些模块只适用于 1.8,而不适用于 2.0。那么通过使用1.8,我应该如何修改上面的代码才能让它工作呢?

标签: java groovy pdfbox bookmarks


【解决方案1】:

根据 cmets,事实证明您使用的是 1.8 而不是 2.0。从您不使用的版本中删除 .jar 文件。不能同时使用。

在 1.8 中,使用

pdfDocument.getDocumentCatalog().setPageMode(PDDocumentCatalog.PAGE_MODE_USE_OUTLINES)

pdfDocument.getDocumentCatalog().setPageMode("UseOutlines")

【讨论】:

  • 感谢您提供解决方案,对于第一种方法,它显示错误 'org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 81: Appparent variable 'PDDocumentCatalog' was found在静态范围内,但不引用局部变量、静态字段或类。对于第二种方法,它没有任何错误消息,但在打开 PDF 时不会自动显示书签。
  • 您是否从开发环境和运行时环境中删除了 2.0 jar?真的只剩下一个版本了吗?重新编写第一个代码 - 我不知道它是否是正确的语法。也许需要 PDDocumentCatalog 的整个路径,即 org.apache.pdfbox.pdmodel.PDDocumentCatalog ? Re 2nd code,请分享结果PDF。
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
相关资源
最近更新 更多