从支持富文本的应用程序复制到剪贴板通常会以多种格式添加文本。 我需要找出可用的格式,然后以选定的格式检索剪贴板内容。 万一它很重要,我对丰富的文本格式(从Word,Acrobat,浏览器,…)感兴趣,而不是在图像数据或其他新奇 。
我看了看,但我发现的解决scheme仅限于纯文本, 超级过时 ,特定于Windows(我在OS X上), 依赖于命令行工具pbcopy
和pbpaste
(它不处理所有剪贴板格式),或上面的几个。
所以:我如何获得剪贴板中存在的格式列表,并以我select的格式提取其内容?
平台,为了兴趣的顺序:系统无关(我希望),OS X山狮(我目前的平台)或类似的,其他平台(我计划分发我的代码)。
pyperclip :看起来很有意思,但是在OS X上它委托给pbcopy
和pbpaste
,它们只支持text
, rtf
和ps
格式。
这个来自activestate的配方仅适用于Windows,但是展示了如何获得HTML。 ( 这个问题是指这个问题)。
这个答案也是win32clipboard的具体内容。
这个问题是关于拖放文件到剪贴板(在Windows上)。 有趣的,但没有我所需要的帮助。
这种基于 tkinter 的解决scheme很简单,仍然可以在OS X上运行,但它只能得到纯文本,而且我没有发现tkinter可以处理其他任何事情的证据。
这显示了将文本放在剪贴板上的近乎相同的tkinter代码。
我现在有一个OS X的解决scheme,但我很希望听到如果(以及如何) pyperclip
或其他模块可以在Windows上做同样的事情。 Pyperclip深入Windows API,所以它不能很好地支持所有可用格式的列表和select。
在OS X上可以通过pypi上的richxerox模块获得相当简单的结果。 它需要系统支持,包括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")