强制MuPDF也绘制页面背景

时间:2013-02-15 21:55:29

标签: c pdf 2d mupdf

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

(例如文字,图片,矢量图形等)

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

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

这有可能吗?

谢谢!

1 个答案:

答案 0 :(得分: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()的结果用于“width”和“height”非常重要,因为它们包含页面的真实,未包围的维度。

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