J'ai modifié cette question de la pile: Applying watermarks on pdf files when users try to download the files mais j'ai rencontré une erreur, même s'il y avait un commentaire qui disait comment la réparer, ce n'était pas assez élaboré.FPDI/FPDF: filigrane et impression de plusieurs pages
Voici le code:
require_once('fpdf/fpdf.php');
require_once('fpdi/fpdi.php');
class WaterMark
{
public $pdf, $file, $newFile,
$wmText = "STACKOVERFLOW";
/** $file and $newFile have to include the full path. */
public function __construct($file, $newFile)
{
$this->pdf = new FPDI();
$this->file = $file;
$this->newFile = $newFile;
}
/** $file and $newFile have to include the full path. */
public static function applyAndSpit($file, $newFile)
{
$wm = new WaterMark($file, $newFile);
if($wm->isWaterMarked())
return $wm->spitWaterMarked();
else{
$wm->doWaterMark();
return $wm->spitWaterMarked();
}
}
/** @todo Make the text nicer and add to all pages */
public function doWaterMark()
{
$currentFile = $this->file;
$newFile = $this->newFile;
$this->pdf->addPage();
$pagecount = $this->pdf->setSourceFile($currentFile);
for($i = 1; $i <= $pagecount; $i++){
$tplidx = $this->pdf->importPage($i);
$this->pdf->useTemplate($tplidx, 10, 10, 100);
// now write some text above the imported page
$this->pdf->SetFont('Arial', 'I', 40);
$this->pdf->SetTextColor(255,0,0);
$this->pdf->SetXY(25, 135);
$this->_rotate(55);
$this->pdf->Write(0, $this->wmText);
}
$this->pdf->Output($newFile, 'F');
}
public function isWaterMarked()
{
return (file_exists($this->newFile));
}
public function spitWaterMarked()
{
return readfile($this->newFile);
}
protected function _rotate($angle,$x=-1,$y=-1) {
if($x==-1)
$x=$this->pdf->x;
if($y==-1)
$y=$this->pdf->y;
if($this->pdf->angle!=0)
$this->pdf->_out('Q');
$this->pdf->angle=$angle;
if($angle!=0){
$angle*=M_PI/180;
$c=cos($angle);
$s=sin($angle);
$cx=$x*$this->pdf->k;
$cy=($this->pdf->h-$y)*$this->pdf->k;
$this->pdf->_out(sprintf(
'q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm',
$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy));
}
}
}
header('Content-type: application/pdf');
//header('Content-Disposition: attachment; filename="downloaded.pdf"');
WaterMark::applyAndSpit('C:\xampp\htdocs\tst\test0.pdf','C:\xampp\htdocs\tst\output0.pdf');
Quand je charge un fichier PDF qui a plus de 2 toutes les pages se fond dans une seule page. J'ai joint l'image dans ce post.
Merci.
@vascowhite Une idée sur la façon d'y remédier? –
Pas vraiment, mais je commencerais par vérifier ce qui est en train d'être inséré. Il semble que toute la page ait été tournée. Désolé, mais je n'ai pas beaucoup d'expérience avec fpdf. Je l'ai utilisé, mais seulement pour des choses très basiques. Si j'ai une chance de jouer avec ça plus tard aujourd'hui, je verrai ce que je peux trouver. Bonne chance. – vascowhite
Avez-vous vu cela? http://www.setasign.de/products/pdf-php-solutions/setapdf-stamper/ – vascowhite