2013-06-20 74 views
6

我不得不发送一份关于将一些剪贴板内容粘贴到网页编辑器中的报告,我需要一种方法将剪贴板内容转储/恢复到(可能)HTML。如何从OS X粘贴板/剪贴板中获取HTML数据?

我该怎么做?

似乎pbcopy/pbpaste不要送花儿给人给我短信,即使我用pbpaste -P rtfpbpaste -P HTML

回答

6

我知道你已经发现了这一点,但对于人谁从谷歌在这里摸到的利益,则在Getting RTF data out of Mac OS X pasteboard (clipboard)上为RTF数据提供的解决方案也适用于将HTML从剪贴板中取出。

也就是说,命令

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

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

将下面的swift 3片段放到一个新的文本文件中。我将其命名pbpaste.swift

import Cocoa 
let type = NSPasteboardTypeHTML 
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>标记?!) - 但是,嘿,至少它不是纯文本!

注:

  • NSPasteboardTypeHTML是一个特殊的全球计算结果为字符串"public.html"
  • 显然,这是HTML特殊,所以你可能想要么:
    1. 将其命名为pbpaste-html.swift,或
    2. 从命令行参数中读取所需的类型
  • 这有点慢,因为它正在被动态解释,没有被编译和执行。编辑给我10倍的加速:

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

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

斯威夫特2版:

import Cocoa 
let type = NSPasteboardTypeHTML 
if let string = NSPasteboard.generalPasteboard().stringForType(type) { 
    print(string) 
} 
else { 
    print("Could not find string data of type '\(type)' on the system pasteboard") 
    exit(1) 
}