跳转到主要内容

用于生成文件内容预览(缩略图、文本或JSON概览)的库

项目描述

https://travis-ci.org/algoo/preview-generator.svg?branch=master

介绍

preview-generator是一个用于生成预览的库 - 缩略图、PDF、文本和JSON概览,适用于所有基于文件的文件。此模块允许您访问几乎所有类型的文件的jpeg、pdf、文本、html和json预览。它还包括缓存机制,因此您不必关心预览存储。

创建此模块的目标是将由tracim管理的文件的预览构建责任委托出去。

变更日志可在单独的文件中找到。

支持的文件格式

支持的MIME类型取决于安装的构建器和依赖项。

完整的支持文件格式列表请参阅: 支持的MIME类型列表 .

Preview-generator具有以下构建器:

图像

  • 光栅图形图像格式:png, jpeg, bmp, tiff, gif, …

  • 矢量图形格式:svg

  • 相机原始格式:dng, arw, …

办公/文本文档

  • 简单文本文件:txt, json, …

  • 办公文档:odt, doc, docx

  • PDF文档

这些文件格式使用libreoffice生成。预览生成默认超时时间为60秒。可以通过将环境变量LIBREOFFICE_PROCESS_TIMEOUT设置为秒数来更改此超时时间。将此变量的值设置为0或负数将禁用超时。

存档文件

  • zip, tar, …

3D文件

  • 支持几何文件:.ply, .obj, .stl, .gltf/.glb

视频格式

  • 支持多种视频图片预览:.mp4、.flv、.webm、.ogv、.wmv等。

安装

必需依赖

在 Debian 上

apt-get install poppler-utils libfile-mimeinfo-perl libimage-exiftool-perl ghostscript libsecret-1-0 zlib1g-dev libjpeg-dev imagemagick libmagic1 webp

安装 preview_generator 而不安装外部插件

pip install preview-generator

要安装所有预览构建器的依赖项

pip install preview-generator[all]
sudo apt-get install libreoffice inkscape ffmpeg xvfb
DRAWIO_VERSION="15.7.3" && curl -LO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VERSION}/drawio-x86_64-${DRAWIO_VERSION}.AppImage && mv drawio-x86_64-${DRAWIO_VERSION}.AppImage /usr/local/bin/drawio

要检查依赖项,您可以运行

preview --check-dependencies

办公文件(LibreOffice)

apt-get install libreoffice

DTP(Scribus)

如果您需要预览 scribus .sla 文件,则需要 scribus >= 1.5。

在 Debian 上

apt-get install scribus xvfb
pip install preview-generator[scribus]

如果您的发行版中没有 scribus >=1.5,则可以使用 AppImage。

从官方网站下载最新的 AppImage https://www.scribus.net/downloads/unstable-branch/

mv /path/to/image/scribus-x.y.appimage /usr/local/bin/scribus
chmod +x /usr/local/bin/scribus

矢量图像(Inkscape)

在 Debian 上

apt-get install inkscape

矢量图像(cairosvg)

pip install preview-generator[cairosvg]

视频(ffmpeg)

在 Debian 上

apt-get install ffmpeg
pip install preview-generator[video]

RAW 图像(ufraw-batch)

在 Debian 上

pip install preview-generator[raw]

图表(DrawIO)

  1. 安装 xvfb

  2. 安装 draw-io 软件包

  3. 安装特定的 Python 依赖项

在 Debian 上

apt install xvfb
DRAWIO_VERSION="15.7.3" && curl -LO https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VERSION}/drawio-x86_64-${DRAWIO_VERSION}.AppImage && mv drawio-x86_64-${DRAWIO_VERSION}.AppImage /usr/local/bin/drawio
pip install preview-generator[drawio]

3D 文件(VTK)

警告

从 PyPI 提供的 VTK 库可能没有为最新的 Python 版本构建。您可以选择降低 Python 版本或自己构建 VTK 以使其按预期工作。

在 Debian 上

pip install preview-generator[3D]
警告

由于与未嵌入 gltf 文件相关的段错误问题,默认情况下禁用了 GLTF 支持。您必须将环境变量 GLTF_EXPERIMENTAL_SUPPORT_ENABLED 设置为 1,才能启用它。

HEIC 支持

