用于生成文件内容预览(缩略图、文本或JSON概览)的库
项目描述
介绍
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)
安装 xvfb
安装 draw-io 软件包
安装特定的 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 文件预览在无头服务器上工作,您有两个选择
未测试:编译/找到正确编译了标志以禁用 x 要求(具有 OSMesa 支持)的 vtk 版本
使用 x 图形缓冲区,如 xvfb
对于最后一个,此配置已知可以工作
安装包 xvfb。
启动 Xvfb :99 -screen 0 1x1x16 > /dev/null 2>&1 &(注意:这使用一个非常小的 x 图形缓冲区 1x1 像素,16 色深度以限制视频使用)。
使用环境变量 DISPLAY=:99.0 运行 Python 代码
在生成大型电子表格预览过程中进程卡住
使用类似于 6.0.7.3 的 libreoffice 版本时,某些大型电子表格文件(如 xlsx)的生成需要非常长的时间,直到达到 1 分钟的超时时间。解决方案是更新 libreoffice。
在我们内部测试期间,我们发现 6.0.7.3 中无法生成的电子表格文件在 6.4.2.2 中可以正确生成。我们建议您至少使用这个版本以避免此类问题。
贡献和开发者工具包
请参阅 此处。