从Mac OS X粘贴板(剪贴板)中获取RTF数据

时间:2010-03-30 12:57:07

标签: macos applescript rtf pasteboard

根据man的{​​{1}}页面,

pbpaste

然而(根据我至少使用10.6 Snow Leopard的经验), -Prefer {txt | rtf | ps} tells pbpaste what type of data to look for in the pasteboard first. As stated above, pbpaste normally looks first for plain text data; however, by specifying -Prefer ps you can tell pbpaste to look first for Encapsulated PostScript. If you spec- ify -Prefer rtf, pbpaste looks first for Rich Text format. In any case, pbpaste looks for the other formats if the preferred one is not found. The txt option replaces the deprecated ascii option, which continues to function as before. Both indicate a preference for plain text. 永远不会放弃RTF数据,即使它存在于粘贴板上。有没有其他简单的方法来获取准备粘贴的RTF文本?

我尝试过AppleScript,但是pbpaste -Prefer rtf给出了响应osascript -e 'the clipboard as «class RTF »'吨十六进制编码的废话«data RTF 7B。 AppleScript可以将此hexdata转换为我可以使用的文本吗?

4 个答案:

答案 0 :(得分:15)

我无法从AppleScript内部看到任何方法,但是因为你还在shell中工作,我只是对它进行后处理:“hex-encoded crap”是你想要的RTF数据。我能想到的最简单的脚本是

perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'

解释:substr($_,11,-3)剥离«data RTF»\n位(每个guillemets是两个字节); pack("H*", ...)将十六进制编码数据打包到字节流中; unpack("C*", ...)将字节流解包为字符值数组; print chr foreach ...将数组中的每个整数转换为相应的字符并打印出来;并且-ne选项评估为每一行指定的脚本,该行隐含地存储在$_中。 (如果您希望该脚本位于自己的文件中,请确保shebang行为#!/usr/bin/perl -ne。)然后,运行

osascript -e 'the clipboard as «class RTF »' | \
  perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'

将为您提供原始RTF输出。

答案 1 :(得分:9)

我认为,至少在OS X 10.8上,如果您从Chrome复制HTML内容,这将有效:

osascript -e 'the clipboard as "HTML"'|perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'

答案 2 :(得分:0)

我通过快速谷歌搜索找到了conversation这个问题

答案 3 :(得分:0)

通过AppleScript(在10.11 El Capitan中测试)非常容易:

set the clipboard to (the clipboard as «class RTF »)

您可以通过Automator创建服务:

  1. 打开Automator
  2. 提供新服务(" Dienst"德语)
  3. 添加"执行AppleScript"
  4. 输入:没有;输出;替换选择
  5. 剧本:

    -- name: convert to RTF
    on run {input, parameters}
        set the clipboard to (the clipboard as «class RTF »)
        return the clipboard
    end run
    

    完成。现在保存新服务并进行试用:选择一个文本,然后转到应用程序菜单并选择"服务" > "转换为RTF"