1

当我调用fz_run_page()MuPDF 时,仅将实际的 PDF 对象绘制到像素图上

(例如文本、图像、矢量图形等)

它不绘制页面边界框并用静态颜色(例如白色)填充它。有没有办法让 MuPDF 也绘制页面背景?

我知道我可以fz_clear_pixmap_with_value()在调用之前手动将背景设置为静态颜色fz_run_page().但是一旦旋转开始起作用,这个解决方案就会出现问题,因为在旋转的 PDF 页面的边界处会有空的未使用空间。因此,如果有可能让 MuPDF 先绘制页面的边界框,将其背景填充为静态颜色,然后在其上绘制 PDF 对象(如文本等),那将非常有帮助。

这有可能吗?

谢谢!

4

1 回答 1

1

以防万一有人遇到同样的问题。解决方案是简单地清除像素图,然后在调用 fz_run_page() 之前自己绘制白色背景。比如像这样:

dev = fz_new_draw_device(ctx, pixmap);
path = fz_new_path(ctx);
fz_moveto(ctx, path, 0, 0);
fz_lineto(ctx, path, 0, height);
fz_lineto(ctx, path, width, height);
fz_lineto(ctx, path, width, 0);
fz_closepath(ctx, path);
fz_fill_path(dev, path, 0, ctm, fz_device_gray, &constant_0, 1.0f);
fz_free_path(ctx, path);
fz_run_page(doc, page, dev, ctm, &cookie);
fz_free_device(dev);

将 fz_bound_page() 的结果用于“宽度”和“高度”是很重要的,因为它们包含页面的真实、未舍入的尺寸。

如果您不使用转换矩阵,您也可以使用 0xff 预填充像素图。

于 2013-02-21T16:37:05.680 回答