Created
November 16, 2012 16:03
-
-
Save benshimmin/4088493 to your computer and use it in GitHub Desktop.
Scale to fit and centre-align an image with FPDF
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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(); | |
?> |
Thank you benshimmin and other contributors, great job !
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.
Thankyou thomasdesmoulin its works for me
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you so much for this!!! I'm finding this kind of solution for weeks now. Really made my day. Thank you