11

我知道如何将纯文本复制到剪贴板:

oascript -e 'set the clipboard to "plain text"'

但问题是如何将 html 内容复制到剪贴板?例如,如何将以下 html 内容复制到剪贴板:

<b>bold text</b>

以便在将文本粘贴到 TextEdit 时得到粗体文本?

我在这里先向您的帮助表示感谢!


我为此找到了一个中间解决方案:

echo "<b>bold text</b>" | textutil -stdin -stdout -format html -convert rtf | pbcopy

到目前为止,这很有效,但不幸的是我发现它不适用于图像标签:

echo "<img src=\"https://www.google.com/images/srpr/logo3w.png\">" | textutil -stdin -stdout -format html -convert rtf | pbcopy

这不能做我想要的工作,所以有人知道原因吗?
谢谢!


我找到了一个可行的解决方案并将其发布在下面:)

4

6 回答 6

27

我找到了一个解决方案,想法是直接使用 HTML 类而不是 RTF 类。(TextEdit 或 Web 编辑器可以处理这个 HTML 类以及 RTF 类数据)
您所要做的就是将您的 html 代码转换为原始十六进制代码。
完整的代码如下所示:

hex=`echo -n "your html code here" | hexdump -ve '1/1 "%.2x"'`
osascript -e "set the clipboard to «data HTML${hex}»"

当然,您可以将它们组合成一个句子。
希望这对任何感兴趣的人有所帮助。:)

于 2012-06-18T18:55:02.113 回答
4

如果输入的 HTML 太大,@kj 的解决方案将不起作用,您可能会遇到如下错误消息:

/usr/bin/osascript: Argument list too long

我通过将@kj 的解决方案转换为可执行文件并通过管道处理数据,对它进行了一些改进。我希望它也有帮助。

可执行文件

~/bin/pbcopyhtml:

#!/bin/sh
printf "set the clipboard to «data HTML$(cat $@ | hexdump -ve '1/1 "%.2x"')»" | osascript -

用法

从管道

$ printf '# title\n\n- list\n- list' | cmark | ~/bin/pbcopyhtml
$ osascript -e 'the clipboard as record'
«class HTML»:«data HTML3C68313E7469746C653C2F68313E0A3C756C3E0A3C6C693E6C6973743C2F6C693E0A3C6C693E6C6973743C2F6C693E0A3C2F756C3E0A»

从文件

$ printf '# title\n\n- list\n- list' | cmark > sample.html
$ ~/bin/pbcopyhtml sample.html
$ osascript -e 'the clipboard as record'
«class HTML»:«data HTML3C68313E7469746C653C2F68313E0A3C756C3E0A3C6C693E6C6973743C2F6C693E0A3C6C693E6C6973743C2F6C693E0A3C2F756C3E0A»
于 2020-03-20T04:18:26.043 回答
1

我对 AppleScript 不是很擅长,但这里有一些有用的东西。不幸的是,因为它会打开一个 Safari 窗口,所以它不是即时的。您可能需要调整延迟值以补偿较慢的性能,但在我的测试中,0.25 秒似乎足够长。

set theHTML to "<b>bold text</b>"

tell application "Safari"
    open location "data:text/html," & theHTML
    activate
    tell application "System Events"
        keystroke "a" using {command down}
        keystroke "c" using {command down}
    end tell
    delay 0.25
    close the first window
end tell

之后,渲染的文本应该在您的剪贴板上,准备粘贴到 TextEdit 中。

于 2012-06-18T15:39:32.147 回答
1

我无法在优胜美地的这个线程中使用任何其他解决方案。将 RTF 内容放入剪贴板时,粘贴到 TextEdit 时工作正常,但粘贴到 Chrome 时不起作用(我想将脚本粘贴到 Google 表格电子表格中)。最终我能够让它工作:

set rawHTML to "<a href=\"" & gmailURL & "\">" & myTitle & "</a>"
set escapedData to do shell script "echo " & (quoted form of rawHTML) as «class HTML»
set the clipboard to escapedData
于 2015-12-31T18:50:08.813 回答
0

抱歉,您的代码甚至无法在 OS X Mavericks 的 AppleScript 编辑器中编译

hex=`echo -n "your html code here" | hexdump -ve '1/1 "%.2x"'`
osascript -e "set the clipboard to «data HTML${hex}»"

但是,我发现以下代码运行良好:

set the_HTML to "<font size=4 face=\"verdana\"><a href=\"" & the_url & "\" target=_blank>" & link_text & "</a></font>"
--set the clipboard to the_text

do shell script "echo " & quoted form of the_HTML & " | textutil -format html -convert rtf -stdin -stdout | pbcopy -Prefer rtf"

当然,您需要在上述语句之前设置 AppleScript 变量“the_url”和“link_text”。

于 2015-04-26T05:56:37.220 回答
0

(扩展了 Ryan Pattersson 的答案,就像一个魅力。)

您可以创建一个子例程,将链接放置到剪贴板,然后从代码中的多个位置调用它

my urlToClipboard("Gmail", "http://gmail.com")

on urlToClipboard(theTitle, theUrl)
    set rawHTML to "<a href=\"" & theUrl & "\">" & theTitle & "</a>"
    set escapedData to do shell script "echo " & (quoted form of rawHTML) as «class HTML»
    set the clipboard to escapedData
end urlToClipboard
于 2016-07-03T09:23:17.510 回答