PHP에서 PDF 편집? [닫은]


81

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

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

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


나는 FPDF만을 사용했고 그것이 굉장하다고 생각합니다. 정말 멋져요.
SQLMason

나는 이것에 대한 빠른 해결책을 찾으려고 노력했습니다. 각 제품 페이지에 대해 동일한 pdf를 원했지만 각 pdf에서 제품 번호와 제품 이름을 바꿨습니다. 편지 병합 (Word 또는 OpenOffice)을 사용하는 것이 실제로 그렇게하는 가장 쉬운 방법이라는 것을 알았습니다. 그런 다음 모든 pdf를 내보내고 업로드했습니다. 이것이 누군가를 돕기를 바랍니다.
NotJay

답변:


70

'빈칸 채우기'방식을 사용하는 경우 페이지에서 원하는 위치에 텍스트를 정확하게 배치 할 수 있습니다. 따라서 누락 된 텍스트를 문서에 추가하는 것은 비교적 쉽습니다 (약간 지루하지는 않지만). 예를 들어 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 문서는 여기에 선, 여기에 이미지, 여기에 텍스트 청크 등 일련의 기본 그리기 작업으로 구성됩니다. 여기에는 해당 기본 요소의 레이아웃 의도에 대한 정보가 포함되어 있지 않습니다.


1
이것은 대단합니다! Zend 프레임 워크가 무료라는 것을 몰랐고 독점적 인 Zend Studio에 혼란 스러웠습니다.
Liam

8
이 기능을 사용하려는 모든 사용자를위한주의 사항 : Acrobat 버전 4 이하에서 만든 PDF에서만 작동합니다. 버전 4 이후 Adobe는 파일 인코딩을 시작하여 PDF에서 편집을 수행하거나 다른 PDF로 가져 오기가 더 어려워졌습니다.
Darryl Hein


2
이제 Zend 없이도 작동합니까?
William Entriken 2013

[placeholder string]과 같은 콘텐츠를 바꾸고 싶다면 어떤 해결책이 있습니까?
Starx

43

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');

1
훌륭한 라이브러리 – 추천 해 주셔서 감사합니다
james-

1
이것은 좋지만 일부 PDF에서는이 오류를 제공 "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."합니다.

pdf를 이전 버전 (pdf 1.4)으로 변환하거나 fpdi 상용 버전을 사용해야합니다. FPDI가 이러한 압축 기능을 사용하는 문서를 처리 할 수 ​​있도록 별도의 상용 애드온으로 파서 교체를 제공합니다. 출처
SwissFr

다른 웹 페이지에서 setSourceFile이 가능합니까? 예 : example.com/file.pdf?
Alex

19

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

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


9
-1 질문에 답하지 않기 때문에. 포스터는 기존 PDF를 처음부터 만들지 않고 편집하려고합니다.
Reimund

9
PDF를 편집하려고했기 때문에이 페이지에 왔지만이 답변은 기존 PDF를 편집하는 것보다 html로 처음부터 빌드하는 것이 더 쉬운 이유를 알 수 있기 때문에 더 유용 해 보입니다.
Justin Vincent

3

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

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

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

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


3

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

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

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


2

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



1

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

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

행운을 빕니다.



-1
<?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);
?>

8
어떤 라이브러리를 사용하고 있습니까?
Hugo Estrada

1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037

여전히이 라이브러리 무엇인지 분명하지
데 니즈 세 레비

나는 그가 내장 된 php pdflib 확장을 의미한다고 믿습니다. php.net/manual/en/pdf.examples-basic.php
Kostiantyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.