如何将文本pdf更改为utf

如何将文本pdf更改为utf

我有一堆正确显示西里尔字母的pdfs。但是如果我复制并粘贴他们的文字,就会产生胡言乱语。

然后,我使用保存函数从okular将pdf转换为文本文件,并发现编码是WINDOWS-1251,这是一个古老的西里尔编码。转换后,它UTF-8,西里尔的显示正确。

文件的一个示例链接是https://cdn.esis.edu.mn/cover/01/01_mongol_khel.pdf。

有没有办法将pdfs转换成编码的UTF-8,以便我可以复制、粘贴和搜索?

解决了

使用@iPDFdev提供的信息,我设法解决了这个问题。

对于可能遇到类似问题的人,我将Windows1251放在https://www.compart.com/en/unicode/charsets/windows-1251的UTF-8表中,并在https://github.com/pymupdf/PyMuPDF/issues/530上修改了代码。我完全无视旧的Unicode地图,并在所有页面上添加了用于所有字体的西里尔字母地图。

代码语言:javascript运行复制import fitz

import re

doc = fitz.open(inputFileName)

new = '1 beginbfrange\n <0410>\nendbfrange'

for pno in range(doc.page_count):

font_tuples = doc.get_page_fonts(2)

for font_tuple in font_tuples:

for line in doc.xref_object(font_tuple[0]).splitlines():

line = line.strip()

if line.startswith("/ToUnicode"):

stream_id = int(line.split()[1])

old_stream_decoded = doc.xref_stream(stream_id).decode()

new_stream_decoded = re.sub('[0-9]+? beginbfrange.*endbfrange', new, old_stream_decoded, flags=re.DOTALL)

new_stream_encoded = new_stream_decoded.encode()

doc.update_stream(stream_id, new_stream_encoded)

doc.save(outputFileName)

相关推荐

性能小钢炮!四五十万的奔驰A级AMG到底怎么样?跟我们去看一下!
国际足联世界杯
365bet下载手机版

国际足联世界杯

📅 06-28 👁️ 3582
S 開頭的英文單字:150+個常用單字分類總整理與實用慣用語
养鲈鱼的方法和技巧图解大全(鲈鱼怎么养才能活几天?)
什么叫做半离合状态
英国beat365官方APP

什么叫做半离合状态

📅 06-27 👁️ 1365
性能小钢炮!四五十万的奔驰A级AMG到底怎么样?跟我们去看一下!
2025 最新男生包包 TOP 15!各種包包種類、風格大集合
国际足联世界杯
365bet下载手机版

国际足联世界杯

📅 06-28 👁️ 3582
养鲈鱼的方法和技巧图解大全(鲈鱼怎么养才能活几天?)