共同工作:DisplayList 和 TextPage#
以下是如何将这些类一起使用的一些说明。
在某些情况下,当您退回到这里解释的详细级别时,可能会实现性能改进。
创建一个显示列表#
A DisplayList 表示一个解释后的文档页面。生成像素图、文本提取和文本搜索的方法——在幕后——都使用页面的显示列表来执行它们的任务。如果一个页面必须被渲染多次(例如,因缩放级别变化),或者如果文本搜索和文本提取都应该执行,则可以节省开销,如果显示列表只创建一次,然后用于所有其他任务。
>>> dl = page.get_displaylist() # create the display list
您还可以为许多页面创建“堆栈”上的显示列表(在一个列表中),可能在文档打开时、空闲时间或者当某个页面首次访问时存储它(例如,在GUI脚本中)。
请注意,对于接下来的所有内容,仅需要显示列表 - 相应的 页面 对象可能已被删除。
生成位图#
以下内容从一个 DisplayList 创建一个 Pixmap。参数与 Page.get_pixmap() 相同。
>>> pix = dl.get_pixmap() # create the page's pixmap
此语句的执行时间可能比Page.get_pixmap()短最多50%。
执行文本搜索#
使用上面的显示列表,我们还可以搜索文本。
为此,我们需要创建一个 TextPage。
>>> tp = dl.get_textpage() # display list from above
>>> rlist = tp.search("needle") # look up "needle" locations
>>> for r in rlist: # work with the found locations, e.g.
pix.invert_irect(r.irect) # invert colors in the rectangles
提取文本#
使用上述相同的 TextPage 对象,我们现在可以立即使用任意或所有5种文本提取方法。
注意
上面,我们创建了一个没有参数的文本页面。这导致默认参数为3(ligatures和空格被保留),因此图像不会被提取 - 见下文。
>>> txt = tp.extractText() # plain text format
>>> json = tp.extractJSON() # json format
>>> html = tp.extractHTML() # HTML format
>>> xml = tp.extractXML() # XML format
>>> xml = tp.extractXHTML() # XHTML format
进一步的性能提升#
位图#
如在页章节中解释的:
如果您不需要透明度,在创建像素图时设置 alpha = 0。这将节省25%的内存(如果是RGB,最常见的情况)并可能节省5%的执行时间(取决于GUI软件)。
文本页面#
如果您不需要与页面文本提取的图像,可以设置以下选项:
>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE
>>> tp = dl.get_textpage(flags)
这将大约节省25%的HTML、XHTML和JSON文本提取的总体执行时间,并大大减少存储量(包括内存和磁盘空间),如果文档是以图形为导向的。
但是如果您确实需要图像,请使用7作为标志的值:
>>> flags = pymupdf.TEXT_PRESERVE_LIGATURES | pymupdf.TEXT_PRESERVE_WHITESPACE | pymupdf.TEXT_PRESERVE_IMAGES