[PHP] come stampare un Qr-code in FPDF

maxbar

Nuovo Utente
5 Giu 2017
5
0
1
43
Buongiorno a tutti, sono nuovo di questa chat anche se la visito spesso per confrontarmi con i preziosi consigli che giornalmente pubblicate.

In ogni caso ho un quesito da porvi e che magari sapete risolvere:
Dovrei stampare con FPDF un'image, e fin qua sembra facile, ma il punto è che devo stampare un qr-code che lo estraggo a video tramite il tag <img>.

ES: <img src='qr-code/php/qr_img.php?d=testo del qr-code' width='150' height='150'>

Qualcuno di voi saprebbe come potrei salvare l'immagine per poi mandarla in stampa su FPDF?
Oppure magari avete un modo per l'output dell'immagine del qr-code che mi permette anche di inserirla in "image()" di FPDF?

Grazie mille a tutti
 

maxbar

Nuovo Utente
5 Giu 2017
5
0
1
43
Grazie mille Marino51, ho guardato ma non è specificato come fare il collegamento. Ho fatto un paio di tentativi ma sembra che
vadano in conflitto l'uno con l'altro.

Magari ci sarà una strada più diretta
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
nel file leggimi (_lisez_moi.txt) trovo,
PHP:
 - il existe également une methode de sortie spécifique pour FPDF :
    $qrcode->displayFPDF($fpdf, $x, $y, $w, $background, $color);
prova a postare un esempio che rispecchi ciò che hai sviluppato

il link che ti ho postato è presente nella pagina degli esempi del sito FPDF ......
 
Ultima modifica:

maxbar

Nuovo Utente
5 Giu 2017
5
0
1
43
ok vedendolo così penso:
Codice:
php:
$qrcode->displayFPDF($fpdf
Quindi apro la classe FPDF e la chiamo:

Codice:
php:
include("fpdf.php");
$fpdf = new FPDF();
per la rimanenza:
Codice:
php:
, $x, $y, $w, $background, $color);
dammi le coordinate $x, $y, $w ( grandezza immagine )

per il $background, e il $color, se controllo la funzione che loro inseriscono le vedo dichiarate,
ma comunque mi chiede di dichiararle:

Codice:
php:
public function displayFPDF(&$fpdf, $x, $y, $w, $background=array(255,255,255), $color=array(0,0,0))
        {
            $size = $w;
            $s = $size/$this->getQrSize();

            $fpdf->SetDrawColor($color[0], $color[1], $color[2]);
            $fpdf->SetFillColor($background[0], $background[1], $background[2]);
            
            // rectangle de fond
            if ($this->disable_border)
            {
                $s_min = 4;
                $s_max = $this->qr_size-4;
                $fpdf->Rect($x, $y, $size, $size, 'F');
            }
            else
            {
                $s_min = 0;
                $s_max = $this->qr_size;
                $fpdf->Rect($x, $y, $size, $size, 'FD');
            }
            
            $fpdf->SetFillColor($color[0], $color[1], $color[2]);
            for($j=$s_min; $j<$s_max; $j++)
                for($i=$s_min; $i<$s_max; $i++)
                    if ($this->final[$i + $j*$this->qr_size+1])
                        $fpdf->Rect($x+($i-$s_min)*$s, $y+($j-$s_min)*$s, $s, $s, 'F');
            
            return true;
        }
In ogni caso inserisco i dati come spiegati da loro in questo modo:

Codice:
php:
<?php
require_once('qrcode.class.php');
include("fpdf.php");
$fpdf = new FPDF();
$x = 100;
$y = 200;
$s = 50;
$background = array(250,250,250);
$color = array(0,0,0);
$fpdf->AddPage();
$fpdf->SetFont('Times','',12);

//dovrei inserire anche una cella per la stampa:

$pdf->Cell(40,10,'ma qua cosa ci metto?',1,1);

