【问题标题】:Is it possible to copy a text range (selected by script) in Adobe Illustrator?是否可以在 Adob​​e Illustrator 中复制文本范围(由脚本选择)?
【发布时间】:2020-10-03 15:53:32
【问题描述】:

我尝试在我编写的脚本中,从用户选择的文本框中选择一个文本范围,然后将所选文本范围复制到剪贴板:

var userSelection = activeDocument.selection;
userSelection[0].textRange.lines[0].select();
app.copy();

当我运行上面的代码时,弹出如下错误信息:

当我确认错误消息并停止脚本操作并返回 Illustrator 时,脚本似乎选择了文本范围而没有进入文本编辑模式:

当我按 Cmd+C(在 mac 上)或 Cmd+X 时,同样的错误弹出上面的消息。

所以我意识到,如果不进入文本编辑模式,您可能无法复制文本范围。

有没有办法进入文本编辑模式从而复制文本范围,或者还有其他方法可以复制文本范围?

【问题讨论】:

  • 你的最终目标是什么?您需要在另一个应用程序中插入文本吗?
  • 其实最终目的是将文本范围粘贴到另一个文本框中,以便将所有字符属性转移到新的文本框中。而且我知道这个粘贴只能在文本编辑模式下完成。所以也许我应该问“我如何将文本范围粘贴到文本框架中?”,但这可能并不重要。最后,我想知道的是如何让文本进入文本编辑模式来做到这一点,或者可能有另一种方法将文本范围粘贴到文本框架中。
  • 这正是我要问的原因。因为如果你想在 Illustrator 中移动文本,你应该避免使用 copy()paste() 方法,因为有专门的方法来移动不需要剪贴板的文本。稍后会发布我的答案。

标签: javascript adobe-illustrator extendscript


【解决方案1】:

可以使用行对象的duplicate() 方法将文本从一个文本框架移动到另一个文本框架并保持其所有字符属性不变,将行复制到目标文本框架中。请看这个小样本 sn-p:

var doc = app.activeDocument;
var sourceFrame = doc.textFrames.getByName("source");
var targetFrame = doc.textFrames.getByName("target");

var line = sourceFrame.textRange.lines[0];

line.duplicate(targetFrame);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2013-07-07
    • 2020-10-05
    相关资源
    最近更新 更多