gpt4 book ai didi

cairo - cairo 可以加载 PDF 吗?

转载 作者:行者123 更新时间:2023-12-02 20:33:31 25 4
gpt4 key购买 nike

这听起来很简单,但我找不到将 PDF 加载到开罗的方法。我希望能够以与 cairo.ImageSurface.create_from_png 相同的方式执行 cairo.PDFSurface.create_from_pdf (是的,我正在使用 Python 绑定(bind),但这都不在这里也不在那里)。

documentation似乎没有给出任何提示。

最佳答案

不,cairo 无法阅读 PDF。但是,poppler 可以加载 PDF 并将其绘制到 cairo 上下文中 - http://poppler.freedesktop.org/

(哦,create_from_png() 是 cairo 玩具 API 的一部分。它可以工作,但建议您使用一些“真正的”API,它可以做更多的事情,而不仅仅是加载 PNG)

渲染 PDF 并将其放入 pycairo ImageSurface 的示例代码:

import io
from pathlib import Path

import cairo
import poppler
from PIL import Image

filepath = Path('test.pdf')
document = poppler.load_from_file(filepath)

renderer = poppler.PageRenderer()

# Render first page and convert to image buffer
page = document.create_page(0)
image = renderer.render_page(page, xres=72, yres=72)
buf = io.BytesIO(image.data).getbuffer()

if False: # for debugging
pil_img = Image.frombytes('RGBA', (image.width, image.height),
image.data, 'raw', str(image.format))
pil_img.save('test.png')

# Use page dimensions to create cairo surface
rect = page.page_rect()
width = int(rect.width)
height = int(rect.height)
#print(f'bytes used per pixel: {len(buf)/(width*height)}')

surface = cairo.ImageSurface.create_for_data(buf, cairo.FORMAT_ARGB32, width, height)

生成的surface可用作Context.set_source_surface()的输入以绘制到现有的PDFSurface上。如果生成的 PDF 显示颗粒状图像,将 xresyres 增加 72 倍可能会有所帮助,但这需要在绘制之前缩小尺寸。

关于cairo - cairo 可以加载 PDF 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com