Как я могу повернуть файл PDF с помощью FPDF? Из документов я видел, он может генерировать только/создать PDF, а затем повернуть ее, а не от внешнего источника ..PDF Поворот с помощью FPDF и Laravel
ответ
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");
?>
Я использую 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();
Я надеюсь, что это помогает кто-то другой!
Что, если вы хотите сгенерировать pdf, то я хочу, чтобы повернуть файл PDF из внешнего источника, например, у меня был файл «user-manuals.pdf», как повернуть этот PDF-источник с помощью FPDF? ? –
Вы можете использовать FPDI. FPDI - это набор классов PHP, позволяющий разработчикам читать страницы из существующих PDF-документов и использовать их в качестве шаблонов в FPDF, который был разработан Оливье Плати. Помимо копии FPDF, FPDI не требует специальных расширений PHP. –
Я пробую пример 2 из http://programmingbulls.com/manipulating-pdf-files-php-using-fpdf, и я получаю эту ошибку «Вызов неопределенного метода FPDI :: Rotate()» –