如何解析纯文本文件中的文本并使用结果突出显示PDF文件

时间:2014-09-23 02:11:42

标签: pdf kindle

早在2010年,一些人声称能够做到这一点:

http://www.mobileread.com/forums/showthread.php?t=103847

“Kindle将其注释存储在每个文档的Mobipocket(”.mobi“)文件中,并存储在一个名为”My Clippings.txt“的长文本文件中。在这篇文章中,我描述了一个将这些注释与PDF版本同步的系统计算机上的相应文件。

概述

该系统体现在Applescript中,该Applescript解析My Clippings文件并控制Skim PDF阅读器。该脚本首先解析剪辑文件。然后它搜索剪辑并隔离来自与当前打开的PDF文件的文件名匹配的文件上的文件(“相关剪报”)。然后,脚本遍历每个相关剪辑,在PDF文档中定位匹配的文本或位置,并在适当的位置应用高亮或添加注释。最终结果是带注释的可打印PDF文档,该文档与kindle上的文档相匹配。

您可以在此处下载脚本:http://dl.dropbox.com/u/2541109/KindleClippings.scpt。在运行脚本之前,请务必更改MyEmail的值以匹配您的发送地址,并验证MyClippingsFile中定义的Kindle安装点是否正确。您还需要免费的Skim PDF阅读器。

要使用它,请将文档文件发送或复制到您的kindle。请记住,kindle支持RTF,DOC,TXT和其他常见文本格式,它会在内部将它们转换为MobiPocket文件,以便于阅读。做一些笔记。然后将您刚发送到kindle的同一文档转换为PDF格式,例如通过在Mac OS X中使用print to PDF功能。确保文件名保持不变。在Skim中打开相同的PDF并运行脚本。高亮显示和注释应出现在PDF中。

如果您对其工作原理感兴趣,请在我的博客上阅读更多内容: [不再可用]

可悲的是,他的剧本已不再可用,也没有他的博客。

你们知道这是否可行?我一直在寻找这种功能,但无法在任何地方找到它。

1 个答案:

答案 0 :(得分:1)

我正在尝试使用Python + Windows宏创建者(我是Win 7用户)。您可以使用此方法将文件另存为RTF,DOCX,PDF等。到目前为止,它已经相当有效。先注意两件事:

1-“我的剪报”文件保存文字和页面,保存页面上的位置(例如,如果您突出显示“哺乳动物”) “在第15页上它是动物,它会给你这一行和页码,但如果第15页有不止一个”哺乳动物是动物“,那么就不可能知道你突出了哪一个)。当您突出显示一个通用词,例如“animals”或“the”时,这一点特别糟糕。如果你通过按一个单词发表评论,这个单词就是你在评论所指的页面中得到的唯一信息(例如,我按下“动物”并弹出菜单,我选择了“评论”如果“动物”在第15页出现20次,我不知道我的评论中提到的是哪一个。)

2-检索页面上位置的唯一方法是分析Kindle驱动器('Documents')中* .sdr文件夹内的* .pds和* .pdt文件。我对这些文件没有任何意义。

在Python中,您可以运行一个简单的代码,从“我的剪报”中提取您想要的信息。然后,您可以使用宏创建器自动复制文本并将其注释为PDF(例如,使用Adobe Acrobat),然后保存PDF文件。

使用Adobe Acrobat进行举例说明:

说我想将所有重点保存到PDF文件中。首先,我将在Python上创建一个* .txt文件并运行一个脚本,将与高亮相关的所有字符串复制到这个新的txt文件(即突出显示的文本和页码)。以下是此类代码的示例(但首先,将“My Clippings.txt”文件复制并粘贴到IDE开始文件夹,例如:C:\ Python27):

#for python 2.7.6
with open('My Clippings.txt','r') as rf:
    with open('My Clippings Output.txt','w') as wf:
        access = 0
        bookTitle = 'Book Title'#put the book file's name as it's written in "My Clippings.txt"
        for x in rf:
            if access == 1:
                wf.write(x)
            if bookTitle in x: 
                access = 1
            #for highlights only, instead of all annotations, include this if statement:
            if (' | Added on ' in x) and ('- Your Note ' in x) or ('- Your Bookmark ' in x):
                access = 0
            if x == '==========\n':
                access = 0

然后我将创建一个宏来复制“My Clippings Output.txt”文件中的页码(它位于放置“My Clippings.txt”文件的同一个文件夹中),粘贴在Acrobat“页面窗口”中,找到(ctrl + f)页面中的字符串,然后按“突出显示”。完成!

虽然Acrobat中有一个问题,搜索/查找功能的限制为~28个字符,因此突出显示的文本不能超过该字符。我仍然不知道如何规避这个限制......我在这里提出了这个问题https://superuser.com/questions/884221/how-to-search-and-highlight-long-passages-in-a-pdf-file。作为Acrobat上28个字符限制的旁路,您可以使用“shift”+“右箭头28次”对宏进行编程,然后使用“cut”而不是“copy”。

有许多免费使用和免费的宏观创作者,只需谷歌并选择你最喜欢的那个。对于Windows,我最喜欢的是Pulover的Macro Creator。如果您对此过程有任何疑问,可以在这里发表评论或PM我。我希望你在这里发表评论,以便我可以改进答案