Apple脚本:如何将html内容复制到剪贴板?

时间:2012-06-18 15:06:10

标签: html macos applescript rtf

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

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

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


我找到了一个有效的解决方案,并在下面发布:)

6 个答案:

答案 0 :(得分:13)

我找到了一个解决方案,其目的是直接使用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}»"

当然,你可以把它们组合成一个句子 希望这有助于任何感兴趣的人。 :)

答案 1 :(得分: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中。

答案 2 :(得分: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

答案 3 :(得分:1)

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

/usr/bin/osascript: Argument list too long

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

可执行文件

〜/ 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»

答案 4 :(得分: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变量&#34; the_url&#34;和&#34; link_text&#34;在上述陈述之前。

答案 5 :(得分:0)

(Ryan Pattersson对anwser进行了扩展,就像魅力一样。)

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

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
相关问题