Не удалось отобразить PDF BLOB с помощью FPDF - PullRequest
0 голосов
/ 16 ноября 2018

Я использую FPDF / FPDI для объединения PDF из базы данных с изображением в качестве заголовка PDF.Поиск решения, но решение пока не найдено, поэтому я публикую его здесь.

Вот мой viewpdf.php код:

  <?php
/**
 * Simply import all pages and different bounding boxes from different PDF documents.
 */
use setasign\Fpdi;
use setasign\fpdf;
require_once 'config/config.php';
require_once 'vendor/autoload.php';
require_once 'vendor/setasign/fpdf/fpdf.php';

error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(2);
date_default_timezone_set('UTC');
$start = microtime(true);
$pdf = new Fpdi\Fpdi();
//$pdf = new Fpdi\TcpdfFpdi('L', 'mm', 'A3');
if ($pdf instanceof \TCPDF) {
    $pdf->SetProtection(['print'], '', 'owner');
    $pdf->setPrintHeader(true);
    $pdf->Image('logo-small.png',50,5,100);
    $pdf->setPrintFooter(false);
}
$certid= $_GET['id'];
$sql="SELECT pdfblob from subject WHERE  certid = '".$certid."' ";
    $resultc = $virtual_con->query($sql);
 while($row=mysqli_fetch_assoc($resultc))   {
   header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Type:application/pdf");
    header("Content-Transfer-Encoding: binary");
    $a = (base64_decode($row["pdfblob"]));
$files = [$a];
foreach ($files as $file) {
    $pageCount = $pdf->setSourceFile($file);
    for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
        $pdf->AddPage();
        $pageId = $pdf->importPage($pageNo, '/MediaBox');
        $pageId = $pdf->importPage($pageNo, Fpdi\PdfReader\PageBoundaries::ART_BOX);
        $s = $pdf->useTemplate($pageId, 10, 10, 200);
    }
}
$file = uniqid().'.pdf';
$pdf->Output('I', 'simple.pdf');
}
//$pdf->Output('output/'.$file, 'I');
?>

Не загружается PDFиз базы данных.«Не удалось загрузить документ PDF.»

Вот мой upload.php для сохранения PDF в базе данных.Это мой PDF поврежден или что-то?Я всегда использую PDO для взаимодействия с базой данных, но эта работа реализует mysqli, поэтому мне нужно следить за процессом работы системы.

<?php
include('config/config.php');
session_start();
$certid=$_POST['certid'];
$vendorid=$_POST['vendorid'];
$sid=$_POST['subjectid'];
$target_file = $_FILES["fileToUpload"]["name"];
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
$uploadOk = 1;
if (isset($_POST['submit'])) {
    $data = mysqli_real_escape_string($virtual_con,$_FILES['fileToUpload']['tmp_name']);
    $data = file_get_contents($data);
    $data = base64_encode($data);
    $uploadOk = 1;
    if (isset($data)) {
        $sql="UPDATE `subject` SET `pdfblob`='".$data."' WHERE (`Subjectid`='".$sid."')";
        $result=mysqli_query($virtual_con,$sql);
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        $to="subjects.php?subjectid=".$sid."&certid=".$certid."&vendori=".$vendorid;
        gotoInterface($to);
    }
    else{
        echo 'Fail to upload file';
    }
}
if ($imageFileType !="pdf" ) {
    echo "Sorry, PDF is allowed.";
    $uploadOk = 0;
}
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
?>

Я надеюсь, что кто-нибудь может помочь мне поработать над этим кодом.Я пытался решить их, но все равно не удалось загрузить вывод.Я пытаюсь просмотреть PDF без использования FPDF, но все еще не работает.Мне интересно, мой код испортил BLOB во время загрузки?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Если ваш столбец в mysql pdfblob типе - blob.

Тогда я предлагаю вам изменить тип на LONGBLOB type.

Начиная с типа BLOB в MySQLхранятся только до 64 КБ.

Если все еще не работает, то Изменение в my.ini

max_allowed_packet=500M
0 голосов
/ 16 ноября 2018

Я делаю это как ответ, а не комментарий, потому что это будет слишком долго для комментария.Выполните следующие шаги, чтобы определить, где происходит ошибка.

  1. Ваша проблема МОЖЕТ быть в том, что ваша строка $data = mysqli_real_escape_string($virtual_con,$_FILES['fileToUpload']['tmp_name']); может нарушить работу файла.Попробуйте сохранить известный файл PDF в базу данных из локального хранилища и не использовать процесс загрузки файла, а затем попытайтесь декодировать его снова.Если вы можете превратить это обратно в PDF, то ваша загрузка его испортила.В противном случае перейдите к шагу 2.
  2. Кодируйте файл и сохраните вывод перед загрузкой в ​​базу данных (в текстовом редакторе).Затем запросите базу данных для этого файла и, прежде чем декодировать, вставьте эту строку в текстовый редактор и сравните две строки.Если они отличаются, вы знаете, что ваша база данных что-то делает с файлом.Если они одинаковы, я не знаю, что еще вам сказать.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...