繁体   English   中英

open_reader() 中的意外异常

[英]Unexpected Exception in open_reader()

我在 ubuntu 16.04 中使用 pdftk 库来合并几个 pdf。 一切正常,当我安装 SSL 证书时出现此错误:

Error: Unexpected Exception in open_reader()
java.lang.RuntimeException: java.lang.RuntimeException: error instantiating 
default socket factory: java.security.KeyManagementException: 
java.security.KeyStoreException: java.io.FileNotFoundException: 
/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre/lib/security/cacerts (No such file or 
directory)
at javax.net.ssl.SSLSocketFactory$ErrorSocketFactory.createSocket(libgcj.so.16)
at gnu.java.net.protocol.http.HTTPConnection.getSocket(libgcj.so.16)
at gnu.java.net.protocol.http.HTTPConnection.getOutputStream(libgcj.so.16)
at gnu.java.net.protocol.http.Request.dispatch(libgcj.so.16)
at gnu.java.net.protocol.http.HTTPURLConnection.connect(libgcj.so.16)
at gnu.java.net.protocol.http.HTTPURLConnection.getInputStream(libgcj.so.16)
at java.net.URL.openStream(libgcj.so.16)
at pdftk.com.lowagie.text.pdf.RandomAccessFileOrArray.<init>(pdftk)
at pdftk.com.lowagie.text.pdf.PRTokeniser.<init>(pdftk)
at pdftk.com.lowagie.text.pdf.PdfReader.<init>(pdftk)
at pdftk.com.lowagie.text.pdf.PdfReader.<init>(pdftk)
Caused by: java.lang.RuntimeException: error instantiating default socket 
factory: java.security.KeyManagementException: java.security.KeyStoreException: 
java.io.FileNotFoundException: /usr/lib/jvm/java-1.5.0-gcj-5- 
amd64/jre/lib/security/cacerts (No such file or directory)
at javax.net.ssl.SSLSocketFactory.getDefault(libgcj.so.16)
at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(libgcj.so.16)
at javax.net.ssl.HttpsURLConnection.getSSLSocketFactory(libgcj.so.16)

经过多次研究,我发现问题来自 https 链接。 当我使用带有https的 pdf 文件中的链接时,它不起作用例如:

sudo pdftk https://www.fifa.com/mm/document/fanfest/magazine/magazine09-06p.3en_3465.pdf output 1805.pdf

你能帮我解决这个错误吗?

我遇到了同样的问题,并尝试在已安装的 Java 版本之间切换,但没有效果。

进一步搜索时,我找到了这个网站: https : //wilransz.com/pdftk-on-ubuntu-18-04/

创建这样的符号链接

sudo ln -s /snap/pdftk/current/usr/bin/pdftk /usr/bin/pdftk

修复了问题!

问题是您的 GCJ Java 安装不完整或损坏。 应该出现在...的“cacerts”文件

/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre/lib/security/cacerts

... 不见了。 根据 Ubuntu 包搜索,在 Ubuntu 16.04 中,该文件应该是libgcj16包的一部分。 所以尝试使用apt安装该软件包。


真正的问题是 PDFTK 依赖于旧的 GCJ Java 工具链。 GCJ 几乎没有得到维护,最终被弃用并从 GCC 代码库中删除……从 GCC 7.1 开始。

GCJ 工具链在 RHEL 7 中从 RedHat 中删除(早在 2011 年!),最终在 Ubuntu 18.04 中从 Ubuntu 中删除。

不幸的是,PDFTK 的维护者没有为 Java 的 Oracle / OpenJDK 版本提供端口。 事实上,自 2014 年以来,PDFLabs 的上游发行版似乎没有发生任何变化……所以也许您应该寻找替代品。

(或者使用叉子:参见https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-bionic 。但是,仔细考虑可能出现的各种问题如果您依赖于“死”项目的非官方/不受支持的分支。)


也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM