Chỉnh sửa PDF trong PHP? [đóng cửa]


81

Có ai biết về một phương pháp tốt để chỉnh sửa PDF trong PHP không? Tốt hơn là các phương pháp mã nguồn mở / không tốn giấy phép. :)

Tôi đang nghĩ đến việc mở một tệp PDF, thay thế văn bản trong PDF và sau đó viết ra phiên bản PDF đã sửa đổi?

Trước đây, tôi đã tạo các tệp PDF theo chương trình bằng cách sử dụng FPDF, nhưng đôi khi thấy nó hơi khó sử dụng.


Tôi chỉ sử dụng FPDF và nghĩ rằng nó thật tuyệt vời. Giống như thực sự tuyệt vời.
SQLMason

Tôi cũng đang cố gắng tìm ra một giải pháp nhanh chóng cho vấn đề này. Tôi muốn có cùng một bản pdf cho mỗi trang sản phẩm của mình nhưng với số sản phẩm và tên sản phẩm được thay thế trên mỗi bản pdf. Tôi thấy rằng sử dụng phối thư (Word hoặc OpenOffice) thực sự là cách dễ nhất để làm như vậy. Sau đó, tôi xuất tất cả các pdf và tải chúng lên. Hy vọng điều này sẽ giúp ai đó.
NotJay

Câu trả lời:


70

Nếu bạn đang thực hiện phương pháp 'điền vào chỗ trống', bạn có thể định vị chính xác văn bản ở bất kỳ đâu bạn muốn trên trang. Vì vậy, nó tương đối dễ dàng (nếu không phải là một chút tẻ nhạt) để thêm văn bản còn thiếu vào tài liệu. Ví dụ với 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');

Nếu bạn đang cố gắng thay thế nội dung nội dòng, chẳng hạn như "[chuỗi giữ chỗ]", thì nội dung này phức tạp hơn nhiều. Mặc dù về mặt kỹ thuật có thể làm được nhưng bạn có thể sẽ làm rối bố cục của trang.

Tài liệu PDF bao gồm một tập hợp các thao tác vẽ sơ khai: dòng ở đây, hình ảnh ở đây, đoạn văn bản ở đó, v.v.


1
Điều đó thật tuyệt! Tôi đã không nhận ra Zend Framework là miễn phí, tôi đã bối rối bởi Zend Studio là độc quyền.
Liam

8
Chỉ một lời cảnh báo cho bất kỳ ai đang cố gắng sử dụng điều này: Nó chỉ hoạt động với các tệp PDF được tạo trong Acrobat phiên bản 4 trở về trước. Sau phiên bản 4, Adobe bắt đầu mã hóa các tệp khiến việc chỉnh sửa trên PDF (hoặc nhập vào các tệp PDF khác) khó hơn.
Darryl Hein


2
Bây giờ điều này có hoạt động mà không có Zend?
William Entriken

Bất kỳ giải pháp nào nếu tôi muốn thay thế nội dung như [chuỗi giữ chỗ]?
Starx

42

Có một lớp PDF miễn phí và dễ sử dụng để tạo tài liệu PDF. Nó được gọi là FPDF . Kết hợp với FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ), bạn thậm chí có thể chỉnh sửa tài liệu PDF. Đoạn mã sau đây cho biết cách sử dụng FPDF và FPDI để điền vào phiếu quà tặng hiện có với dữ liệu người dùng.

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
Tuyệt vời thư viện - là chính xác những gì tôi đã sau, nhờ sự giới thiệu
james-geldart

1
Điều này là tốt nhưng trong một số pdf nó cho lỗi này. "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."Bất kỳ giải pháp cho nó?

Bạn cần chuyển đổi pdf của mình sang phiên bản cũ hơn (pdf 1.4) hoặc sử dụng ấn bản thương mại fpdi. Chúng tôi cung cấp sự thay thế trình phân tích cú pháp dưới dạng một addon thương mại riêng biệt, cho phép FPDI xử lý các tài liệu sử dụng các tính năng nén này. nguồn
SwissFr

Có thể setSourceFile từ một trang web khác không? Ví dụ: example.com/file.pdf?
Alex

19

Nếu bạn cần các tệp PDF thực sự đơn giản, thì Zend hoặc FPDF đều ổn. Tuy nhiên, tôi thấy họ khó khăn và bực bội khi làm việc cùng. Ngoài ra, do cách thức hoạt động của API, không có cách nào tốt để tách nội dung khỏi bản trình bày khỏi logic nghiệp vụ.

Vì lý do đó, tôi sử dụng dompdf , tự động chuyển đổi HTML và CSS sang tài liệu PDF. Bạn có thể tạo một mẫu giống như cách bạn làm cho một trang HTML và sử dụng cú pháp HTML chuẩn. Bạn thậm chí có thể bao gồm một tệp CSS bên ngoài. Thư viện không hoàn hảo và đánh dấu rất phức tạp hoặc css đôi khi bị xáo trộn, nhưng tôi không tìm thấy bất kỳ thứ gì khác hoạt động tốt.


9
-1 Vì nó không trả lời câu hỏi. Người đăng muốn chỉnh sửa các tệp PDF hiện có mà không phải tạo chúng từ đầu.
Reimund

9
Tôi đến trang này vì tôi đang tìm cách chỉnh sửa một tệp PDF nhưng câu trả lời này có vẻ hữu ích hơn cho tôi vì tôi có thể hiểu tại sao có thể dễ dàng tạo lại từ đầu trong html hơn là chỉnh sửa một tệp PDF hiện có.
Justin Vincent

3

Không biết đây có phải là một tùy chọn hay không, nhưng nó sẽ hoạt động rất giống với thư viện pdf của Zend, nhưng bạn không cần phải tải thêm một loạt mã (khung công tác zend). Nó chỉ mở rộng FPDF.

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

Ở đây về cơ bản bạn có thể làm điều tương tự. Tải tệp PDF, ghi đè lên, sau đó lưu vào tệp PDF mới. Trong FPDI về cơ bản, bạn chèn tệp PDF dưới dạng hình ảnh để bạn có thể đặt bất kỳ thứ gì bạn muốn lên đó.

Nhưng một lần nữa, điều này sử dụng FPDF, vì vậy nếu bạn không muốn sử dụng nó, thì nó sẽ không hoạt động.


3

Zend Framework có thể tải và chỉnh sửa các tệp PDF hiện có. Tôi nghĩ rằng nó cũng hỗ trợ các bản sửa đổi.

Tôi sử dụng nó để tạo tài liệu trong một dự án và nó hoạt động rất tốt. Không bao giờ chỉnh sửa một mặc dù.

Kiểm tra tài liệu ở đây


2

Tài liệu về phần mở rộng PDF / pdflib trong PHP khá thưa thớt (điều gì đó đã được lưu ý trong bug.php.net) - Tôi khuyên bạn nên sử dụng thư viện Zend.



1

Tôi thực sự rất hy vọng vào dompdf (đó là một ý tưởng hay) nhưng vấn đề định vị là một yếu tố chính trong việc tôi sử dụng fpdf. Mặc dù nó là tẻ nhạt vì mọi yếu tố phải được thiết lập; nó mạnh mẽ như tất cả đều thoát ra.

Tôi đặt một hình ảnh bên dưới không gian làm việc của mình trong tài liệu để đặt bố cục của tôi lên trên cho vừa vặn. Nó luôn đủ ngay cả đối với các cột (yêu cầu một chút tính toán chuỗi php, nhưng không có gì quá khủng khiếp).

Chúc may mắn.


0

Chúng tôi sử dụng pdflib để tạo tệp PDF từ ứng dụng đường ray của chúng tôi. Nó có các ràng buộc cho PHP và rất nhiều ngôn ngữ khác.

Chúng tôi sử dụng phiên bản thương mại, nhưng chúng cũng có phiên bản mã nguồn mở / miễn phí có một số hạn chế.

Thật không may, điều này chỉ cho phép tạo tệp PDF.

Nếu bạn muốn mở và 'chỉnh sửa' tập tin hiện có, pdflib tôi cung cấp một sản phẩm mà thực hiện điều này này , nhưng chi phí một LOT


-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
Bạn đang sử dụng thư viện nào?
Hugo Estrada

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

vẫn chưa rõ đây là thư viện nào
Deniz Celebi

Tôi tin rằng anh ấy có ý định mở rộng pdflib php sẵn có. php.net/manual/en/pdf.examples-basic.php
Kostiantyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.