diff --git a/libvips/foreign/pdfload.c b/libvips/foreign/pdfload.c index a2655994..49f211e7 100644 --- a/libvips/foreign/pdfload.c +++ b/libvips/foreign/pdfload.c @@ -297,8 +297,12 @@ vips_foreign_load_pdf_header( VipsForeignLoad *load ) poppler_page_get_size( pdf->page, &width, &height ); pdf->pages[i].left = 0; pdf->pages[i].top = top; - pdf->pages[i].width = width * pdf->scale; - pdf->pages[i].height = height * pdf->scale; + /* We do round to nearest, in the same way that vips_resize() + * does round to nearest. Without this, things like + * shrink-on-load will break. + */ + pdf->pages[i].width = VIPS_RINT( width * pdf->scale ); + pdf->pages[i].height = VIPS_RINT( height * pdf->scale ); if( pdf->pages[i].width > pdf->image.width ) pdf->image.width = pdf->pages[i].width; diff --git a/libvips/foreign/pdfload_pdfium.c b/libvips/foreign/pdfload_pdfium.c index 94f7c266..5f62d43c 100644 --- a/libvips/foreign/pdfload_pdfium.c +++ b/libvips/foreign/pdfload_pdfium.c @@ -341,10 +341,14 @@ vips_foreign_load_pdf_header( VipsForeignLoad *load ) return( -1 ); pdf->pages[i].left = 0; pdf->pages[i].top = top; - pdf->pages[i].width = - FPDF_GetPageWidth( pdf->page ) * pdf->scale; - pdf->pages[i].height = - FPDF_GetPageHeight( pdf->page ) * pdf->scale; + /* We do round to nearest, in the same way that vips_resize() + * does round to nearest. Without this, things like + * shrink-on-load will break. + */ + pdf->pages[i].width = VIPS_RINT( + FPDF_GetPageWidth( pdf->page ) * pdf->scale ); + pdf->pages[i].height = VIPS_RINT( + FPDF_GetPageHeight( pdf->page ) * pdf->scale ); if( pdf->pages[i].width > pdf->image.width ) pdf->image.width = pdf->pages[i].width;