Fpdf error not a png file

I'm currently running into a very odd issue with fpdf. I found a similar question with no answer: not a PNG file in FPDF. I have an image uploaded through a browser to my file server, and then pulled

I found a crud solution that works for me but this will take little more space on your host. But you can determine which extension worked and delete the rest However its worth it.

First take the file contents and convert them to base64_encode.
Create an array of the file formats you want the file to be in «png»,»jpg»,»jpeg» and decode the base64 image looping through the file extensions. This recreates the image with three file extensions in your folder.

Use the

try{
}catch (Exception $e) {
}

to loop trough and find which image extension works and use it.
Here is my full code

$base64 = base64_encode(file_get_contents("full/domain/path/to/image"));
$f_ex = array('.png', '.jpg', '.jpeg');  //array of extensions to recreate 

$path = "path/to/new/images"; //this folder will have there images.

$i = 0;
$end = 3;

while ($i < $end) {

    $data = base64_decode($base64); //decode the image file from base64

    $filename = "unique_but_memorable_filename(eg invoice id)" . $f_ex[$i]; //$f_ex loops through the file extensions

    file_put_contents($path . $filename, $data); //we save our new images to the path above

    $i++;
}

Inside your FPDF where your image is set, we loop through the images we recreated and see which one works and stop there

try {
    $filename = "remember_unique_but_memorable_filename(eg invoice id)" . $f_ex[0];
    $logo = "your domail.com where image was stored" . '/' . $path . $filename;
    $pdf->Image($logo, 10, 17, 100, 100);

    //Put your code here to delete the other image formats.

} catch (Exception $e) {

    try {
        $filename = "remember_unique_but_memorable_filename(eg invoice id)" . $f_ex[1];
    $logo = "your domail.com where image was stored" . '/' . $path . $filename;
    $pdf->Image($logo, 10, 17, 100, 100);
    
    //Put your code here to delete the other image formats.

    } catch (Exception $e) {
        try {
            $filename = "remember_unique_but_memorable_filename(eg invoice id)" . $f_ex[2];
    $logo = "your domail.com where image was stored" . '/' . $path . $filename;
    $pdf->Image($logo, 10, 17, 100, 100);

        //Put your code here to delete the other image formats.

        } catch (Exception $e) {
            //if all the three formats fail, lets see the error
            echo 'Message: ' . $e->getMessage();

        }
    }
}

264 votes

0 answers

Get the solution ↓↓↓

I am trying to generate a pdf file from the specific image data. I am getting the error that Uncaught exception ‘Exception’ with message Uncaught exception ‘Exception’ with message ‘FPDF error: Not a PNG file: http://apollobols.com/uploads/555_img.png’
However, I have checeked that the PNG file exists there. the location to that PNG file is
Following is my code in php for FPDF

require('fpdf/fpdf.php');
define('FPDF_FONTPATH', 'font/');
SESSION_START();

//Connect to your database
include("db.php");
class PDF extends FPDF
{
// Page header
function Header()
{
    // Logo
    //$this->Image('images/gill-energy-logo.jpg',10,6,30);
    // Arial bold 15
    //$this->SetFont('Arial','B',15);
    // Move to the right
    //$this->Cell(80);
    // Title
   // $this->Cell('Showing results',0,'BOL Report');
    // Line break
    //$this->Ln(20);
}

// Page footer
function Footer()
{
    // Position at 1.5 cm from bottom
    $this->SetY(-15);
    $this->Image('images/gill-energy-logo.jpg', 1, $this->GetY(), 33.78);
    // Arial italic 8
    $this->SetFont('Arial','I',8);
    // Page number
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}


    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();
$title = 'Gill Energy BOL Report';
$pdf->SetTitle($title);
$pdf->AliasNbPages();

$result=mysql_query("select * from tbl_details where (date BETWEEN '$_SESSION[date1]' AND '$_SESSION[date2]') OR (user = '$_SESSION[username]');");

//initialize counter
//$i = 0;
//Set maximum rows per page
//$max = 25;
while($row = mysql_fetch_array($result))
{
    //If the current row is the last one, create new page and print column title
        $filename = pathinfo($row['bol_image']);
        $pdf->AddPage("P");
        $pdf->SetMargins(10, 10, 10, 10);
        $pdf->Image('http://apollobols.com/uploads/'.$row['bol_image'],5,5,0,0,strtoupper($filename[extension]));
        //echo $filename['extension']; 
}
$pdf->Output();

2022-04-15

Write your answer


Share solution ↓

Additional Information:

Date the issue was resolved:

2022-04-15

Link To Source

Link To Answer
People are also looking for solutions of the problem: illegal string offset

Didn’t find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.


Similar questions

Find the answer in similar questions on our website.

В настоящее время я сталкиваюсь с очень сложной проблемой с fpdf. Я нашел подобный вопрос без ответа: не PNG файл в FPDF. У меня есть изображение, загруженное через браузер на мой файловый сервер, а затем вложенный в отчет fpdf. Когда это изображение является png, я получаю ошибку: «Ошибка FPDF: не файл PNG». Я не получаю никаких ошибок, когда загруженное изображение является jpg. Этот вопрос, казалось, появился на ночь несколько недель назад.

Даже незнакомец, это происходит только при загрузке нового png. В отчете, который генерировался, был png. Когда я загрузил этот png из системы и повторно загрузил его, ошибки снова появились.

Вот некоторые из шагов, которые я предпринял, пытаясь устранить проблему:

