跳转到主要内容

为Mac OS X(旧称Mac OS X)的富文本(HTML/RTF)而非纯文本提供剪切/复制/粘贴功能

项目描述

PyPI Package latest release Supported versions

为MacOS(旧称Mac OS X)提供的富文本剪切/复制/粘贴。

用法

from richxerox import *

print available() # what kind of data is on the clipboard?

print paste()     # get data in the default format ('text')
print paste(format='text')  # get text (Unicode)
print paste(format='rtf')   # get RTF
print paste(format='html')  # get HTML

print "ALL CONTENTS:\n", pasteall()

clear()
print "ALL CONTENTS AFTER CLEAR:\n", pasteall()

r = "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1187\\cocoasubrtf390\n" \
    "{\\fonttbl\\f0\\froman\\fcharset0 Times-Roman;}\n{\\colortbl;" \
    "\\red255\\green255\\blue255;}\n\\deftab720\n\\pard\\pardeftab720" \
    "\n\n\\f0\\fs24 \\cf0 This is \n\\b good\n\\b0 !}"
h = "this is <strong>good</strong>!"
copy(text="this is good!", html=h, rtf=r)

print "ALL CONTENTS AFTER COPY:\n", pasteall()

API基于xerox的API,有简单的copy()paste()操作。

paste()视为将内容粘贴到您的程序中,而将copy()视为从您的程序中复制内容。

API的主要区别在于,考虑到富文本中使用的不同格式,如果格式不是纯文本,则必须指定提供的或需要的格式。这通过关键字样式参数完成。

替代API

如果您更喜欢面向对象的API

from richxerox import *

print pasteboard.get_contents(format='html')    # paste
pasteboard.clear()                              # clear
pasteboard.set_contents(text="this is good!",   # copy
                        html=h, rtf=r)

print pasteboard.get_all_contents()       # pasteall

背景

我费尽心思搜寻,但始终找不到一个简单的Python模块,可以在macOS上轻松直观地实现复制和粘贴操作。虽然xerox功能良好,但它仅支持纯文本。那么,对于导出带有超链接、样式等富文本的浏览器和文字处理器怎么办?如何访问这些数据呢?

经过多次尝试,我终于找到了一些可以修改并使其正常工作的代码示例,而无需理解苹果的整个FoundationAppKit。这个模块就是成果。

深入RTF

即使在这个到处都是HTML的时代,苹果和macOS应用仍然遗憾的是以RTF为中心。

  • 据我所知,RTF往往在应用程序之间传递时不够稳健。不同的应用程序对相同的RTF有不同的解释或渲染方式,因此字体大小和其他特征会发生变化。

  • RTF非常冗长。例如,Microsoft Word将“这是好的!”的复制/剪切表示形式输出为29,807个字符。微软以冗长的导出而闻名,RTF本身试图表示整个文档,而不是单个片段。尽管如此,这大约是HTML的1,000倍(也就是三个十进制数量级)的冗长。试着在某个应用程序中复制现有文本,然后运行pasteall(),亲自体验一下这种疯狂。

  • 如果你在剪贴板上放置多种文本格式,当你要求应用程序“粘贴”数据时,你几乎没有控制哪种格式将被使用。如果你只想使用一种格式,最好只把那种格式放在剪贴板上。

虽然Mac应用程序偶尔会将HTML内容放在剪贴板上,但RTF似乎是最常见的通用语言。我尚未找到任何特别好的、稳健的或最新的Python工具来解析和转换RTF。但是,方便的textutil工具可以将RTF文件转换为相当干净的HTML,如下所示

textutil -convert html temp.rtf

生成temp.html。这可以用lxml或你喜欢的HTML/XML库进行解析和处理。

注意

  • 版本1.0.1取消了轮打包的发行。轮子通常很好,但有报告称,它可能会根据本地安装的Mac基础库的状态导致安装中断。取消轮子应该会强制安装更本地化的依赖集。如果您仍然有问题,请在安装richxerox之前手动安装pyobjc

  • 版本1.0.0更新了测试矩阵。已确认2.7、3.3、3.4、3.5和3.6的最新版本可以正常工作。已从PyPI中删除旧版、预-SemVer版本;它们导致了一些安装问题。由于Python 3.2既古老又不再在我的本地测试环境中得到适当支持,因此已停止对其支持。

  • 截至版本0.6,对Unicode字符的处理更加稳健。更好的自动安装,包括如果需要则安装Foundation pyobjc模块。(pyobjc自动安装仅在Python 2.7及以上版本中可靠地工作,因此已取消对Python 2.6的官方支持。)

  • 如果需要安装底层的pyobjc库,这个过程将需要很长时间。例如,4小时7分钟。不要只是边喝咖啡边安装。吃午餐。一顿漫长的午餐。然后也许可以小睡一会儿。

  • 版本0.5在Unicode处理中有一个错误。尽管它通过了所有测试,但它对来自真实应用程序的Unicode进行了过度引号处理。已修复。

  • 代码灵感来源于并/或基于Genba的使用PyObjC从OS X剪贴板读取URL以及Carl M. Johnson的copy_paste.py

  • 另请参阅NSPasteboard文档、关于UTI的讨论以及John Siracusa对Mac OS类型演变的讨论

  • 作者Jonathan Eunice(邮箱jonathan.eunice@gmail.com)或Twitter上的@jeunice欢迎您的评论和建议。

安装

要安装最新版本

pip install -U richxerox

在某些情况下,有多个Python安装时,pip和Python安装可能会断开连接。如果上述方法不奏效,请尝试通过Python直接安装。您还可以指定要安装的特定Python版本。

python -m pip install -U richxerox

(您可能需要以sudo前缀执行以授权安装。)

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

richxerox-1.0.1.zip (16.5 kB 查看哈希值)

上传时间

由以下支持