$qrcode = new QRcode(utf8_encode($msg), $err);
$qrcode->displayFPDF($fpdf, $x, $y, $s, $background, $color);

$fpdf->Output();

?>
L'errore è il seguente:

Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has already been output, can't send PDF file' in C:\xampp\htdocs\php\qrcode\fpdf.php:271 Stack trace: #0 C:\xampp\htdocs\php\qrcode\fpdf.php(1063): FPDF->Error('Some data has a...') #1 C:\xampp\htdocs\php\qrcode\fpdf.php(999): FPDF->_checkoutput() #2 C:\xampp\htdocs\php\qrcode\index.php(74): FPDF->Output() #3 {main} thrown in C:\xampp\htdocs\php\qrcode\fpdf.php on line 271

E' chiaro che sto capendo male io, ma
secondo voi come dovrei fare?

Grazie
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
sicuramente hai uno script che genera il pdf,
nello script, in un punto che non crea fastidio, per generare il QRcode, inserisci
PHP:
$msg = "Le site du spipu\r\nhttp://spipu.net/";
$err = 'L';
require_once('qrcode.class.php');
$qrcode = new QRcode(utf8_encode($msg), $err);
$qrcode->disableBorder();
poi dove serve il QRcode inserisci
PHP:
$qrcode->displayFPDF($pdf, 120, 60, 20);
e vedi l'effetto che fa
per me è un bijoux
ora aggiusta i parametri
 

maxbar

Nuovo Utente
5 Giu 2017
5
0
1
43
Ho provato ma non mi dice che non posso usare una classe che è inserita in FPDF...
anche perchè poi nella variabile $pdf cosa inserisco?

Poi ho dato un 'altra occhiata ed ho provato così:
PHP:
include("fpdf.php");
$pdf = new FPDF();
$msg = "Le site du spipu\r\nhttp://spipu.net/";
$err = 'L';
require_once('qrcode.class.php');
$qrcode = new QRcode(utf8_encode($msg), $err);
$qrcode->disableBorder();

$pdf->AddPage();
$pdf->SetFont('Arial','B',12);
//$pdf->Cell(40,10,$qrcode->displayFPDF($pdf, 120, 60, 20),1,1);
$qrcode->displayFPDF($pdf, 120, 60, 20);
//$pdf->Output();
In questo modo non mi da errori, ma non mi da nemmeno in stampa il QR-code inserito nel PDF.
Se attivo l'output mi da questo errore:

Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has already been output, can't send PDF file' in C:\xampp\htdocs\php\qrcode\fpdf.php:271 Stack trace: #0 C:\xampp\htdocs\php\qrcode\fpdf.php(1063): FPDF->Error('Some data has a...') #1 C:\xampp\htdocs\php\qrcode\fpdf.php(999): FPDF->_checkoutput() #2 C:\xampp\htdocs\php\qrcode\index.php(38): FPDF->Output() #3 {main} thrown in C:\xampp\htdocs\php\qrcode\fpdf.php on line 271


Non ho proprio idee...

 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
PHP:
<?php

$msg = "Le site du spipu\r\nhttp://spipu.net/";
$err = 'L';


require_once('qrcode.class.php');

$qrcode = new QRcode(utf8_encode($msg), $err);
$qrcode->disableBorder();


require_once 'FPDF\fpdf.php';

$pdf = new FPDF('P', 'mm', 'A4');
$pdf->SetMargins(1,1,1);          // margini : sinistra, alto, destra
$pdf->SetAutoPageBreak(true, 1);  // margine basso
$pdf->SetFont('Helvetica','B',16);
$pdf->AddPage();

$qrcode->displayFPDF($pdf, 120, 60, 20);

$pdf->Output();
?>
 

Allegati

maxbar

Nuovo Utente
5 Giu 2017
5
0
1
43
Eccezzionale!!!

Grazie mille Marino51

Comunque quello che dava conflitto era una riga HTML che avevo lasciato all'inizio della pagina.

In ogni caso grazie mille, sei un grande!!