【问题标题】:Replacing text in .ai, .pdf, .eps etc for print in Python替换 .ai、.pdf、.eps 等中的文本以在 Python 中打印
【发布时间】:2020-03-24 16:17:06
【问题描述】:

我的问题归结为:我有一个带有简单图案的 Adob​​e Illustrator 文件,可以使用激光将其蚀刻到物体上。每个物体都有一个 ID 标签,到目前为止,在每次打印到激光之前,它都已经过手动编辑。我们希望以编程方式执行此操作,因此我正在尝试编写一个脚本,该脚本可以在文件中以文本形式查找标记,替换它,然后保存它。

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

【问题讨论】:

  • 你能发一个指向这种类型文件的链接吗?
  • 您最好研究一下 Adob​​e Illustrator 本身可以为您做什么脚本。编辑 PDF 非常困难,而且问题多多。
  • @usr2564301 这可能是要走的路,如果这不起作用,我会调查它。谢谢

标签: python pdf vector-graphics adobe-illustrator


【解决方案1】:

通常这有点困难,因为 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)

在这个 sn-p changed_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)

如果您需要进行更复杂的查找和替换,可以阅读 re.sub

【讨论】:

  • 这就是我实际做到的程度,但我遇到的主要问题是 pdf 的字符编码。我只是将编码设置为“latin1”,它现在似乎可以工作了。你知道有什么方法可以改变文本对齐以对齐中心吗?这将允许我拥有可变 ID 长度
  • PDF 文件中没有“文本对齐”,每段文本都是单独放置的。为了获得任何理由,您需要知道渲染时文本的“宽度”,然后定位文本的开头,以便将剩余的文本定位在您想要的位置。
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多