Заставить MuPDF также рисовать фон страницы

Когда я вызываю fz_run_page(), MuPDF рисует только фактические объекты PDF на пиксельной карте.

(например, текст, изображения, векторная графика и т. д.).

Он не рисует ограничивающую рамку страницы и не заполняет ее статическим цветом (например, белым). Есть ли способ, чтобы MuPDF также рисовал фон страницы?

Я знаю, что я мог бы использовать fz_clear_pixmap_with_value(), чтобы вручную установить статический цвет фона, прежде чем я вызову fz_run_page().. Но это решение становится проблематичным, как только в игру вступает вращение, потому что тогда на границах повернутой страницы PDF будут пустые неиспользуемые места. Поэтому было бы очень полезно, если бы была возможность, чтобы MuPDF сначала рисовал ограничивающую рамку страницы, заливал ее фон статическим цветом, а затем рисовал на нем объекты PDF, такие как текст и т. Д.

Это возможно как-то?

Спасибо!


person Andreas    schedule 15.02.2013    source источник


Ответы (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.

person Andreas    schedule 21.02.2013