2016-02-13 2 views

ответ

1
Rotate(float angle [, float x [, float y]]) 

угла: угла в градусах. x: абсцисса центра вращения. По умолчанию

значение: текущее положение. y: ордината центра вращения. По умолчанию

значение: текущее положение.

Вращение влияет на все элементы, которые печатаются после вызова метода (за исключением областей с кликами).

  • Только дисплей изменен. Не влияют методы GetX() и GetY(), а также автоматический механизм разрыва страницы.
  • Вращение не поддерживается со страницы на страницу. Каждая страница начинается с нулевого вращения.

Ниже приведен пример, который определяет служебные методы RotatedText() и RotatedImage() и использует их, чтобы напечатать текст и изображение поворачивается до 45 °.

<?php 
require('rotation.php'); 

class PDF extends PDF_Rotate 
{ 
    function RotatedText($x,$y,$txt,$angle) 
    { 
    //Text rotated around its origin 
    $this->Rotate($angle,$x,$y); 
    $this->Text($x,$y,$txt); 
    $this->Rotate(0); 
    } 

    function RotatedImage($file,$x,$y,$w,$h,$angle) 
    { 
    //Image rotated around its upper-left corner 
    $this->Rotate($angle,$x,$y); 
    $this->Image($file,$x,$y,$w,$h); 
    $this->Rotate(0); 
    } 
} 

$pdf=new PDF(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial','',20); 
$pdf->RotatedImage('circle.png',85,60,40,16,45); 
$pdf->RotatedText(100,60,'Hello!',45); 
$pdf->Output(); 
?> 

UPDATE ::

FPDI- импорт страниц из существующих PDF-документов и использовать их в качестве шаблонов в FPDF.

FPDI представляет собой набор классов PHP, облегчающих разработчикам читать страницы из существующих PDF-документов и использовать их в качестве шаблонов в FPDF, который был разработан Оливье Plathey. Помимо копии FPDF, FPDI не требует специальных расширений PHP.

<?php 
    require_once('fpdf.php'); 
    require_once('fpdi.php'); 

    $pdf = new FPDI(); 

    $pageCount = $pdf->setSourceFile("Fantastic-Speaker.pdf"); 
    $tplIdx = $pdf->importPage(1, '/MediaBox'); 

    $pdf->addPage(); 
    $pdf->useTemplate($tplIdx, 10, 10, 90); 

    $pdf->Output(); 
    ?> 

Вы можете посмотреть демо here

UPDATE 2 :: Пример кода

А вот пример кода с помощью FPDF И FPDFI вращаться внешний файл pdf.

<?php 
    require_once('fpdf/fpdf.php'); 
    require_once('fpdi/fpdi.php'); 

    $pdf =& new FPDI(); 
    $pdf->AddPage(); 

    //Set the source PDF file 
    $pagecount = $pdf->setSourceFile("existing_pdf.pdf"); 

    //Import the first page of the file 
    $tpl = $pdf->importPage(1); 

//Use this page as template 
// use the imported page and place it at point 20,30 with a width of  170 mm 
    $pdf->useTemplate($tpl, 20, 30, 170); 

#Print Hello World at the bottom of the page 

    //Select Arial italic 8 
    $pdf->SetFont('Arial','I',8); 
    $pdf->SetTextColor(0,0,0); 
    $pdf->SetXY(90, 160); 
    $pdf->Rotate(90); 

    $pdf->Write(0, "Hello World"); 

    $pdf->Output("modified_pdf.pdf", "F"); 
    ?> 
+0

Что, если вы хотите сгенерировать pdf, то я хочу, чтобы повернуть файл PDF из внешнего источника, например, у меня был файл «user-manuals.pdf», как повернуть этот PDF-источник с помощью FPDF? ? –

+0

Вы можете использовать FPDI. FPDI - это набор классов PHP, позволяющий разработчикам читать страницы из существующих PDF-документов и использовать их в качестве шаблонов в FPDF, который был разработан Оливье Плати. Помимо копии FPDF, FPDI не требует специальных расширений PHP. –

+0

Я пробую пример 2 из http://programmingbulls.com/manipulating-pdf-files-php-using-fpdf, и я получаю эту ошибку «Вызов неопределенного метода FPDI :: Rotate()» –

1

Я использую Laravel и FDPI (устанавливается через composer require setasign/fpdi).

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

A4 = 297мм х 210мм

Мой исходный код для портретной PDF-файлов:

$file = public_path() . '/pdf/file.pdf'; 
$pdf = new FPDI('P', 'mm', [210, 297]); 
$pdf->AddPage(); 
$pdf->setSourceFile($file); 
$tplIdx = $pdf->importPage(1); 
$pdf->useTemplate($tplIdx, 0, 0, 210, 297); 
$pdf->Output(); 

Теперь, чтобы добавить вращение, используя код здесь:

FPDF Повороты http://www.fpdf.org/en/script/script2.php

я сделал следующий класс:

приложение/Pdf/RFPDI.php (R для Rotate)

<?php 

namespace App\Pdf; 

use FPDI; 

class RFPDI extends FPDI 
{ 
    public $angle = 0; 

    public function Rotate($angle, $x = -1, $y = -1) 
    { 
     $this->setPrintHeader(false); 
     $this->setPrintFooter(false); 

     if ($x == -1) { 
      $x = $this->x; 
     } 

     if ($y == -1){ 
      $y = $this->y; 
     } 

     if ($this->angle != 0){ 
      $this->_out('Q'); 
     } 

     $this->angle = $angle; 

     if ($angle != 0) { 
      $angle *= M_PI/180; 
      $c = cos($angle); 
      $s = sin($angle); 
      $cx = $x*$this->k; 
      $cy = ($this->h - $y) * $this->k; 
      $this->_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) 
      ); 
     } 
    } 

    public function RotateClockWise() 
    { 
     $this->Rotate(270, (297/2), (297/2)); 
    } 

    public function RotateCounterClockWise() 
    { 
     $this->Rotate(90, (210/2), (210/2)); 
    } 

    function _endpage() 
    { 
     if ($this->angle != 0) { 
      $this->angle = 0; 
      $this->_out('Q'); 
     } 
     parent::_endpage(); 
    } 
} 

и изменил мой код, чтобы использовать класс вращения для поворота изображения в ландшафтном формате PDF:

$file = public_path() . '/pdf/file.pdf'; 
$pdf = new RFPDI('L', 'mm', [297, 210]); // use fpdi\FPDI; 
$pdf->AddPage(); 
$pdf->RotateClockWise(); 
$pdf->setSourceFile($file); 
$tplIdx = $pdf->importPage(1); 
$pdf->useTemplate($tplIdx, 0, 0, 210, 297); 
$pdf->Output(); 

Я надеюсь, что это помогает кто-то другой!