pdf - 如何将多页 PDF 表格转换为电子表格格式?
问题描述
我有一个包含 300 多页的巨大 PDF 文件,上面分布着一个 10 多列的大表。我正在使用 Linux,并希望有一个简单的命令行命令,可以将此表转换为可导入电子表格的文本。
目前我正在使用pdftotext -layout
,并给出了相当不错的结果,除了每个页面都被独立考虑并且列宽和位置因页面而异(由于每页上的最大列内容宽度不同),所以我不能简单地导入生成的文本文件到电子表格应用程序并按固定列宽将其拆分为列。
我试图裁剪每一页上的每一列(它们在整个 PDF 文件中的位置是相同的),但结果是空行合并在一起,因此具有内容的行将相对于彼此移动。
如果可以选择使用STRICT LAYOUT(而不是按列内容宽度)pdftotext
转换文件,那将有所帮助。或者,如果我可以将 PDF 文件中的所有页面堆叠到一个页面,那也可以解决它。
解决此问题的选项有哪些?
解决方案
您误解了 PDF 文件内容的性质。PDf 中没有表格,没有元数据(通常)将内容描述为表格。您在页面上看到的文本可能未按阅读顺序排列。
例如,PDF 文件可能包含在页面顶部绘制的一行文本,然后在底部绘制一个文本,然后在中间有一个段落,然后跳回顶部作为标题。
此外,两个文本片段之间可能没有空格。文本在页面上的绝对位置绘制,因此您可以绘制(例如)单元格 A,然后将当前点移动 1 厘米,然后绘制单元格 B 等等。由于两个单元格之间没有“空格”字符,因此简单的文本提取自然会假设两行文本是连续的。
你想要的STRICT LAYOUT不是不可能的,但是你不能用一个简单的文本文件来做,因为原始布局不是由简单的文本字符组成的,有时两个字符之间的空间,或者两个文本片段是通过在绘制文本之前移动当前点来完成。
Ghostscript 的 txtwrite 设备在其最简单的模式下尝试通过用固定间距字体中的实际空格字符替换空格来复制布局。这“可能”对您来说已经足够了,但同样可能不会。这是因为它通过将页面上使用的最小距离定义为一个空格字符来运行。然后,文本之间的所有距离都将替换为许多空格字符,这些空格字符的数量与构成空格所需的数量一样多。这会(并且经常会)导致输出文件非常宽且包含大量空白。
从本质上讲,您似乎想要的东西实际上是不可能的,您不能采用像 PDF 这样的丰富格式并复制它,包括布局,仅包含文本字符。
推荐阅读
- vim - 如何在 vim 中写入当前选项卡的缓冲区?
- c++ - Direct3D 12 你好,世界!样本问题。窗口启动但没有图形
- javascript - 在 JS 中存储并返回带有 HTML 和标记模板文字的字符串
- liquid-haskell - LiquidHaskell:函子定律
- node.js - 如何将 { useUnifiedTopology: true } 传递给我独特的 Node.Js Mongoclient 构造函数
- python - 从具有现有表单的视图中更新 django 中的 db 字段,由于“完整性错误”而不会更新
- python - 从列表python中提取数据
- c# - C#如何从另一个方法传递数组
- django - 我无法在我的模板中呈现我的 url 它给了我错误呈现
- css - CSS 网格:网格间隙(排水沟)和网格线之间的关系