使用 heic 支持构建 ImageMagick:[构建带有 heic 支持的 ImageMagick](doc/build_im_with_heic_support.rst)。

EPS 支持

您需要编辑 /etc/ImageMagick-*/policy.xml 中的 ImageMagick 政策。

<policy domain="coder" rights="none" pattern="ESP" />

只需将其包裹在 <!– 和 –> 之间以注释即可。

用法

以下是代码的一些示例

基本用法

最基本的使用,从 png 创建 jpeg,默认大小 256x256

from preview_generator.manager import PreviewManager

cache_path = '/tmp/preview_cache'
file_to_preview_path = '/tmp/an_image.png'

manager = PreviewManager(cache_path, create_folder= True)
path_to_preview_image = manager.get_jpeg_preview(file_to_preview_path)

以特定大小预览图像

您可以使用参数 width 和 height 选择图像的大小。

from preview_generator.manager import PreviewManager

cache_path = '/tmp/preview_cache'
file_to_preview_path = '/tmp/an_image.png'

manager = PreviewManager(cache_path, create_folder= True)
path_to_preview_image = manager.get_jpeg_preview(file_to_preview_path, width=1000, height=500)

将 pdf 或办公文档预览为 jpeg

from preview_generator.manager import PreviewManager

cache_path = '/tmp/preview_cache'
pdf_or_odt_to_preview_path = '/tmp/a_pdf.pdf'

manager = PreviewManager(cache_path, create_folder= True)
path_to_preview_image = manager.get_jpeg_preview(pdf_or_odt_to_preview_path)

默认情况下,它将生成文档第一页的预览。使用参数 page,您可以选择要预览的页面。

页面编号从 0 开始,如果您想预览文档的第二页,则参数为 1 `page=1`

from preview_generator.manager import PreviewManager

cache_path = '/tmp/preview_cache'
pdf_or_odt_to_preview_path = '/tmp/a_pdf.pdf'

manager = PreviewManager(cache_path, create_folder= True)
path_to_preview_image = manager.get_jpeg_preview(pdf_or_odt_to_preview_path, page=1)

生成 libreoffice 文本文档的 pdf 预览

from preview_generator.manager import PreviewManager
manager = PreviewManager('/tmp/cache/', create_folder= True)
pdf_file_path = manager.get_pdf_preview('/home/user/Documents/report.odt', page=2)
print('Preview created at path : ', thumbnail_file_path)

对于 PDF 中的办公类型

cache_path = '/tmp/previews'
preview_manager = PreviewManager(cache_path, create_folder= True)
path_to_preview = preview_manager.get_pdf_preview(file_path,page=page_id)

-> 将从 office 文件创建预览到 pdf 文件

参数

file_path:您要获取预览的文件的路径字符串

page:您要获取的页码。如果未指定,则返回所有页面。第一页是页面 0

返回值

str:预览文件的路径

对于图像(GIF、BMP、PNG、JPEG、PDF)到 jpeg

cache_path = '/tmp/previews'
preview_manager = PreviewManager(cache_path, create_folder= True)
path_to_preview = preview_manager.get_jpeg_preview(file_path,height=1024,width=526)

-> 将从图像文件创建预览到 1024 * 526 大小的 jpeg 文件

参数

file_path:您要获取预览的文件的路径字符串

height:预览的像素高度

width:预览的像素宽度。如果未指定,则宽度与高度相同

返回值

str:预览文件的路径

其他转换

原理与上面相同

zip 到文本或 html:将在 json 中构建文件列表到文本/html

办公到 jpeg:将构建 office 文件中的 pdf 并然后构建 jpeg。

文本到文本:主要是存储在缓存中的复制

命令行

出于测试目的,您可以使用命令行中的 preview,将预览文件作为参数提供

preview demo.pdf

或多个文件

preview *.pdf

缓存机制

命名

在缓存目录中生成的预览文件名称将是

{file_name}-[{size}-]{file_md5sum}[({page})]{extension}

file_name = 您请求预览的文件名称(无扩展名)。

大小 = 你请求的预览大小。如果是 JPEG 预览。

file_md5sum = 文件的完整路径的 MD5 值。为了避免文件名相同但位于不同目录的冲突。

page = 在 PDF 或 Office 文档预览中请求的页面。

extensions = 预览的扩展名(.jpeg 用于 JPEG,.txt 用于文本等)

