Skip to content

Instantly share code, notes, and snippets.

@benshimmin
Created November 16, 2012 16:03
Show Gist options
  • Select an option

  • Save benshimmin/4088493 to your computer and use it in GitHub Desktop.

Select an option

Save benshimmin/4088493 to your computer and use it in GitHub Desktop.
Scale to fit and centre-align an image with FPDF
<?php
/* Caveat: I'm not a PHP programmer, so this may or may
* not be the most idiomatic code...
*
* FPDF is a free PHP library for creating PDFs:
* http://www.fpdf.org/
*/
require("fpdf.php");
class PDF extends FPDF {
const DPI = 96;
const MM_IN_INCH = 25.4;
const A4_HEIGHT = 297;
const A4_WIDTH = 210;
// tweak these values (in pixels)
const MAX_WIDTH = 800;
const MAX_HEIGHT = 500;
function pixelsToMM($val) {
return $val * self::MM_IN_INCH / self::DPI;
}
function resizeToFit($imgFilename) {
list($width, $height) = getimagesize($imgFilename);
$widthScale = self::MAX_WIDTH / $width;
$heightScale = self::MAX_HEIGHT / $height;
$scale = min($widthScale, $heightScale);
return array(
round($this->pixelsToMM($scale * $width)),
round($this->pixelsToMM($scale * $height))
);
}
function centreImage($img) {
list($width, $height) = $this->resizeToFit($img);
// you will probably want to swap the width/height
// around depending on the page's orientation
$this->Image(
$img, (self::A4_HEIGHT - $width) / 2,
(self::A4_WIDTH - $height) / 2,
$width,
$height
);
}
}
// usage:
$pdf = new PDF();
$pdf->AddPage("L");
$pdf->centreImage("path/to/my/image.jpg");
$pdf->Output();
?>
@gabs086
Copy link
Copy Markdown

gabs086 commented Feb 18, 2021

Thank you so much for this!!! I'm finding this kind of solution for weeks now. Really made my day. Thank you

@mouss340
Copy link
Copy Markdown

Thank you benshimmin and other contributors, great job !

@stone-4
Copy link
Copy Markdown

stone-4 commented Dec 31, 2022

Thanks a lot! Its works, but just one detail... if the image has a small width, with a long height, the image overflows from the top and bottom of the PDF sheet.

@hamzahzu
Copy link
Copy Markdown

Thankyou thomasdesmoulin its works for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment