development

PHP에서 PDF 편집?

big-blog 2020. 10. 12. 07:51
반응형

PHP에서 PDF 편집?


PHP에서 PDF를 편집하는 좋은 방법을 아는 사람이 있습니까? 바람직하게는 오픈 소스 / 라이선스 비용이없는 방법. :)

PDF 파일을 열고 PDF의 텍스트를 대체 한 다음 수정 된 버전의 PDF를 작성하는 과정을 생각하고 있습니까?

나는 과거에 FPDF를 사용하여 프로그래밍 방식으로 PDF 파일을 만들었지 만 때때로 조금 다루기 힘들다는 것을 알았습니다.


'빈칸 채우기'방식을 사용하는 경우 페이지에서 원하는 위치에 텍스트를 정확하게 배치 할 수 있습니다. 따라서 문서에 누락 된 텍스트를 추가하는 것은 비교적 쉽습니다 (약간 지루하지는 않지만). 예를 들어 Zend Framework의 경우 :

<?php
require_once 'Zend/Pdf.php';

$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');

"[자리 표시 자 문자열]"과 같은 인라인 콘텐츠를 바꾸려는 경우 훨씬 더 복잡해집니다. 기술적으로는 가능하지만 페이지의 레이아웃을 엉망으로 만들 수 있습니다.

PDF 문서는 여기에 선, 여기에 이미지, 여기에 텍스트 청크 등 일련의 기본 그리기 작업으로 구성됩니다. 여기에는 해당 기본 요소의 레이아웃 의도에 대한 정보가 포함되어 있지 않습니다.


PDF 문서를 작성하는 데 사용하기 쉬운 무료 PDF 클래스가 있습니다. FPDF 라고 합니다. FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ) 와 결합하여 PDF 문서를 편집하는 것도 가능합니다. 다음 코드는 FPDF 및 FPDI를 사용하여 기존 상품권에 사용자 데이터를 채우는 방법을 보여줍니다.

require_once('fpdf.php'); 
require_once('fpdi.php'); 
$pdf = new FPDI();

$pdf->AddPage(); 

$pdf->setSourceFile('gift_coupon.pdf'); 
// import page 1 
$tplIdx = $this->pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$this->pdf->SetFont('Arial', '', '13'); 
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');

정말 간단한 PDF가 필요한 경우 Zend 또는 FPDF 가 좋습니다. 그러나 나는 그들과 함께 일하기가 어렵고 좌절감을 느낍니다. 또한 API가 작동하는 방식 때문에 프레젠테이션에서 비즈니스 논리에서 콘텐츠를 분리하는 좋은 방법이 없습니다.

따라서 HTML과 CSS를 자동으로 PDF 문서로 변환 하는 dompdf를 사용 합니다. HTML 페이지와 마찬가지로 템플릿을 레이아웃하고 표준 HTML 구문을 사용할 수 있습니다. 외부 CSS 파일을 포함 할 수도 있습니다. 라이브러리는 완벽하지 않고 매우 복잡한 마크 업이나 CSS가 때때로 엉망이되지만 잘 작동하는 다른 것을 찾지 못했습니다.


Zend Framework는 기존 PDF 파일을로드하고 편집 할 수 있습니다. 수정도 지원한다고 생각합니다.

프로젝트에서 문서를 만드는 데 사용하고 훌륭하게 작동합니다. 그래도 편집 한 적이 없습니다.

여기 에서 문서를 확인 하세요.


이것이 옵션인지는 모르지만 Zend의 pdf 라이브러리와 매우 유사하게 작동하지만 추가 코드 (zend 프레임 워크)를로드 할 필요는 없습니다. FPDF를 확장합니다.

http://www.setasign.de/products/pdf-php-solutions/fpdi/

여기서 기본적으로 동일한 작업을 수행 할 수 있습니다. PDF를로드하고 그 위에 쓴 다음 새 PDF로 저장합니다. FPDI에서는 기본적으로 PDF를 이미지로 삽입하여 원하는 것을 그 위에 놓을 수 있습니다.

그러나 이것은 FPDF를 사용하므로 사용하지 않으려면 작동하지 않습니다.


PHP의 PDF / pdflib 확장 문서는 드물다 (bugs.php.net에 언급 된 내용)-Zend 라이브러리를 사용하는 것이 좋습니다.


Tcpdf는 또한 php http://www.tcpdf.org/ 에서 pdf를 생성하기위한 좋은 라이브러리입니다 .


나는 정말로 dompdf에 대한 높은 기대를 가지고 있었지만 (멋진 아이디어이다), 포지셔닝 문제는 fpdf를 사용하는 주요 요인입니다. 모든 요소를 ​​설정해야하기 때문에 지루하지만; 모두 나가면 강력합니다.

문서의 작업 영역 아래에 이미지를 놓아 레이아웃을 위에 배치합니다. 열에 대해서도 항상 충분했습니다 (PHP 문자열 계산이 약간 필요하지만 너무 끔찍한 것은 없습니다).

행운을 빕니다.


pdflib사용하여 Rails 앱에서 PDF 파일을 생성합니다. PHP와 다른 언어에 대한 바인딩이 있습니다.

우리는 상용 버전을 사용하지만 몇 가지 제한 이있는 무료 / 오픈 소스 버전 도 있습니다 .

불행히도 이것은 PDF 생성만을 허용합니다.

기존 파일을 열고 '편집'하려는 경우 pdflib는이를 수행 하는 제품을 제공 하지만 비용이 많이 듭니다.


<?php

//getting new instance
$pdfFile = new_pdf();

PDF_open_file($pdfFile, " ");

//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");

//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);

//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
    PDF_setfont($pdfFile, $font, 12);
} else {
    echo ("Font Not Found!");
    PDF_end_page($pdfFile);
    PDF_close($pdfFile);
    PDF_delete($pdfFile);
    exit();
}

//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);

//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get  the len to tell the browser about it
$pdflen = strlen($pdfFile);

//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>

참고 URL : https://stackoverflow.com/questions/7364/pdf-editing-in-php

반응형