  1. Я убедился, что изображение на самом деле является png (через его свойства).
  2. Ничто не изменилось с тем, как я сохранял изображения, но вот код:

    $original = $time."_".$name."_o.".$extension;
    $thumbnail = $time."_".$name."_t.".$extension;  
    include('SimpleImage.php');
    $image = new SimpleImage();
    $image->load($_FILES['file']['tmp_name']);
    $image->save($A_path."images/".$original);
    $image->resizeToHeight(200);
    $image->save($A_path."images/thumbs/".$thumbnail);
    $photo = "images/".$original;
    $thumb = "images/thumbs/".$thumbnail;
    
  3. Я проверил, не изменились ли они в PNG-формате или обновлениях FPDF, и вам не повезло.
  4. Я преобразовал jpg, который работает в png через gimp.
  5. Преобразование png в jpg через gimp, а затем загрузка jpg в систему не вызывает никаких ошибок.

WORKAROUND- Я пошел вперед и преобразовал png в jpg для сохранения, а не для повторного кодирования изображения. Спасибо за помощь.

02 окт. 2015, в 21:24

Поделиться

Источник

3 ответа

Исправлено, изменив формат изображения вручную на JPG, а затем повторив процесс.

rojoloco47
28 март 2016, в 13:09

Поделиться

Сообщение об ошибке указывает, что в первых восьми байтах файла есть что-то неправильное («подпись png»).

Используйте «od -c | head -1» для проверки первых 16 байтов. Каждый файл PNG начинается с них:

211   P   N   G  r  n 032  n        r   I   H   D   R

Если вы предпочитаете, используйте «xxd file.png | head -1» и ожидайте увидеть это:

0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR

Эти 16 байтов представляют собой PNG-подпись, а также длину и имя первого фрагмента. Первые 8 байтов — это имя формата, а также символы новой строки (linefeeds) и возврат каретки, которые предназначены для обнаружения различных ошибок передачи. Следующие 8 байтов являются началом блока IHDR, который должен быть длиной = 13, выраженной как 4-байтовое целое, а имя = «IHDR».

Подробную информацию см. В спецификации PNG.

Glenn Randers-Pehrson
03 окт. 2015, в 16:18

Поделиться

Проверьте глубину изображения. FPDF поддерживает 24-битную глубину (я не уверен в глубине 32 бит), и он не поддерживает альфа-канал. Я попытаюсь перекодировать в png с помощью ImageMagick (или paint.net под окнами).

convert input.png -depth 8 +matte output.png

deajan
02 окт. 2015, в 21:35

Поделиться

Ещё вопросы

