Столкнулся с проблемой: нужна библиотека по работе с существующими PDF файлами. Необходимо создать мини-редактор PDF с функцией поворота и удаления страниц .
Есть сторонние консольные приложения. Но интересно реализовать это средствами PHP
Для работы с PDF средствами PHP существует библиотека FPDF (http://fpdf.org).
FPDF is a PHP class which allows to generate PDF files with pure PHP, that is to say without using the PDFlib library. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.
Для корректной работы с кириллицей я использовал UFPDF - Unicode-расширение для этой библиотеки (http://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/).
Из ответа видно что FPDI и TCPDI одно и то же.
Для поворота (источник):
function rotatePDF($file, $degrees, $page = 'all'){
$pdf = new TCPDI();
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pagecount = $pdf->setSourceFile($file);
// rotate each page
if($page=="all"){
for ($i = 1; $i <= $pagecount; $i++) {
$pageformat = array('Rotate'=>$degrees);
$tpage = $pdf->importPage($i);
$size = $pdf->getTemplateSize($tpage);
//$info = $pdf->getPageDimensions();
$orientation = $size['w'] > $size['h'] ? 'L' : 'P';
$pdf->AddPage($orientation,$pageformat);
$pdf->useTemplate($tpage);
}
}else{
$rotateFlag = 0;
for ($i = 1; $i <= $pagecount; $i++) {
if($page == $i){
$pageformat = array('Rotate'=>$degrees);
$tpage = $pdf->importPage($i);
$size = $pdf->getTemplateSize($tpage);
//$info = $pdf->getPageDimensions();
$orientation = $size['w'] > $size['h'] ? 'L' : 'P';
$pdf->AddPage($orientation,$pageformat);
$pdf->useTemplate($tpage);
$rotateFlag = 1;
}else{
if($rotateFlag==1){
// page after rotation; restore rotation
$rotateFlag = 0;
$pageformat = array('Rotate'=>0);
$tpage = $pdf->importPage($i);
$pdf->AddPage($orientation,$pageformat);
$pdf->useTemplate($tpage);
}else{
// pages before rotation and after restoring rotation
$tpage = $pdf->importPage($i);
$pdf->AddPage();
$pdf->useTemplate($tpage);
}
}
}
}
$out = realpath($file);
if(rename($file,"files/1/file.bak")){
$result = $pdf->Output($out, "F");
if($result == "" ){
echo "ok";
}
}else{
echo "Failed to rename old PDF";
die;
}
}
$file = "files/1/1.pdf";
rotatePDF($file,90); // rotating all works fine
rotatePDF($file,180,3); // rotates only page 3
Для удаления (источник):
$pdf = new FPDI();
$pageCount = $pdf->setSourceFile('document.pdf');
// Array of pages to skip -- modify this to fit your needs
$skipPages = [3,15,17,22];
// Add all pages of source to new document
for( $pageNo=1; $pageNo<=$pageCount; $pageNo++ )
{
// Skip undesired pages
if( in_array($pageNo,$skipPages) )
continue;
// Add page to the document
$templateID = $pdf->importPage($pageNo);
$pdf->getTemplateSize($templateID);
$pdf->addPage();
$pdf->useTemplate($templateID);
}
$pdf->Output();
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники