gpt4 book ai didi

c - 如何使用 Poppler 缩放

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:53 26 4
gpt4 key购买 nike

语言 C,UI库: GTK,渲染器: poppler

我是 GTK/Poppler 编程的新手,对如何使用 poppler 解决缩放问题有点困惑。当我使用下面的功能时,一切正常,除了缩放(因此 - 滚动条)。

我试图从 here 中获得灵感,但似乎我根本不了解屏幕/文档的呈现方式 :(。

PopplerPage     *ppage_P2    = NULL;
PopplerDocument *document_P2 = NULL;
cairo_surface_t *surface_P2 = NULL;

/* pdf_doc__view_page
* page - page number;
* zoom - floating nomber, 1.0 is 'no zoom'
*/
void pdf_doc__view_page (int page, float _zoom){
int err;
int w, h;
double width, height;
cairo_t *cr;

if(document_P2==NULL) /
return;
ppage_P2 = poppler_document_get_page (document_P2, page);
if(ppage_P2==NULL)
return;
poppler_page_get_size (ppage_P2, &width, &height);
w = (int) ceil(width);
h = (int) ceil(height);
if(surface_P2)
cairo_surface_destroy (surface_P2);
surface_P2 = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w*zoom_P2, h*zoom_P2);
cr = cairo_create (surface_P2);
poppler_page_render (ppage_P2, cr);
cairo_destroy (cr);
if(drawarea_P2==NULL)
return;
gtk_widget_set_size_request (drawarea_P2, w*zoom_P2, h*zoom_P2);
gtk_widget_queue_draw (drawarea_P2);
// self.SetScrollbars(u, u, (self.width*self.scale)/u, (self.height*self.scale)/u)
update_statusbar();
}

最佳答案

要拥有“滚动器”,您必须将查看器放在 GtkScrolledWindow 中,我怀疑您已经这样做了。

要让它们实际工作,一旦 poppler 渲染了页面,您可以向 poppler 询问渲染的大小,然后将查看器设置为该大小。直到那时,滚动条才知道绘图的大小:

viewer_page = poppler_document_get_page(viewer_doc, 0);
// add a test to see if page was rendered correctly

poppler_page_get_size(viewer_page, &width, &height);
gtk_widget_set_size_request(viewer.drawingarea, (int)width, (int)height);

关于c - 如何使用 Poppler 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465429/

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