从支持富文本的应用程序复制到剪贴板通常会以多种格式添加文本。我需要找出可用的格式,然后以选定的格式检索剪贴板内容。如果它很重要,我对富文本格式(来自Word,Acrobat,浏览器......)感兴趣,而不是图像数据或其他exotica。
我看了看,但我发现的解决方案仅限于纯文本,super outdated,特定于Windows(我在OS X上),{{3在命令行实用程序pbcopy
和pbpaste
(不处理所有剪贴板格式)或上面的几个。
所以:如何获取剪贴板中显示的格式列表,并以我选择的格式提取其内容?
平台,按照兴趣顺序:系统无关(我希望),OS X Mountain Lion(我当前的平台)或类似的,其他平台(我计划分发我的代码)。
reliant:看起来很有趣,但在OS X上它委托给支持pbcopy
,pbpaste
和text
格式的rtf
和ps
仅
pyperclip仅适用于Windows,但展示了如何获取HTML。 (This recipe所以问题是指它。)
This也特定于win32clipboard。
This SO answer问题是关于将文件拖放到剪贴板(在Windows上)。有趣,但没有帮助我需要。
This很简单,仍然适用于OS X,但它只能获得纯文本 - 而且我没有发现tkinter可以处理其他任何事情的证据。
This tkinter-based solution显示将文本放在剪贴板上的近似相同的tkinter代码。
我现在有一个针对OS X的解决方案(请参阅下面的This),但我很期待听到pyperclip
或其他模块是否可以在Windows上执行相同操作。 Pyperclip深入了解Windows API,因此它不能支持所有可用格式的列表和选择。
答案 0 :(得分:0)
借助于pypi上提供的模块richxerox,它在OS X上非常简单。它需要系统支持,包括Apple AppKit
和Foundation
模块。我在为Python 3构建Objective C时遇到了麻烦,所以最初我只是将它用于Python 2.然而,Anaconda 3预装了所有必需的部分。
这是一个打印可用剪贴板类型的演示,然后提取并打印每个类型:
import richxerox as rx
# Dump formats
verbose = True
if verbose:
print(rx.available(neat=False, dyn=True))
else:
print(rx.available())
# Dump contents in all formats
for k, v in rx.pasteall(neat=False, dyn=True).items():
line = "\n*** "+k+": "+v
print(line)
<强>输出:强>
(
"public.html",
"public.utf8-plain-text"
)
*** public.html: <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8">
</head><body><a href="http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/"
rel="nofollow noreferrer">pyperclip</a>: Looks interesting</body></html>
*** public.utf8-plain-text: pyperclip: Looks interesting
要以所需格式打印并回退到文本,您可以使用:
paste_format = "rtf"
content = rx.paste(paste_format)
if not content:
content = rx.paste("text")
或者您可以先检查格式是否可用:
if "public.rtf" in rx.available():
content = rx.paste("rtf")
else:
content = rx.paste("text")