23

根据man页面pbpaste

   -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.

但是(至少根据我对 10.6 Snow Leopard 的经验),pbpaste -Prefer rtf即使 RTF 数据存在于粘贴板上,也永远不会放弃。有没有其他简单的方法来获取准备粘贴的任何内容的 RTF 文本?

我尝试了 AppleScript,但给出了Hex 编码 craposascript -e 'the clipboard as «class RTF »'的响应。AppleScript 可以将此十六进制数据转换为我可以使用的文本吗?«data RTF 7B7D»

4

5 回答 5

17

我在 AppleScript 中看不到任何方法,但是由于您无论如何都在 shell 中工作,所以我只是对其进行后处理:“十六进制编码的废话”是您想要的 RTF 数据。我能想到的最简单的脚本是

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

解释:去掉and位(每个substr($_,11,-3)guillemets是两个字节);将十六进制编码的数据打包成字节流;将一个字节流解压成一个字符值数组;将数组中的每个整数转换为其对应的字符并打印出来;并且选项评估为每一行给出的脚本,该行隐式存储在. (如果您希望该脚本在其自己的文件中,只需确保 shebang 行是.)然后,运行«data RTF»\npack("H*", ...)unpack("C*", ...)print chr foreach ...-ne$_#!/usr/bin/perl -ne

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

会给你原始的 RTF 输出。

于 2010-03-30T20:23:06.713 回答
12

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

osascript -e 'the clipboard as "HTML"'|perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
于 2013-06-20T15:36:24.240 回答
1

根据我的经验pbpaste,即使手册页另有说明,也不可能从中获取 RTF 数据。

最简单的解决方案是改用pbv,它的开发正是为了解决pbpaste.

示例:将以下富文本字符串复制到剪贴板后:

“你好,我是 文本

pbv能够为您返回正确的 RTF 数据:

$ pbv public.rtf | textutil -stdin -info
File:  stdin
  Type:  rich text format (RTF)
  Length:  19 characters
  Contents:  "Hi, I'm rich text"

pbpaste即使被指示首选 RTF,也将始终输出纯文本:

$ pbpaste -Prefer rtf | textutil -stdin -info
File:  stdin
  Type:  plain text
  Length:  19 characters
  Contents:  "Hi, I'm rich text"

通过这个类似的问题找到。

于 2021-08-29T08:52:09.370 回答
0

我通过快速谷歌搜索找到了一个关于这个的对话

于 2010-03-30T14:03:29.133 回答
0

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

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

您可以通过 Automator 创建服务:

  1. 打开自动机
  2. 提供新服务(德语中的“Dienst”)
  3. 添加“执行 AppleScript”
  4. 输入:无;输出; 替换选择

剧本:

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

完毕。现在保存新服务并尝试一下:选择一个文本,然后转到应用程序菜单并选择“服务”>“转换为 RTF”

于 2016-07-03T18:56:38.107 回答