15

我确实必须发送一份关于将一些剪贴板内容粘贴到 Web 富编辑器中的报告,并且我需要一种将剪贴板内容转储/恢复为(可能)HTML 的方法。

我怎样才能做到这一点?

似乎 pbcopy / pbpaste 总是给我文本,即使我使用pbpaste -P rtforpbpaste -P HTML

4

2 回答 2

19

三年后,在更加文明的时代,我们有了Swift。您可以编写一个简短的 Swift 脚本来准确地从 OS X 的粘贴板上提取您需要的内容。

将以下 Swift 4 代码段放入一个新的文本文件中。我命名我的pbpaste.swift

import Cocoa
let type = NSPasteboard.PasteboardType.html
if let string = NSPasteboard.general.string(forType:type) {
  print(string)
}
else {
  print("Could not find string data of type '\(type)' on the system pasteboard")
  exit(1)
}

然后,复制一些 html,并swift pbpaste.swift从放置该文件的目录中运行。

耶,html!呃,OS X 添加了大量自定义标记(和<meta>标签?!)——但是,至少它不是纯文本!

笔记:

  • NSPasteboard.PasteboardType.html是一个特殊的全局,计算为字符串"public.html"
  • 显然这是 html 特定的,所以你可能想要:
    1. 命名它pbpaste-html.swift,或
    2. 从命令行参数中读取所需的类型
  • 它有点慢,因为它是动态解释的,而不是编译和执行的。编译给了我 10 倍的加速:

    xcrun -sdk macosx swiftc pbpaste.swift -o pbpaste-html
    

    然后只需调用./pbpaste-html而不是swift pbpaste.swift.

于 2016-03-20T01:19:40.817 回答
9

我知道您已经找到了这一点,但是为了让从 Google 出现在这里的人的利益,从Mac OS X 粘贴板(剪贴板)中获取 RTF 数据中为 RTF 数据提供的解决方案适用于从剪贴板中获取 HTML , 也。

也就是说,命令

osascript -e 'the clipboard as «class HTML»' |   perl -ne 'print chr foreach unpack("C*",pack("H*",substr($_,11,-3)))'
于 2014-06-10T03:00:03.000 回答