  • 1эффективная 3D-интерполяция / аппроксимация в Scipy (Python)
  • 1заставка Android / экран загрузки
  • 0DateTime не работает в angular.js
  • 0C ++ сравнивает векторный итератор с экземпляром [closed]
  • 1Как я могу переименовать мои изображения?
  • 0MySQL условная вставка с вставкой .. выберите
  • 1React Native — измерять компонент при получении реквизита
  • 0Фонд раскрывает не распознает модальную ссылку
  • 1Хранение чрезвычайно больших массивов
  • 0Написать регулярное выражение в preg_replace
  • 1Свойство доступа к полю Java Hibernate или доступ на основе свойств
  • 1Что означает параметр `int` в` map` Python 3?
  • 1Как очистить старые вкладки и добавить новую вкладку на вкладке
  • 1второе одновременное выполнение цикла for прерывает первый
  • 1C # Многомерная разница между установкой значения
  • 0используя разрешение в маршрутах angularjs
  • 0у класса ошибки нет члена с именем — android libtilerenderer
  • 0Функция синхронизации в JavaScript
  • 1Как переименовать элемент SOAP, отвечающий в CXF?
  • 1Winforms / Devexpress / Tab Control разделение концерна / Общая раскладка кода
  • 0HTML-форма отправить в форму JavaScript
  • 0вызвать функцию через jquery и вывести результаты в div в бритве html
  • 1ОС Android и приложение
  • 0Неизвестный столбец при использовании псевдонима MySQL
  • 0Невозможно заставить Firepad работать правильно
  • 0как получить скрытое значение с той же страницы
  • 1Неверные Тензорные Значения
  • 0Директива не отображается на странице после изменения состояния, но после прямой загрузки
  • 0Обрезать длинные HTML для предварительного просмотра, не нарушая HTML-теги
  • 1d3.js — круг, добавленный к движению мыши, не виден
  • 0выравнивание текста по вертикали с помощью CSS
  • 0Невозможно установить выбранные значения в раскрывающемся списке из функции PHP
  • 0Письмо получено поздно EC2 PHP
  • 1Принудительное закрытие из-за onStop ()
  • 1Приложение Android неожиданно останавливается при сборке … Проблема с файлом XML-макета?
  • 1Listview с заголовками. SeparatedListAdapter с использованием сбоя данных базы данных
  • 0Однократная инициализация переменной в cocos2d-x
  • 1Python + Requests + Eve: отправка данных для публикации завершается с ошибкой с кодом 422
  • 0Ошибка перенаправления документа htaccess
  • 1Как динамически создать новый фрейм данных из итерации по нескольким значениям?
  • 0Как сделать Regex для href?
  • 1Как отфильтровать кадр данных Pandas в python на основе сравнения значений столбцов?
  • 1Javascript: манипулировать строкой для удаления подчеркивания и заглавной буквы после
  • 0Как установить в результате SQL отдельный запрос к одной или другим переменным?
  • 1Javascript Prime Factorization код зависает с большими числами
  • 0ng-click не работает на объектах с непрозрачностью: 1;
  • 0PHP Echo информация и ждать, чтобы удалить ее
  • 1set_printoptions для массива numpy не работает для numpy ndarray?
  • 1Как загрузить изображение, снятое с помощью камеры с Android-телефона?
  • 0Не уверен, почему этот код JQuery не будет работать

Сообщество Overcoder

Я пытаюсь создать PDF с изображением, которое также генерируется php. Звучит достаточно просто, и я уверен, что я просто напортачиваю заголовок, но я не могу найти решение здесь.

сначала я создаю PDF:

define('FPDF_FONTPATH','fonts/'); require('scpt/fpdf.php'); class PDF extends FPDF {} $pdf = new FPDF('P','in',array(8.5,11)); $pdf->SetAutoPageBreak(false,0); $pdf->SetTextColor(0,0,0); $pdf->SetDrawColor(0,0,0); $pdf->SetFont('Helvetica','',12); $pdf->Image('label.php?imgid=17',0,0,0,0,'PNG'); $pdf->Output('label.pdf','D'); 

то я генерирую PNG в label.php:

 if(isset($_GET["imgid"])) { header("Content-Type: image/png"); $im = @imagecreate(110, 20) or die("Cannot Initialize new GD image stream"); $background_color = imagecolorallocate($im, 0, 0, 0); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, "A Simple Text String", $text_color); imagepng($im); imagedestroy($im); } 

Это выведет: FPDF error: Not a PNG file:....

  • FPDF, создайте PDF с помощью структуры заголовка таблицы уровня дерева с закругленными углами
  • Как подчеркнуть текст, используя FDPF в PHP?
  • Проблема с отображением польских символов с использованием FPDF?
  • Как я могу создать Malayalam PDF с использованием TCPDF в PHP?
  • Отключить быстрый просмотр в PDF-файле

вызов label.php? imgid = 17 в браузере, однако покажет мне изображение просто отлично …

Что мне не хватает?

РЕДАКТИРОВАТЬ

В документе: Пример

 // Insert a logo in the top-left corner at 300 dpi $pdf->Image('logo.png',10,10,-300); // Insert a dynamic image from a URL $pdf->Image('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World',60,30,90,0,'PNG'); 

так что ДОЛЖНО быть в состоянии включить динамически сгенерированное изображение, не сохраняя его в первую очередь ?!

EDIT # 2

Я сделал это с библиотекой mem_image, но проблема остается в том, что это не должно вызывать ошибку IMO ?! Поэтому я оставляю этот вопрос открытым, чтобы увидеть, действительно ли что-то не так с моим сценарием, что это ошибка.

  • Как сделать таблицу, подобную этой, с помощью FPDF с помощью PHP?
  • Как создать PDF-файл из HTML с помощью php, а затем сохранить его на сервере
  • Экспорт веб-страницы в PDF с помощью FPDF
  • php — как открыть окно печати, когда файл pdf открывается на веб-странице?
  • Как Центрировать текст в FPDF?

У вас почти было это, у вас пропало всего пару вещей. Сначала вам нужен полный адрес сервера в URL-адресе для вашего вызова Image (), поэтому вместо

 $pdf->Image('label.php?imgid=17',0,0,0,0,'PNG'); 

Тебе нужно:

 $pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); 

Это устранит ошибку FPDF, с которой вы столкнулись. Затем, чтобы FPDF правильно отображал ваш результат, вам необходимо добавить вызов AddPage (), поэтому ваш сценарий генерации PDF-файлов станет следующим:

 require('scpt/fpdf.php'); $pdf = new FPDF('P','in',array(8.5,11)); $pdf->AddPage(); $pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); $pdf->Output('label.pdf','D'); 

Конечно, вам не нужны SetTextColor (), SetFont () и т. Д., Если вы включаете только одно изображение. Вам также не понадобилось определение пользовательского класса (я удалил ненужные строки).

Не забудьте заменить www.yourserver.com на соответствующий домен и путь для вашего скрипта.

Аргументом функции Image должен быть файл, а не URL-адрес или другой скрипт. Поскольку у вас уже есть свой сценарий ярлыков, самой простой работой было бы загрузить изображение в временное местоположение, а затем вызвать $ pdf-> Image () с этим временным файлом.

Эта проблема возникла с вашим именем файла. Убедитесь, что ваше имя файла передачи действителен

 function _parsepngstream($f, $file) { // Check signature if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) $this->Error('Not a PNG file: '.$file); ... } 

Вам нужно сделать только изменения, которые

 require('fpdf.php'); 

и сделать

 $pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); 

и запустите свой код …

Сначала попробуйте проверить свой URL с помощью этого кода

$ handle = fopen (» http://www.yourserver.com/label.php?imgid=17 «, «rb»);

print_r (fread ($ handle, 8192));

вы увидите, что содержится в вашем URL-адресе

**) убедитесь, что ваш URL не перенаправлен на страницу входа в систему

гораздо проще, только поставить .png в финале динамической цепочки и все ее

пример:

 $pdf->Image('http://www.yourserver.com/label.php? imgid=17.png',0,0,0,0,'PNG'); 

или

 $pdf->Image('../label.php?imgid=17.png',0,0,0,0,'PNG'); 

тип mime не распознается в URL-адресе, почему не отображается png, если это глупая ошибка, но это доказано, google делает то же самое, добавляя расширение с url & PNG

В настоящее время я сталкиваюсь с очень странной проблемой с fpdf. Я нашел похожий вопрос без ответа: не файл PNG в FPDF. У меня есть изображение, загруженное через браузер на мой файловый сервер, а затем вытащенное в отчет fpdf. Когда это изображение в формате png, я получаю сообщение об ошибке: «Ошибка FPDF: не файл PNG». Я не получаю никаких ошибок, когда загруженное изображение является JPG. Эта проблема, казалось бы, появилась в одночасье несколько недель назад.

Даже страннее, это происходит только при загрузке новых png. В отчете был png, который генерировал штраф. Когда я скачал этот png из системы и заново загрузил его, ошибки снова появились.

Вот некоторые из шагов, которые я предпринял, пытаясь устранить проблему:

  1. Я убедился, что изображение на самом деле является PNG (через его свойства).
  2. Ничего не изменилось с тем, как я сохранял изображения, но вот код:

    $original = $time."_".$name."_o.".$extension;
    $thumbnail = $time."_".$name."_t.".$extension;
    include('SimpleImage.php');
    $image = new SimpleImage();
    $image->load($_FILES['file']['tmp_name']);
    $image->save($A_path."images/".$original);
    $image->resizeToHeight(200);
    $image->save($A_path."images/thumbs/".$thumbnail);
    $photo = "images/".$original;
    $thumb = "images/thumbs/".$thumbnail;
    
  3. Я проверил, были ли какие-нибудь изменения в формате PNG или обновлениях FPDF, но не повезло.
  4. Я преобразовал JPG, который работает в PNG через GIMP.
  5. Преобразование PNG в JPG с помощью GIMP и последующей загрузки JPG в систему не генерирует никаких ошибок.

