Замена текста в .ai, .pdf, .eps et c для печати в Python - PullRequest
0 голосов
/ 23 марта 2020

Моя проблема сводится к следующему: у меня есть файл Adobe Illustrator с простым рисунком, который можно вырезать на объекте с помощью лазера. Каждый объект имеет идентификационный тег, который до сих пор редактировался вручную перед каждой печатью на лазер. Мы хотим сделать это программно, поэтому я пытаюсь написать скрипт, который может найти тег в виде текста в файле, заменить его и сохранить.

Тип файла гибкий, если он на основе векторов, и поэтому язык. Я просто наиболее знаком с Python. До сих пор я не смог найти модуль, который мог бы просто открыть .pdf, заменить текст, а затем сохранить его. Самое близкое, что я получил, - это ручное редактирование текста в формате PDF с использованием возвышенного текста. Является ли мой подход к этой проблеме неправильным, и если да, есть ли лучшие решения? Спасибо.

1 Ответ

1 голос
/ 23 марта 2020

Обычно это немного сложно, потому что в файлах PDF есть информация о том, где размещать строки текста. Если вы хотите добавить предложение, вам придется вручную переместить остальную часть текста в нужные места, чтобы оно работало. Однако, если вы хотите изменить только слово, и, как вы говорите, это можно сделать, изменив текст в редакторе, вы можете использовать простую замену.

Я взял небольшой фрагмент образца PDF в проиллюстрируйте:

import re

s = '''BT 
/F1 0010 Tf 
69.2500 628.8480 Td 
( And more text. And more text. And more text. And more text. And more ) Tj 
ET 
BT 
/F1 0010 Tf 
69.2500 616.8960 Td 
( text. And more text. Boring, zzzzz. And more text. And more text. And ) Tj 
ET 
BT 
'''

changed_s = re.sub('text', 'NOT-TEXT', s)

После этого фрагмента changed_s все вхождения «текста» будут заменены на «НЕ-ТЕКСТ».

Чтобы применить это к файлу, вы можете сделать что-то вроде это:

import re

# Read from file
# Even better: SVG or illustrator file
with open('filename.pdf', 'r') as f:
    file_text = f.read()

# Perform substitution
changed_text = re.sub('to-change', 'change-to', file_text)

# Write to file
with open('outfile.pdf', 'w') as f:
    f.write(changed_text)

Вы можете прочитать о re.sub, если вам нужно найти и заменить более сложное.

...