为什么从此 PDF 复制文本会产生 N-1 剖腹产班次?

问题描述 投票:0回答:1

这是我在这里发表的第一篇文章,但我绝对感到困惑,我需要知道为什么会发生:

我正在尝试使用 pypdf,希望将其用于更大的文本分析项目,并且我选择了桌面上的一些 PDF 来代替任何相关的 PDF。

对于其中的大多数,我能够提取预期的文本。但后来我想起了一个特定的 PDF,我在复制和粘贴(谷歌搜索作业答案)时遇到了问题,所以我决定从中提取:

from pypdf import PdfReader

reader = PdfReader("HW-W6.pdf")
page = reader.pages[0]
print(page.extract_text())

打印出来的:

HWWe16mkWrmoe5..Ptoonrdsgdl×mlVsqhw,gVrsgdenql,8,0,1.vgdqd,0hrVmnmrhmftiVqlVsqhwnechldmrhnmm×mVmc,1hrVmVqahsqVqxlVsqhwnechldmrhnmlm(×m-LqnudsgVs},}1≤},00}1.5.1Fds,adVml×mlVsqhw-TrdsgdrsdoradinvsnrgnvsgVsVudbsnqu∈irVshrdr,u8+heVmcnmixhe,,u8+-SghrvhiirgnvsgVsAnbb,(8Anbb,,(-V(PgnvsgVshe,u8+)sgdm,,u8+:a(Ptoonrd,,u8+-PgnvsgVs,u8+-5.2PgnvsgdUVmcdqlnmcdlVsqhwhmfi..-1(hrmnmrhmftiVqVrinmfVrsgdonhmsr{uT{Vqdchr,shmbs-5.3;hmcVidVrsrnitshnmenqsgdeniinvhmfoqnaidlr4V(,805010006.N80105a(,8022030061.N83235.4;hmcsgddptVshnmx8+)0unesgdidVrs,rptVqdrihmdsgVsadrssrsgdcVsVonhmsr1.0()3.1()6.2(Vmc7.2(-

起初,它看起来完全是胡言乱语,我认为这一定是某种混淆(尽管我对此并不完全熟悉)。但是,请关注字符串,

Ptoonrd
。将其与预期文本“假设”进行比较。

我注意到这太“常规”了,不能完全混淆;事实上,它看起来就像一个字母转换,so I checked, and by trial and error, got an N-1 Caesarean Shift.

这显然不是一个完美的转变,通过其他复制粘贴可以更清楚地看到这一点。

For example.

我唯一的线索是该文档可能是使用 LaTeX 编译的,但我不知道如何进一步调查。即使在浏览器上打开文档也会导致其省略某些字符。

有人知道为什么会出现这种情况吗?

有问题的 PDF。

pdf copy-paste pypdf
1个回答
0
投票

这并不是像你所说的那样是故意的。无论写入的文本是什么,都必须决定如何在 PDF 文件中对其进行编码。通常,只有 PDF 中使用的字符才会放入 PDF 文件中,因此最终会得到部分字体(技术术语是字体已子集化)。

我可以想象这个过程给你留下的文本表示看起来像是故意尝试混淆或加密。不过,这很可能只是巧合。

一般来说,您在 PDF 的页面描述中找到的文本(字符代码)与实际的字符代码无关。它们通过各种机制映射到为它们绘制的内容(使用的字形)。

PDF 可以使用编码或 ToUnicode 表的机制,然后将页面描述中找到的这些字符代码映射到可从中导出含义的 Unicode 字符。但这是可选的,仅当 PDF 声称符合某些标准(例如 ISO PDF/A(仅限某些风格)或 ISO PDF/UA)时才需要。

© www.soinside.com 2019 - 2024. All rights reserved.