ВОЗМОЖНОЕ РЕШЕНИЕ — я пошел дальше и преобразовал png в jpg при сохранении, а не перекодировал изображение. Спасибо за помощь.

3

Решение

Исправлено, изменив формат изображения вручную на JPG, а затем повторив процесс.

2

Другие решения

Сообщение об ошибке указывает, что что-то не так с первыми восемью байтами файла («подпись png»).

Используйте «od -c | head -1» для проверки первых 16 байтов. Каждый файл PNG
начинается с этих:

211   P   N   G  r  n 032  n        r   I   H   D   R

Если вы предпочитаете, используйте «xxd file.png | head -1» и ожидайте увидеть это:

0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR

Эти 16 байтов представляют собой подпись PNG, а также длину и имя первого блока. Первые 8 байтов в формате
имя, а также новые строки (переводы строки) и возврат каретки, которые предназначены
обнаруживать различные ошибки передачи. Следующие 8 байтов являются началом
части IHDR, которая должна иметь длину = 13, выраженную как 4-байтовое целое число, а имя = «IHDR».

Увидеть Спецификация PNG для деталей.

1

Проверьте глубину изображения. FPDF поддерживает 24-битную глубину (я не уверен насчет 32-битной глубины), а также не поддерживает альфа-канал.
Я бы попробовал перекодировать в png с помощью ImageMagick (или paint.net под windows).

convert input.png -depth 8 +matte output.png

0

Проблема: необходимо преобразовать изображения PNG с кодом base64, полученные из textarea, в изображение PNG (двоичный файл с расширением .Png — image.png) с помощью PHP и сохранить изображение на сервере. Затем с помощью PHP и класса FPDF сгенерировать файл PDF (example1.pdf), вставив ранее сохраненное изображение PNG. Полученный PDF-файл также сохраняется на сервере.

Вот файл createPdfFromBase64.php, который я перевернул:

<?php
    #header('Content-Type: image/png');

    $base64 = $_POST['base64']; // Получаем base64 код PNG изображения из <textarea id="base64" name="base64"></textarea>

    #echo("$base64");

    $base64 = str_replace(' ','+',$base64); // If you want to save data that is derived from a Javascript canvas.toDataURL() function, you have to convert blanks into plusses. If you do not do that, the decoded data is corrupted.

    $data = base64_decode($base64); // Декодирует данные base64 и записывает их в переменную $data

    echo("$data");

    $filename = "image.png";

    // Пишем содержимое в файл image.png
    file_put_contents($filename, $data); // Сохраняем изображение image.png на сервере

    // Подключаем класс FPDF, для генерации PDF документа
    require('/home/u552896297/public_html/FPDF/fpdf.php');

    // Создаем FPDF объект
    $pdf= new FPDF();

    // Устанавливаем свойства документа
    $pdf->SetAuthor('Evgeniy Privalov'); // Устанавливаем автора PDF документа.
    $pdf->SetTitle('PDF generator'); // Устанавливаем title PDF документа.

    // Настройки страницы. Теперь когда главное сделано, приступим к созданию страницы.
    $pdf->AddPage('P'); // Книжная ориентация страницы
    $pdf->SetDisplayMode('real','default'); //Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.

    // Вставляем PNG картинку в верхний левый угол с разрешением в 300 точек на дюйм (300dpi)
    $pdf->Image('image.png', 10, 10, -300);

    // В конце мы выведем наш результат используя функцию Output
    $pdf->Output('example1.pdf', 'F'); // Здесь мы указали имя файла и параметр вывода, в данном случае "F". "F"-параметр сохранит результат в файл example1.pdf
?>

Файл index.html находится здесь — http://print-online.16mb.com/. Необходимо сначала нажать кнопку «Сохранить визитку» («Сохранить визитку»), а затем нажать кнопку «Конвертировать в PDF» («Конвертировать в PDF»).

Но при создании PDF выдается ошибка FPDF error: Not a PNG file: image.png

Помогите, пожалуйста, решить проблему!

UPD: файл image.png создается на сервере, но не отображается в вашем браузере! http://print-online.16mb.com/image.png

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Foxit reader как изменить цвет текста
  • Foxit phantom как изменить текст
  • Fox life смотреть сериал мистер ошибка
  • Fov ведьмак 3 как изменить
  • Fourth slave hard disk error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии