替换.ai、.pdf、.eps等中的文本以在Python中打印

替换.ai、.pdf、.eps等中的文本以在Python中打印,python,pdf,vector-graphics,adobe-illustrator,Python,Pdf,Vector Graphics,Adobe Illustrator,我的问题归结为:我有一个Adobe Illustrator文件,其中有一个简单的图案,可以用激光蚀刻到物体上。每个对象都有一个ID标签,直到现在,在每次打印到激光器之前,该标签都已手动编辑。我们希望通过编程实现这一点,因此我尝试编写一个脚本,可以在文件中以文本形式找到标记,替换它,然后保存它 文件类型是灵活的,只要它是基于向量的,语言也是如此。我只是最熟悉Python。到目前为止,我还没有找到一个模块,可以简单地打开一个.pdf文件,替换一些文本,然后保存它。我得到的最接近的方法是使用subli

我的问题归结为:我有一个Adobe Illustrator文件,其中有一个简单的图案,可以用激光蚀刻到物体上。每个对象都有一个ID标签,直到现在,在每次打印到激光器之前,该标签都已手动编辑。我们希望通过编程实现这一点,因此我尝试编写一个脚本,可以在文件中以文本形式找到标记,替换它,然后保存它


文件类型是灵活的,只要它是基于向量的,语言也是如此。我只是最熟悉Python。到目前为止,我还没有找到一个模块,可以简单地打开一个.pdf文件,替换一些文本,然后保存它。我得到的最接近的方法是使用sublime文本手动编辑pdf中的文本。我处理这个问题的方法是错误的吗?如果是,还有更好的解决方案吗?谢谢。

一般来说,这有点困难,因为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)

在此代码段
更改后,
将所有出现的“text”替换为“NOT-text”

要将其应用于文件,可以执行以下操作:

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)

如果您需要进行更复杂的查找和替换,您可以详细阅读。

您可以发布指向此类文件的链接吗?您最好研究Adobe Illustrator脚本本身可以为您做些什么。编辑PDF非常困难,而且充满了问题。@usr2564301这可能是一条路,如果这不可行,我会研究它。谢谢,这就是我实际取得的进展,但我遇到的主要问题是pdf的字符编码。我刚刚将编码设置为“latin1”,现在似乎可以工作了。您知道有什么方法可以将文本对齐方式更改为居中对齐吗?这将允许我有一个可变的ID长度。PDF文件中没有“文本对齐”,每段文本都是单独放置的。为了实现任何对齐,您需要知道渲染时文本的“宽度”,然后定位文本的开头,以便将剩余文本定位到您想要的位置。