问题
I am working with fpdf to convert html to pdf . I have the following html in new.html .
<title></title>
<p><img alt="" height="364" src="http://10.11.201.93:81/webdocc/uploaded/tes3.jpg" width="496" /><img alt="" height="470" src="http://10.11.201.93:81/webdocc/uploaded/tes4.jpg" width="641" /></p>
The code to convert html to pdf is as following :
<?php
require('html2fpdf.php');
$pdf=new HTML2FPDF();
$pdf->AddPage();
$fp = fopen("new.html","r");
$strContent = fread($fp, filesize("new.html"));
fclose($fp);
$pdf->WriteHTML($strContent);
$pdf->Output("new.pdf");
echo "PDF file is generated successfully!";
?>
But when I run this code , I am getting the following error .
FPDF error: Not a JPEG file: http://10.11.201.93:81/webdocc/uploaded/tes3.jpg
On the following html code , I am getting error "Alpha channel not supported" .
<h1 id="sample_title"><img alt="" src="http://10.11.201.84/document-editor/uploaded/applet.PNG" style="width: 514px; height: 204px;" /></h1>
How can I remove this errors ? Please help me .
回答1:
I also faced the same problem much time then I started to read all code of FPDF. I got my solution by changing some line fpdf.php. FPDF.php is core file in FPDF Library. So keep backup of this file before any change.
In this file I just searched
Not a JPEG file
then i comment out this line and set a default value
//$this->Error('Not a JPEG file: '.$file);
$colspace ="DeviceRGB";
After this, my PDF going generate. Note that in my case Image path was valid and i was upload image on S3 using base64 Decode also Croping too. so that maybe my image going working wrong. but it was being open on the browser. So after two change on fpdf.php. I got my solution.
Another thing you have to check is the image path is valid or not. in pdf file i am using
$pdf->Image($file,12,12,30,30);
回答2:
For "Not a JPEG file": Your best bet here is to re-export the image file. Just open it up in Gimp, Photo Shop, etc and re-export as a jpeg. Every time I've had that come up, I've just re-exported with Gimp and it fixed whatever FPDF thought was the non-jpeg part of the image.
For "Alpha channel not supported": This is because FPDF does NOT support the Alpha channel. I believe it does support Index transparency so you can re-save the image (again Gimp, Photo Shop, etc) with the alpha channel off and Index transparency on.
You may also want to checkout DomPDF it is a HTML TO PDF converter that does support the alpha channel. If it is a large PDF you're generating (many pages, images, etc) you may need to increase the execution time.
One more thing you can check out too, is a fan made support for Alpha in FPDF Alpha Channels / Masks
回答3:
Have found that constructing slideshows with Paintbrush on a MacBook Pro for years have sometimes been saving what "file jpeg_filename.jpg" determines is a PNG, as a JPEG, which is not the end of the world as far as the browsers go rendering this. Within FPDF's fpdf.php I fixed my own shortcomings that were resulting in "FPDF Error: Not a JPEG file" via the kludgy "if($a[2]==3) { return $this->_parsepng($file); }" additional codeline below ...
function _parsejpg($file)
{
// Extract info from a JPEG file
$a = getimagesize($file);
if(!$a)
$this->Error('Missing or incorrect image file: '.$file);
if($a[2]==3) { return $this->_parsepng($file); }
if($a[2]!=2)
$this->Error('Not a JPEG file: '.' '.$a[2].' '.$file);
if(!isset($a['channels']) || $a['channels']==3)
$colspace = 'DeviceRGB';
elseif($a['channels']==4)
$colspace = 'DeviceCMYK';
else
$colspace = 'DeviceGray';
$bpc = isset($a['bits']) ? $a['bits'] : 8;
$data = file_get_contents($file);
return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
}
来源:https://stackoverflow.com/questions/41568423/fpdf-error-not-a-jpeg-file-http-10-11-201-9381-webdocc-uploaded-tes3-jpg