- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望实现几个功能来改善我程序的输出。我想将一列文本的背景设置为某种颜色,这样更清楚的是列属于一起。
一图胜千言:我想转换这个:
Pos. :123456789012345
Name. :ABCDEFGHIJKLMNO
Str. :SOMESTRINGSOMET <---- indented by half a row, Column number superscripted
Str. :SOM SOMET
Str. :SOMESTRIN ET
为此:
我如何使用 python 做到这一点?是否有允许我这样做的框架?我将其转换为 latex ,但是我无法使上标数字起作用。它们需要在文本之上,但不能充当角色,因为图片的列之间存在关系。
Example: A is at position 1. It has as Properties S and O, thats why it is on top of those two and that is why there is an indent of half a character. S has the superscript 170, T has the superscript 185.
特别困难的还有 Str 部分移动半个字符的部分。我想有一个例子将其集成到我的程序中。
最佳答案
有可能想出棘手的解决方案,考虑单间距字体,这可能会解决您的问题。但他们只是在等待失败。您帖子中的灰色列可以完全按照您的图中添加,但我选择不让它改变字母中的颜色(仅仅是因为我发现这样更易读)。
这里有一些可能的 PIL:
稍微改变一下字体:
接下来是更“严重”的字体变化,所有这些都是用代码原样产生的。
接下来是生成这些图形的代码。我并没有真正把它做得很好,它可以在很多方面得到改进。将此作为您需要做的事情的示例,也许可以为您的问题找到解决方案。要使用任何类型的字体,您都需要一个实际的排版系统,例如 LaTeX。
import sys
import Image, ImageDraw, ImageFont
# Assumption: some other piece of code separates the data in the following
# format.
line1 = [("Pos. :", 0), ("123456789012345", 0)]
line2 = [("Name. :", 0), ("ABCDEFGHIJKLMNO", 0)]
line3 = [("Str. ", 0), (":", -0.5), ("SOMESTRINGSOMEST", -0.5)]
line4 = [("Wave 1:", 0), ("_XXXX_X____X_X_", 0)]
line5 = [("Wave 2:", 0), ("__XX_XXX_X__X_X", 0)]
line_data = [line1, line2, line3, line4, line5]
# Texts to draw over the last element, in specific positions,
# of lines present in line_data.
subscript = {
2: { # Meaning: third item in line_data
0: "170", # Meaning: draw "170" over the first char
len(line3[-1][0]) - 1: "185", # Draw "185" over the last char
7: "180", # Meaning: draw "180" over the eight char
},
4: {5: "hi"},
3: {6: "ops"}
}
# If the following fonts are not mono spaced, you are going to suffer.
#
# Normal font.
font = ImageFont.truetype('FreeMono.ttf', 40)
# Font for subscript.
font_tiny = ImageFont.truetype('FreeMono.ttf', 20)
im = Image.new("RGBA", (1000, 1000), 'white')
draw = ImageDraw.Draw(im)
line_offset = 4
start_y = 6
width_A, height_A = font.getsize('A')
_, height_tiny_A = font_tiny.getsize('A')
# Collect even columns from the last item of list line1.
even_columns = []
x = 0
for i, (text, _) in enumerate(line1):
for j, letter in enumerate(text):
if i == len(line1) - 1 and not j % 2:
even_columns.append(x)
x += width_A
# Write all lines.
width = 0
l_start_y = start_y
for di, data in enumerate(line_data):
x = 0
for i, (text, xoff) in enumerate(data):
for j, letter in enumerate(text):
# Apply x offset.
extra = width_A * xoff
draw.text((x + extra, l_start_y), letter, font=font, fill='black')
x += width_A
width = max(x, width)
l_start_y += height_A + line_offset
# Collect letter positions from the lines that will have subscripts.
letter_pos = {}
for k in subscript:
letter_pos[k] = {}
x = sum(len(text) for text, _ in line_data[k][:-1]) * width_A
text, xoff = line_data[k][-1]
for i in range(len(text)):
extra = width_A * xoff
letter_pos[k][i] = x + extra
x += width_A
# Write all subscripts.
for k, v in subscript.items():
line = line_data[k]
for pos, text in v.items():
x = letter_pos[k][pos]
y = start_y + (line_offset + height_A) * k
y -= height_tiny_A * 0.4 # XXX A poor heuristic that worked here.
draw.text((x, y), text, font=font_tiny, fill='black')
width = max(width, int(x + font_tiny.getsize(text)[0]))
# Draw grey columns.
columns = Image.new(im.mode, im.size, 'white')
mask = Image.new("L", im.size, 'white')
for x in even_columns:
columns.paste((128, 128, 128), (x, line_offset, x + width_A, l_start_y))
mask.paste(164, (x, line_offset, x + width_A, l_start_y), )
im = Image.composite(im, columns, mask)
# Crop and save the resulting image.
im.crop((0, 0, width, l_start_y + 2)).save(sys.argv[1])
关于python - 我如何像在 Illustrator 中一样在 python 中格式化文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704678/
我正在使用 Adobe Illustrator CS5 和 ExtendScript Toolkit CS5。 我有一个非常复杂的脚本,alert() 不再工作,因为东西在一个循环中。如何模拟我正
我需要选择大小介于两个值之间的所有文本对象,例如 12 和 14pt(包括 12.1、12.2 等)。这有可能吗? 最佳答案 这似乎是一个脚本的候选。试试这个: function selectText
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
已关闭。此问题不符合 Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 a specific programming problem, a software al
activeDocument.fitArtboardToSelectedArt() 调用此命令时,AI 在 AI 5.1/6 32 位和 64 位版本上崩溃。我可以使用菜单中的命令。有没有人遇到过这个
activeDocument.fitArtboardToSelectedArt() 调用此命令时,AI 在 AI 5.1/6 32 位和 64 位版本上崩溃。我可以使用菜单中的命令。有没有人遇到过这个
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 a specific programming problem, a software a
首先:我不是程序员。只是玩弄代码并尝试让它为特定任务工作: 这是我为在 600 多个 pdf 文件中插入带有文件名的文本而制作的脚本。这应该适用于选定文件夹中的所有文件。 问题:Illustrator
我有一个简单的问题,但似乎无法解决它: 我有 PathItem 并且 Illustrator 指出它在位置 (781px,250px)。 如何在 jsx 中获取这些值? 我注意到 路径项 从 继承位置
我正在尝试使用扩展脚本在 illustrator 中放置一个 svg。这基本上就是我在做什么 var doc = app.documents.add(); var p = doc.placedItem
我在 Illustrator 中将形状拼接在一起,但目前它们都是黑白的。 例如: 但是,我已经有了一系列颜色,我想用它们以随机顺序填充每个形状(最好不要让两种颜色相邻),这样它看起来像: 例如: 马赛
我正在查看 SDK 文档,它似乎是可行的,但我更愿意听取可能已经研究过这个问题或已经为其他 Adobe 应用程序做过这个的人的意见。基本上我想创建一个完全破坏 GUI 的插件,我会创建我自己的 U
每次我想将图像创建为不同的分辨率时,都必须单击“保存为网络”并更改分辨率,这很乏味。有没有办法编写一个脚本来自动实现这一点,将多个分辨率作为一个? 最佳答案 为此,我自己使用此功能 function
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我编写了一个脚本将文件导出为 jpeg。但是,导出时,如果文件名包含空格,这些空格将替换为破折号。为什么?如果您在手册中从 Illustrator 导出,则文件名会正确显示。如果您使用 fileJpg
我想学习为 Adobe Illustrator CS6 开发自己的脚本(或插件?)。 我无法理解的是脚本和插件有什么区别? 我从这个页面开始阅读 pdf 指南:http://www.adobe.c
我在使用 Illustrator CS6 时遇到了一个脚本问题——这个问题已经困扰我很长一段时间了。复合路径内的组。 我已经设置了一个脚本来提取 Illustrator 文件中所有使用的颜色,以及半色
这听起来很明显: 我习惯用 illustrator 设计我的网页模型。当我将所有内容转换为 css 并在我的浏览器中测试页面时,我可以看到 illustrator 模型中的字体更大,即使我在CSS 方
我在网上找到了这个脚本,这几乎就是我正在寻找的,但它需要修改,而且我似乎无法让它工作。 if (selectedFolder) { myDocument = app.docum
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!