summaryrefslogtreecommitdiff
path: root/src/pdf_bridge.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdf_bridge.c')
-rw-r--r--src/pdf_bridge.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/pdf_bridge.c b/src/pdf_bridge.c
index a26fea55..320919b1 100644
--- a/src/pdf_bridge.c
+++ b/src/pdf_bridge.c
@@ -234,17 +234,24 @@ int
pardes_pdf_render(
pardes_pdf_document *document,
int page_number,
+ int dpi,
+ int minimum_width,
+ int minimum_height,
int max_dimension,
pardes_pdf_pixmap *out)
{
return pardes_pdf_render_with_highlights(
- document, page_number, max_dimension, NULL, 0, out);
+ document, page_number, dpi, minimum_width, minimum_height,
+ max_dimension, NULL, 0, out);
}
int
pardes_pdf_render_with_highlights(
pardes_pdf_document *document,
int page_number,
+ int dpi,
+ int minimum_width,
+ int minimum_height,
int max_dimension,
const pardes_pdf_highlight *highlights,
size_t highlight_count,
@@ -256,12 +263,15 @@ pardes_pdf_render_with_highlights(
fz_path *path = NULL;
fz_matrix ctm;
fz_rect bounds;
+ float page_width;
+ float page_height;
float longest;
- float scale = 2.0f; /* 144 dpi; PDF user space is 72 dpi. */
+ float scale;
size_t i;
if (document == NULL || out == NULL || page_number < 0 ||
- page_number >= document->page_count || max_dimension < 1 ||
+ page_number >= document->page_count || dpi < 1 ||
+ minimum_width < 0 || minimum_height < 0 || max_dimension < 1 ||
(highlight_count != 0 && highlights == NULL) ||
highlight_count > PARDES_PDF_MAX_RESULT_QUADS)
return PARDES_PDF_ERROR;
@@ -275,9 +285,16 @@ pardes_pdf_render_with_highlights(
{
pardes_pdf_cache_page(document, page_number, 0);
bounds = document->cached_bounds;
- longest = fmaxf(bounds.x1 - bounds.x0, bounds.y1 - bounds.y0);
+ page_width = bounds.x1 - bounds.x0;
+ page_height = bounds.y1 - bounds.y0;
+ longest = fmaxf(page_width, page_height);
if (!(longest > 0.0f))
fz_throw(ctx, FZ_ERROR_FORMAT, "PDF page has empty bounds");
+ scale = (float)dpi / 72.0f;
+ if (minimum_width > 0)
+ scale = fmaxf(scale, (float)minimum_width / page_width);
+ if (minimum_height > 0)
+ scale = fmaxf(scale, (float)minimum_height / page_height);
if (longest * scale > (float)max_dimension)
scale = (float)max_dimension / longest;
/*