Преобразование текстового содержимого PDF
У меня есть PDF-файл с несколькими текстовыми блоками, которые смещены. Я пытаюсь создать новый PDF-файл с выровненным текстом в соответствии с моей матрицей преобразования (известной). я могу использоватьPyMuPDF
(fitz), чтобы извлечь текстовую информацию из исходного PDF-файла и вставить текст в целевой PDF-файл, но таким образом я теряю всю структурную информацию (блоки, строки, промежутки и т. д.):
import fitz
src_doc = fitz.open('my.pdf')
tgt_doc = fitz.open()
src_page = doc[0]
tgt_page = tgt_doc[0]
text_dict = src_page.get_text('dict')
transform = fitz.Matrix(1, 1) # would be non-identity in practice
tw = fitz.TextWriter(tgt_page.rect)
for block in text['blocks']:
if block['type'] != 1: # ignore images
blocks.append(block)
for line in block['lines']:
for span in line['spans']:
tw.append(span['origin'], span['text'])
tw.write_text(tgt_page, morph=[fitz.Point([0.0, 0.0]), transform])
tgt_doc.save('aligned.pdf')
src_doc.close()
tgt_doc.close()
Это выполняет работу по выравниванию текста, однако теряет всю информацию о структуре текста.tgt_page
будет иметь больше блоков, чемsrc_page
.
Могу ли я сделать то же самое без ущерба для структуры страницы?
Первоначально я использовал то, что используется в ocrmypdf , но, к сожалению,pikepdf
поддерживает только символы ASCII. У меня возникают проблемы с использованием его для нелатинского текста. Любая другая библиотека, выполняющая эту работу, также подойдет.