PHP에서 PDF를 편집하는 좋은 방법을 아는 사람이 있습니까? 바람직하게는 오픈 소스 / 제로 라이선스 비용 방법. :)
PDF 파일을 열고 PDF의 텍스트를 대체 한 다음 수정 된 버전의 PDF를 작성하는 방법을 생각하고 있습니까?
나는 과거에 FPDF를 사용하여 프로그래밍 방식으로 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');
"FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."
합니다.
정말 간단한 PDF가 필요한 경우 Zend 또는 FPDF 가 좋습니다. 그러나 나는 그들과 함께 일하기가 어렵고 좌절감을 느낍니다. 또한 API가 작동하는 방식 때문에 프레젠테이션에서 비즈니스 논리와 콘텐츠를 분리하는 좋은 방법이 없습니다.
따라서 HTML과 CSS를 자동으로 PDF 문서로 변환 하는 dompdf를 사용 합니다. HTML 페이지와 마찬가지로 템플릿을 레이아웃하고 표준 HTML 구문을 사용할 수 있습니다. 외부 CSS 파일을 포함 할 수도 있습니다. 라이브러리는 완벽하지 않고 매우 복잡한 마크 업이나 CSS가 때때로 엉망이되지만 잘 작동하는 다른 것을 찾지 못했습니다.
이것이 옵션인지는 모르지만 Zend의 pdf 라이브러리와 매우 유사하게 작동하지만 추가 코드 (zend 프레임 워크)를로드 할 필요는 없습니다. FPDF를 확장합니다.
http://www.setasign.de/products/pdf-php-solutions/fpdi/
여기서 기본적으로 동일한 작업을 수행 할 수 있습니다. PDF를로드하고 그 위에 쓴 다음 새 PDF로 저장합니다. FPDI에서는 기본적으로 PDF를 이미지로 삽입하여 원하는 것을 그 위에 놓을 수 있습니다.
그러나 다시 말하지만 이것은 FPDF를 사용하므로 사용하지 않으려면 작동하지 않습니다.
Tcpdf는 또한 php http://www.tcpdf.org/ 에서 pdf를 생성하기위한 좋은 라이브러리입니다 .
나는 정말 dompdf에 대한 기대가 높았지만 (멋진 아이디어) 포지셔닝 문제는 fpdf를 사용하는 데있어 주요 요인입니다. 모든 요소를 설정해야하기 때문에 지루하지만; 모두 나가면 강력합니다.
문서의 작업 영역 아래에 이미지를 배치하여 레이아웃을 위에 배치합니다. 열에도 항상 충분했습니다 (PHP 문자열 계산이 조금 필요하지만 너무 끔찍한 것은 없습니다).
행운을 빕니다.
<?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);
?>
pdf_set_info($pdfFile, "Title", "PDFlib");