Как я могу скачать несколько файлов PDF, используя php - PullRequest
1 голос
/ 24 февраля 2020

, поэтому я делаю веб-сайт, который позволяет пользователю читать из листа файла xlsx и загружать все данные, каждый в отдельном PDF-файле. Вот код

    <?php

ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);

// Load Composer's autoloader
require 'vendor/autoload.php';
$file_name="";
//index.php
$message = '';
require_once __DIR__.'/../src/SimpleXLSX.php';
echo '<h1>XLSX to HTML</h1>';

if (isset($_FILES['file'])) {
    if ( $xlsx = SimpleXLSX::parse( $_FILES['file']['tmp_name'] ) ) {
        $filen=$_FILES['file']['tmp_name'];
        echo '<h2>'.$xlsx->sheetName($_POST['sh']-1).'</h2>';

        echo '<table border=1>';
        $dim = $xlsx->dimension();
        $num_cols = $dim[0];
        $num_rows = $dim[1];
        foreach ( $xlsx->rows($_POST['sh']-1) as $k => $r ) {
            //  if ($k == 0) continue; // skip first row
            echo '<tr>';
            if ($k == 0) echo '<td>' .$r[ 0 ]. '</td>';
else
            echo '<td>' .substr_replace($r[ 0 ],"",strripos($r[ 0 ]," ")). '</td>';
            echo '<td>' .$r[ 1 ]. '</td>';
            echo '<td>' .$r[ 2 ]. '</td>';
            echo '<td>' .$r[ 4 ]. '</td>';
            echo'<td>' . $r[ 5 ]. '</td>';
            echo'<td>' . $r[ 7 ]. '</td>';
            echo'<td>' .$r[ 8 ] . '</td>';
            echo '</tr>';
                if ($k != 0) // skip first row

            {$date = substr_replace($r[0], "", strripos($r[0], " "));
            $factname = $r[1];
            $name = $r[2];

            $email = $r[4];
            $phone = $r[5];
            $post = $r[7];
            $pack = $r[8];
                echo $name;

                if ($pack == '90') $garanti = '30 jours';
                else if ($pack == '190') $garanti = '6 mois';
                else if ($pack == '290') $garanti = '12 mois';
                else if ($pack == '390') $garanti = '2 ans';
                else if ($pack == '490') $garanti = '3 ans';
                else if ($pack == '590') $garanti = '5 ans';

                sendmail();
                echo'<td>telecharger</td>';}

              //  echo "telecharger";

            }
            echo '</table>';
            echo '</tr>';

        }

    echo '</table>';
}

else {
    echo SimpleXLSX::parseError();
}

if(isset($_POST['charge'])) {

    if (isset($_FILES['file'])) {
        if ($xlsx = SimpleXLSX::parse($_FILES['file']['tmp_name'])) {


            foreach ($xlsx->rows($_POST['sh']-1) as $k => $r) {
                if ($k == 0) continue; // skip first row

                $date = substr_replace($r[0], "", strripos($r[0], " "));
                $factname = $r[1];
                $name = $r[2];
                $email = $r[4];
                $phone = $r[5];
                $post = $r[7];
                $pack = $r[8];
                if ($pack == '90') $garanti = '30 jours';
                else if ($pack == '190') $garanti = '6 mois';
                else if ($pack == '290') $garanti = '12 mois';
                else if ($pack == '390') $garanti = '2 ans';
                else if ($pack == '490') $garanti = '3 ans';
                else if ($pack == '590') $garanti = '5 ans';

                sendmail();
                echo "telecharger";
            }


        }

        echo "telecharger";
    }
}

echo '<h2>Upload form</h2>

<form method="post" enctype="multipart/form-data">
*.XLSX <input type="file" name="file"  />
<input placeholder="sheet number" name="sh" type="number" required>
&nbsp;&nbsp;<input type="submit" value="Parse" />
</form>';


function sendmail()
{
    global $name;
    global $file_name;
    $file_name="";

    echo $file_name;
    include('pdf.php');
    $pdf = new Pdf();
    $file_name = "ORDER-".$name . '.pdf';

    $html_code = '<link rel="stylesheet" href="bootstrap.min.css">';
    $html_code .= fetch_customer_data();

    $pdf->load_html($html_code);
    $pdf->render();
    $file = $pdf->output();
    file_put_contents($file_name, $file);
    // $pdf->stream($file_name) ->

}

, и это PDF-файл. php file

<?php

//pdf.php

require_once 'dompdf/autoload.inc.php';

use Dompdf\Dompdf;

class Pdf extends Dompdf{

 public function __construct(){
  parent::__construct();
 }
}

?>

Я хочу загрузить все PDF-файлы одновременно, но он загружает только первый файл и показывает эту ошибку

( ! ) Fatal error: Cannot declare class Pdf, because the name is already in use in C:\wamp64\www\vucrm\xl\simplexlsx-master\examples\pdf.php on line 0

Я пытался добавить exit() в конце функции sendmail, но это только загрузка первой и не показывает никаких других данных или ошибок, может кто-нибудь помочь заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Загружаемые файлы PDF в html ссылке!

Чтобы загрузить PDF из HTML ссылки, используя PHP с помощью функции header() в php.

. Функция header() используется для отправки необработанного HTTP-заголовка. Иногда требуется, чтобы пользователю было предложено сохранить данные, такие как сгенерированный PDF.

Синтаксис :

http заголовки ответа для загрузки любого приложения

header("Content-Type: application/octet-stream");

http заголовки ответа для установки композиции и файла для загрузки

header('Content-Disposition: attachment; filename="downloaded.pdf"');

Длина запрашиваемого файла, который необходимо загрузить

header("Content-Length: " . filesize("download.pdf"));

Считывает файл и записывает его в выходной буфер .

readfile('original.pdf');

PHP коды

$file = $_GET["file"] .".pdf";  
// We will be outputting a PDF 

header('Content-Type: application/pdf');   
// It will be called downloaded.pdf 

header('Content-Disposition: attachment; filename="gfgpdf.pdf"');   
$imagpdf = file_put_contents($image, file_get_contents($file));    
echo $imagepdf; 

HTML коды

<!DOCTYPE html> 
<html> 

<head> 
    <title>Download PDF using PHP from HTML Link</title> 
</head> 

<body> 
    <center> 
        <h2 style="color:green;">Welcome To GFG</h2> 
        <p><b>Click below to download PDF</b> 
        </p> 
        <a href="gfgpdf.php?file=gfgpdf">Download PDF Now</a></center> 
</body> 

</html>

Примечание : Помните, что HTTP header() должен вызываться перед отправкой любого фактического вывода, либо обычными HTML тегами, пустыми строками в файле, либо из PHP.

Пример 1 : Сохранить файл ниже HTML как htmllinkpdf.html и сохранить файл PHP как downloadpdf.php

Приведенный выше пример иллюстрирует концепцию загрузки файла PDF с использованием ссылки HTML. Загружаемый файл представляется в формате PDF, но без какого-либо содержимого, которое показывает ошибку при открытии в любом приложении.

См. подробнее здесь

Вот еще одно простое решение в для л oop

1 голос
/ 24 февраля 2020

Вам нужно использовать require_once в верхней части скрипта, не используйте include внутри функции.

// Require this at the top of your file
require_once('pdf.php');

Проблема заключается в том, что каждый раз, когда вы вызываете функцию, она включает PDF класс снова и он может быть объявлен только один раз.

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