Command Palette

Search for a command to run...

换行符在哪里决定你得到什么

换行符在哪里决定你得到什么

T
Toolz Team
|Oct 23, 2026|17 最小读数
Google 上的首选 Toolz.dev

PDF 工具集合的一部分

PDF to Text

Pull the text out of a PDF and save it as a .txt file, in your browser. Keep the page layout or reflow it into paragraphs, with or without page markers.

用PDF to Text

PDF 不包含文本行。 它在坐标处包含字形,您可以看到的线条是您的眼睛汇编的东西。 任何提取器也必须组装它们,从每次运行的三个数字和几个阈值,以及提取的文本中的几乎所有奇怪的东西都可以追溯到这些阈值之一,从而使一个合理的调用碰巧是错误的。 我在写这篇文章时修理的一个姓氏变成了一个跨越一行的姓氏,“Sei”,然后“Mensah”,变成“Sei-mensah”:按照预期的方式,在它后面有一个永远不属于那里的空间。

TL;博士: 提取是线路重组,重要的设置是不可见的。 1.1.45 的字体高度是一行;垂直间隙大于页面的 1.45 倍的间隙开始一段段落;在字体高度的四分之一下方的水平间隙不是字体空间。 取 回流 粘贴到编辑器和 保存 对于表和代码。 平均低于 12 个字符的 PDF 页面是扫描,需要 OCR 代替,而不是将空文件递给您。 PDF 转文本 在浏览器中运行。

为什么PDF完全需要“提取”?

因为其中的文字是作为绘图说明书写的,读回来的内容与写它们的背道并不是相反的。

内容流显示“将此字体设置为此大小,移动到这里,显示这些字形”。 规范 描述绘画模型,文本操作符位于绘制线条和填充形状的旁边。 没有对象的意思是行、段落或列。 奚 pdf。js Handback 是一个平面的位置列表,每个都带有一个字符串、一个 X、一个 Y、一个宽度和一个字体高度,按页面绘制的顺序。 在一个命令不是读取顺序的测试页面上,一个运行可以是一个字符。

其他一切都是重建。 三个阈值几乎完成了所有这些,它们值得了解,因为它们解释了失败。

阈值 价值 它决定了什么
线路公差 0.5 x 字体高度 两轮是否坐落在同一条线上
款式 1.45 x 页的中值间隙 垂直间隙是否启动新段落
空间比 0.25 x 字体高度 水平间隙是否是单词空间

每个都是文本大小的一部分,而不是固定数量的点,因此同一页面上的脚注和标题获得不同的公差,而在 9 点中设置的文档的行为就像 14 中的一组。

为什么需要单词空间阈值?

因为没有它,每个字都会分开。

PDF 解析器经常在几个运行中分割单个单词,它们之间没有间隙,用于字距或字体更改字体。 无条件地在空间上加入运行 filename 进入 f i l e n a m e。 什么都没有连接在一起。

所以规则是一个宽度大于四分之一的字体高度算作一个空格,这大致是大多数字体中真实单词空间的宽度。 在此之下,运行是一个词的一部分。

这是您永远不会注意到工作的阈值,并且会立即注意到失败,通常在标题集上的字母间距宽,每个字母都足够远,看起来像一个单词。

回流和保存有什么区别?

回流给你散文。 保存给你页面。

下面是三行的一段,然后是另一段,贯穿两种模式:

--- preserve ---
The committee reviewed the figures and agreed that the
revised protocol should be circulated before the end of
the month.
A second paragraph begins here after a larger gap.

--- reflow ---
The committee reviewed the figures and agreed that the revised protocol should be circulated before the end of the month.

A second paragraph begins here after a larger gap.

Reflow 将三行线合成一句,并在段落之间加上一条空白行。 保留页面所布置的每一个换行符,包括句子中间的一个。

使用回流 使用保存
粘贴到文档或编辑器中 一个表,列是内容
引用一段话 代码列表,其中换行符是语法
将文本提供给脚本或模型 地址块或表单
无论如何,你会重新格式化的任何事情 任何布局具有意义的东西

reflow 是默认的,大多数时候是正确的。 人们犯的错误是在桌子上使用它,将行连接成散文会破坏该表的唯一结构。

它如何决定段落的结尾?

通过将每个垂直间隙与页面自己的典型间隙进行比较。

测量连续行之间的每个间隙,取中位数,任何间隙超过中值开始新段落的 1.45 倍。 因此,单行距页面不会以每行一个段落的形式返回,而双倍行距的页面不会作为单个块返回。

使用中位数而不是固定数字是使这项工作跨不同的前导文档工作的原因。 它也是失败的地方:一个很少有线路的页面没有可靠的中位数。 标题页、简短的笔记或封面通常会作为一个连续的段落回来,这是同样的弱点 字转换 有,出于同样的原因。

修复是手动和快速的。 段落的分段对读者来说是显而易见的,他们没有达到阈值。

跨线折断的单词怎么了?

他们被重新加入,而连字符掉线的规则往往是正确的。

当一行以连字符结束时,问题是排版者是否将其放在那里以破坏单词,还是它是否属于单词。 此处使用的规则是:如果下一行开始小写,则连字符是排字器,并以大写或数字开头,则连字符是文本的一部分并保留。

跨线断 结果 对吗?
self- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 contained selfcontained 是的
re- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 encode reencode 是的
client- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 Side client-Side 是的
Osei- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 Mensah Osei-Mensah 是的
COVID- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 19 COVID-19 是的
2026- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 03 2026-03 是的
well- + X + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 100 + 1 known wellknown 不

最后一行不能通过任何规则修复。 “众所周知”的连字符断裂,“众所周知”的“众所周知”产生了相同的线对,将它们分开需要一本字典而不是阈值。 同样适用于上面的“重新”和“编码”,这恰好是正确的,因为“重新编码”不是任何人写的单词。

中间的行是在编写本指南时更改的行。 用于添加空间的非中断情况与保持连字符一起,产生 Osei- Mensah 並 2026- 03。 连字符都属于单词,因此它永远不会正确,断言旧输出的测试已与行为一起被纠正。

它如何知道 PDF 是扫描?

通过计算每页字符,阈值足够低,只有真正的扫描会跳闸。

扫描文档是充满图像的 PDF。 没有文本层,因此提取不返回任何内容,有用的响应是说,而不是交出一个空文件。

  0 chars over 3 pages   treated as a scan
 30 chars over 3 pages   treated as a scan
 36 chars over 3 pages   has a text layer
 11 chars over 1 page    treated as a scan
 12 chars over 1 page    has a text layer

这行是每页十二个字符。 这不是故意的:扫描的页面通常带有来自扫描仪的小附带文本、软件标记的页码或水印。 零阈值将调用这些文档可提取并返回三个页码。

如果您的 PDF 是扫描,下一步是 OCR,并且 对什么打破 OCR 的衡量描述 有测量的版本:倾斜超过三个度数的成本远远超过低分辨率。

列呢?

它们交织,这是在您信任任何提取之前了解的极限。

线条首先按基线分组,因此位于相同垂直位置的两列文本被读取而不是向下读取。 在两列报告页面的测试中,结果是左列的每一行紧随其后的是旁边的行:

Revenue rose in the third Headcount grew by four, quarter on the back of
two all in support. The hiring large renewals signed in plan for the fourth

每一个字都存在。 顺序是无用的,输出读作流畅的废话而不是错误。

学术论文和报纸经常在这一点上幸存下来,因为专栏之间的阴沟很宽且很规律,可以找到分页的步骤。 带有侧边栏、拉引号或两列表的报告经常不会。

列式文档的可靠方法是检查每页的第一段。 如果句子是拼接的,一次通过裁剪提取一列,或者接受你得到的是一个单词包而不是散文。

你能从pdf中得到一张桌子吗?

价值观,是的。 表,不,原因是 PDF 几乎肯定也不包含表。

PDF 中的表格通常是以坐标绘制的文本,并在其周围绘制一些线条。 这些行是图形操作,文件中没有任何连接到它们所包含的文本的文件,单元格不是单元格;它们是碰巧排列的运行。 因此,提取器会看到一行文本并读取它们:

Region Q2 Q3 EMEA 412 455 AMER 388 401 APAC 120 166

每个人物都幸存下来。 你无法从那条线上看出 412 属于哪个季度而不计算位置和知道原件的形状。

保留模式有一点帮助,因为它将行结构保留为换行符,这至少会告诉您每一行的结尾。 它仍然没有给你列边界。

有两件事确实有效。 一个 标记 PDF,从 Word 或 InDesign 中仔细导出,具有可访问性结构,带有真实的表标记和转换;这些是少数,您通常可以分辨,因为文档是由关心的人制作的。 对于一个重要的未标记表,手动复制到电子表格中比与任何工具战斗更快,这是一个不令人满意的答案,在每次改进它的尝试中都幸存下来。

页面标记是做什么的?

他们保留页码,这对于您引用或引用的任何内容都比听起来更重要。

标记为开启,每页都标有标签,空页仍被计算:

--- Page 1 ---

First page text.

--- Page 2 ---

--- Page 3 ---

Third page text.

第 2 页没有可提取的文本,仍然出现。 这是故意的:两个文本页面之间的扫描表会消失,每个以后的页码都会错误地显示一个。

关闭标记后,空页面不留下任何痕迹,两页文本就简单地连接了。 当您要将文本粘贴到某处时,这是正确的选择,分页是 PDF 的人工制品,而不是文档的一部分。

提取的文本与原始文本相同吗?

人物是。 其他一切都消失了,在依赖输出之前,列表值得一读。

粗体、斜体、字体、大小、颜色、表格、表格、图像、页眉和页脚与正文不同,脚注与它们注释的句子不同,链接作为链接,以及任何复杂布局的阅读顺序。 你得到的是字符和段落中断。

对于大多数用途,这是完全正确的。 搜索、引用、计数、输入脚本、粘贴到编辑器中:所有这些都想要单词,而没有其他内容。

其中咬人的是一个文件的意义部分在于其格式。 定义的术语是粗体的合约,一种代码样本以其字体区分的规范,一个脚注改变了句子所要求的内容的报告。 提取的文本会使所有内容变平,输出中没有任何内容这么说。

你应该提取文本还是转换为word?

文本 如果机器会读它,如果一个人会编辑它,word。

两者都运行相同的重新组装,因此单词的质量是相同的。 区别只是最后写的: .txt 文件,或XML 的压缩中的相同段落。

你想 用
grep、搜索或提供脚本 PDF 转文本
计算单词或分析内容 PDF 转文本
编辑散文并发送 PDF 到 Word
保持布局准确 两者都没有;获取原始文件

最后一行是人们想要的,没有提取给你。 单词转换指南 详细介绍了为什么,并以一个作为单一行的值返回的表。

它可以处理多大的 PDF?

大,限制是选项卡而不是格式。

整个文件被读入页面内存并解析,提取的文本与它并存。 几百页的普通文本是不起眼的;高分辨率的千页扫描是一个不同的命题,因为即使它们都没有产生文本,这些图像也会随之而来。

如果一个文档足够大,可以担心,信号是解析而不是提取。 从已经解析的页面中提取文本很便宜;将文件放入解析器是需要时间和内存的。

为什么会在浏览器中运行?

因为解析不需要服务器,而且 PDFS 人员提取的很少公开。

文件从您的磁盘读取到选项卡中,并使用为 Web 编译的 pdf.js 进行解析,重新组合成文本并交回。 没有请求携带文件,没有存储任何内容,也没有任何地方可以保留您未阅读的条款。

有问题的文件是合同、声明、医疗信函、法院文件、禁运文件、内部报告。 传统的替代方案将整个文件上传到服务中,以换取解析和坐标上的一些算术的操作。

成本是非常大的文件上的标签内存,扫描没有OCR。 在您开始之前,而不是之后发现,两者都是可见的。

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!