为什么 PDFTK 说它找不到就在那里的文件?

Ama*_*nda 24 java pdftk dropbox

我正在尝试将一堆 PDF 编译成一个文档。ls显示文件位于我所在的目录中并且它们是可读的 ( -rw-r--r--)。但是当我尝试运行时pdftk 2017.pdf cat output test.pdf出现错误:

Error: Unexpected Exception in open_reader()
java.io.FileNotFoundException: 2017.pdf (Permission denied)
   at gnu.java.nio.channels.FileChannelImpl.open(libgcj.so.16)
   at gnu.java.nio.channels.FileChannelImpl.<init>(libgcj.so.16)
   at gnu.java.nio.channels.FileChannelImpl.create(libgcj.so.16)
   at java.io.RandomAccessFile.<init>(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)
Error: Failed to open PDF file: 
   2017.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.
Run Code Online (Sandbox Code Playgroud)

如果我向该操作添加更多文件,我只会收到每个文件的错误。

我可以从命令行重命名 PDF,但mv 2017.pdf foo.pdf出现相同的错误。Error: Unexpected Exception in open_reader() java.io.FileNotFoundException: foo.pdf (Permission denied)

如果我尝试调用一个不存在的文件,例如。 pdftk 123.pdf cat output test.pdf我得到一个不同的错误:

Error: Unable to find file.
Error: Failed to open PDF file: 
   123.pdf
Errors encountered.  No output created.
Done.  Input errors, so no output created.
Run Code Online (Sandbox Code Playgroud)

甚至tail 2017.pdf显示了 2017.pdf 的最后几行:

<<
/Info 63 0 R
/ID [<cc59759cedaf07420bbe3250ba5d8971><f259ad128310d106c7aa80b673c4bd70>]
/Root 62 0 R
/Size 64
>>
startxref
42883
%%EOF
Run Code Online (Sandbox Code Playgroud)

如果我可以看到文件并用 阅读它tail,为什么pdftk不能阅读它?

Axe*_*ier 24

TL; 博士

Snaps 访问权限管理似乎是问题的根源。

要解决此问题,您可以:

  • 从 $HOME 文件夹中完成您的工作。请注意,符号链接将不起作用。
  • 从您的发行版以外的其他来源安装 pdftk。例如,ppa:malteworld/ppa有 3.0.0 版的pdftk-java.

原回复

我有相同的问题。我是从 USB 驱动器上的文件夹中执行此操作的。事实上,从我的主目录的子文件夹中执行此操作是可行的。

当我试图从 /tmp 下的子文件夹执行此操作时,这让我感到困惑,但它也不起作用(出现了不同的错误,不那么冗长,“无法打开 PDF 文件”)。如果我从 /mnt 下安装的辅助磁盘上的子文件夹尝试,也是如此。

我怀疑这可能与 snaps 的限制有关(我使用的是最新的 Ubuntu 18.04.3)。但是我处理快照的经验很少,所以我无法进一步探索。

如果是这样,那将是非常糟糕的,因为这会阻止 Ubuntu 用户从他们的主文件夹以外的任何其他地方使用 pdftk。例如。USB 驱动器、额外磁盘、共享网络驱动器。

(对不起,我不能作为评论回复,没有足够的声誉......)

  • 我相信这个错误也应该在 pdftk 和 snap 之间,我在这里也有同样的问题,我在 /tmp 上尝试过,使用链接,其他 homedir 和其他分区中的文件,并且只适用于 $HOME 和 subdirs。所以我解决了我的问题,通过 ppa: malteworld / ppa repository 安装了 pdftk 它们工作正常。 (3认同)
  • 我怀疑是因为在这个 Ubuntu 版本上 pdftk 是一个 snap,而 snap 的主要兴趣点是他们通过沙盒和最小特权范式隔离来关注额外的应用程序安全性。它特别使用 AppArmor、命名空间等来实现这一点。像这里遇到的奇怪的权限错误可能是这些安全子系统之一过于严格的规则的征兆。 (2认同)
  • 不确定它是 pdftk 还是 Ubuntu 的 snap,但问题正是需要将文件复制到 home 中才能对其进行 pdftk 工作。这真是令人讨厌 (2认同)
  • 谢谢,这也帮助了我。我再也不会使用 snap 了。 (2认同)

小智 6

Snap 似乎限制了对文件系统的访问。

当我将文件移动到 $HOME(不是 /tmp 或其他地方)时为我工作