示例

这些脚本

将 GIF 转换为 JPEG

import os
from preview_generator.manager import PreviewManager
current_dir = os.path.dirname(os.path.abspath(__file__)) +'/'

manager = PreviewManager(path=current_dir + 'cache')
path_to_preview = manager.get_jpeg_preview(
    file_path=current_dir + 'the_gif.gif',
    height=512,
    width=512,
)

print('Preview created at path : ', path_to_preview)

将打印

预览已创建在路径:the_gif-512x512-60dc9ef46936cc4fff2fe60bb07d4260.jpeg

将 ODT 转换为 JPEG

import os
from preview_generator.manager import PreviewManager
current_dir = os.path.dirname(os.path.abspath(__file__)) +'/'

manager = PreviewManager(path=current_dir + 'cache')
path_to_file = manager.get_jpeg_preview(
    file_path=current_dir + 'the_odt.odt',
    page=1,
    height=1024,
    width=1024,
)

print('Preview created at path : ', path_to_preview)

将打印

预览已创建在路径:the_odt-1024x1024-c8b37debbc45fa96466e5e1382f6bd2e-page1.jpeg

将 ZIP 转换为文本

import os
from preview_generator.manager import PreviewManager
current_dir = os.path.dirname(os.path.abspath(__file__)) +'/'

manager = PreviewManager(path=current_dir + 'cache')
path_to_file = manager.get_text_preview(
    file_path=current_dir + 'the_zip.zip',
)

print('Preview created at path : ', path_to_file)

将打印

预览已创建在路径:the_zip-a733739af8006558720be26c4dc5569a.txt

已知问题

InputExtensionNotFound 或 UnsupportedMimeType

预览生成器的当前 MIME 类型/文件扩展名数据库可能在系统之间有所不同,这意味着您可能无法根据您的操作系统或安装的软件获取预览。

如果您收到这些异常之一,并且您尝试的 MIME 类型/扩展名被标记为预览生成器支持,您应该:- 检查您使用的 PG 版本。- 检查您是否具有使您的构建器正常工作的正确依赖项。- 检查您使用的格式的 MIME 类型是否由 preview_generator mimetype_storage(Python 控制台)处理。

from preview_generator.extension import mimetypes_storage
mimetypes_storage.guess_all_extensions('application/vnd.openxmlformats-officedocument.wordprocessingml.document')
['.docx']
mimetypes_storage.guess_type('toto.docx', strict=False)
('application/vnd.openxmlformats-officedocument.wordprocessingml.document', None)

如果您为您的文件扩展名/MIME 类型没有得到适当的结果,您可以按以下方式解决这个问题

from preview_generator.extension import mimetypes_storage
mimetypes_storage.add_type(
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document', '.docx')

请随时提出上游补丁,为您的构建器添加适当的 MIME 类型映射。

在无头服务器上支持 3D 文件

标准的 vtk 库需要 X 服务器才能正常运行。为了使 3D 文件预览在无头服务器上工作,您有两个选择

  1. 未测试:编译/找到正确编译了标志以禁用 x 要求(具有 OSMesa 支持)的 vtk 版本

  2. 使用 x 图形缓冲区,如 xvfb

对于最后一个,此配置已知可以工作

  1. 安装包 xvfb

  2. 启动 Xvfb :99 -screen 0 1x1x16 > /dev/null 2>&1 &(注意:这使用一个非常小的 x 图形缓冲区 1x1 像素,16 色深度以限制视频使用)。

  3. 使用环境变量 DISPLAY=:99.0 运行 Python 代码

在生成大型电子表格预览过程中进程卡住

使用类似于 6.0.7.3 的 libreoffice 版本时,某些大型电子表格文件(如 xlsx)的生成需要非常长的时间,直到达到 1 分钟的超时时间。解决方案是更新 libreoffice。

在我们内部测试期间,我们发现 6.0.7.3 中无法生成的电子表格文件在 6.4.2.2 中可以正确生成。我们建议您至少使用这个版本以避免此类问题。

贡献和开发者工具包

请参阅 此处

许可证

MIT 许可。 https://open-source.org.cn/licenses/MIT

项目详情


下载文件

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

源分发

preview_generator-0.29.tar.gz (57.3 kB 查看哈希值)

上传时间

支持