【问题标题】:tabula python: Getting subprocess.CalledProcessError: Command '['java', '-Dfile.encoding=UTF8', ERRORtabula python:获取 subprocess.CalledProcessError:命令'['java','-Dfile.encoding=UTF8',错误
【发布时间】:2020-01-14 13:30:05
【问题描述】:

我收到 subprocess.CalledProcessError: Command '['java', '-Dfile.encoding=UTF8', error while running tabula python liberary.

命令:

df = tabula.read_pdf(filepath, pages = 5 ,guess=True, multiple_tables= True, stream=True, java_options="-Dfile.encoding=UTF8")

错误信息:

  File "C:\Users\himsoni\AppData\Local\Programs\Python\Python37\lib\site-packages\tabula\io.py", line 85, in _run
    check=True,
  File "C:\Users\himsoni\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 487, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['java', '-Dfile.encoding=UTF8', '-jar', 'C:\\Users\\himsoni\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tabula\\tabula-1.0.3-jar-with-dependencies.jar', '--pages', '1', '--stream', '--guess', '--format', 'JSON', 'C:\\Users\\himsoni\\Desktop\\PDF_extraction\\black_white_format\\black_white_format\\PDF_Split_JPEGs\\blackwhite_Test.pdf']' returned non-zero exit status 1.

导入表格; tabula.environment_info()

Python version:
3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
Java version:
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) Client VM (build 25.231-b11, mixed mode, sharing)
tabula-py version: 2.0.1
platform: Windows-10-10.0.17763-SP0
uname:
uname_result(system='Windows', node='himsoni', release='10', version='10.0.17763', machine='AMD64', processor='Intel64 Family 6 Model 142 Stepping 10, GenuineIntel')
linux_distribution: ('', '', '')
mac_ver: ('', ('', '', ''), '')

Python 和 Java 版本

Python 3.7.4
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) Client VM (build 25.231-b11, mixed mode)
Does java -h command work well?; Yes
Ensure your java command is included in PATH Yes
Write your OS and it's version: ? Windows 10

代码:

import tabula
filepath = "C:\\Users\\himsoni\\Desktop\PDF_extraction\\black_white_format\\black_white_format\\PDF_Split_JPEGs\\blackwhite.pdf"
df = tabula.read_pdf(filepath, pages = 5 ,guess=True, multiple_tables= True, stream=True, java_options="-Dfile.encoding=UTF8")
print(df)

预期输出:获取特定页面的表格。

【问题讨论】:

  • 运气好吗?我遇到了同样的错误。
  • 没有运气肖恩。这是 PDF 格式错误,而不是代码错误。我与处理 Tabula 库的开发人员团队进行了协调,他们告诉我 PDF 格式略有损坏,因此 tabula 无法处理 PDF。
  • 我在 Raspberry Pi 设置中遇到了同样的错误。但是,当我通过 Mac 终端处理相同的文件时,我没有收到错误消息。两种环境都运行 tabula 2.2.0 版。恕我直言,我不相信这是用户 1958031 所述的 PDF 格式错误,因为相同版本的 tabula 在一个环境中对我有用,而在另一个环境中处理相同文件时失败。两种情况下的 PDF 格式相同。

标签: python tabula


【解决方案1】:

我的 PDF 包含这个字体描述符对象:

17 0 obj
<</Ascent 891 /CapHeight 662 /Descent -216 /Flags 32 /FontBBox
  [-497 -306 1120 1023] /FontFile2 18 0 R /FontName
  /AFPTimesNewRoman-Italic /ItalicAngle -17.-21823 /StemV 80 /Type
  /FontDescriptor /XHeight 441>>
endobj

根据 PDF 规范,ItalicAngle 必须是数字。 -17.-21823 不是有效的数字表示。因此,无法在后台进行修复的 PDF 解析器很可能无法读取您的文件。 PDFBox 确实失败了。

PS:答案由 tabula pdf/tabula-java 开发团队提供。

【讨论】:

  • 您可以尝试使用 NOTEPAD++ 更正此问题。以偏移量不变的方式进行操作,例如将-17.-21823 替换为-17.218230。但是,您的 PDF 可能存在更多问题。
  • 感谢您的建议,如果我们遇到同样的情况,我们会使用您的建议....我们对此类 PDF 进行了手动翻译
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2011-08-27
相关资源
最近更新 更多