2008-08-10 40 views
67

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

Tôi đang suy nghĩ dọc theo các dòng mở tệp PDF, thay thế văn bản trong PDF và sau đó viết ra phiên bản đã chỉnh sửa của PDF?

Tôi đã tạo các tệp PDF có lập trình trong quá khứ bằng cách sử dụng FPDF, nhưng đôi lúc bạn thấy khó sử dụng.

+0

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

+0

Tôi đã cố gắng tìm một giải pháp nhanh chóng cho điều này là tốt. Tôi muốn có cùng một pdf cho mỗi trang sản phẩm của tôi nhưng với số sản phẩm và tên sản phẩm được thay thế trên mỗi pdf. Tôi thấy rằng việc 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 tệp pdf và tải chúng lên. Hy vọng điều này sẽ giúp ai đó. – NotJay

Trả lời

61

Nếu bạn đang tham gia một 'điền vào chỗ trống' cách tiếp cận, bạn có thể một cách chính xác vị trí văn bản bất cứ nơi nào 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 tuyến, chẳng hạn như "[chuỗi trình giữ chỗ]", nó phức tạp hơn nhiều. Mặc dù về mặt kỹ thuật, bạn có thể làm hỏng 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ẽ nguyên thủy: dòng ở đây, hình ảnh ở đây, đoạn văn bản ở đó, v.v. Nó không chứa bất kỳ thông tin nào về mục đích bố cục của những nguyên thủy đó.

+1

Điều này thật tuyệt! Tôi đã không nhận ra khung công tác Zend là miễn phí, tôi bị nhầm lẫn bởi Zend Studio vốn là sở hữu độc quyền. – Liam

+8

Chỉ cần một lời cảnh cáo cho bất cứ ai đang cố gắng sử dụng này: Nó chỉ hoạt động với các tệp PDF được tạo trong Acrobat phiên bản 4 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 các tệp PDF trở nên khó khăn hơn (hoặc nhập vào các tệp PDF khác). –

+4

Hỗ trợ PDF 1.4 [đã được thêm vào] (http://framework.zend.com/manual/en/zend.pdf.introduction.html#fn1). –

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à một tấn các 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ó một số free/open source version 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 a product which does this this, nhưng chi phí một LOT

3

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

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

Kiểm tra các doc here

2

Tài liệu mở rộng PDF/pdflib trong PHP bị thưa thớt (một cái gì đó đã được ghi chú trong bugs.php.net) - Tôi khuyên bạn sử dụng thư viện Zend.

17

Nếu bạn cần các tệp PDF thực sự đơn giản, thì Zend hoặc FPDF là tốt. Tuy nhiên tôi thấy họ khó khăn và bực dọc để làm việc cùng. Ngoài ra, do cách API hoạt động, 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 tài liệu HTML và CSS sang PDF. Bạn có thể đặt ra một khuôn mẫu giống như 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à rất phức tạp đánh dấu hoặc css đôi khi bị xáo trộn, nhưng tôi đã không tìm thấy bất cứ điều gì khác mà làm việc là tốt.

+6

-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ó không 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 PDF nhưng câu trả lời này có vẻ hữu ích hơn vì tôi có thể thấy lý do tại sao có thể dễ dàng hơn để xây dựng từ đầu trong html thay vì chỉnh sửa tệp PDF hiện có. –

3

Không biết nếu đây là một tùy chọn, 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 tải một loạt mã phụ (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 PDF, viết lên trên nó, và sau đó lưu vào một PDF mới. Trong FPDI bạn về cơ bản chèn PDF như một hình ảnh để bạn có thể đặt bất cứ điều gì bạn muốn trên 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, thì nó sẽ không hoạt động.

1

Tôi thực sự có hy vọng cao về dompdf (đó là một ý tưởng hay) nhưng vấn đề định vị là yếu tố chính trong việc sử dụng fpdf của tôi. 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ẽ khi tất cả ra ngoài.

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

Chúc may mắn.

0
<?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? –

+1

'pdf_set_info ($ pdfFile," Title "," PDFlib "); ' – user183037

+0

vẫn chưa rõ thư viện nào là –

34

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) thậm chí có thể chỉnh sửa tài liệu PDF. Mã sau đây cho thấy 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'); 
+0

Thư viện tuyệt vời - chính xác là những gì tôi đã làm sau, cảm ơn đề xuất –

+1

Điều này là tốt nhưng trong một số pdf lỗi này "Lỗi FPDF: Tài liệu này (testcopy.pdf) có thể sử dụng một kỹ thuật nén mà không được hỗ trợ bởi trình phân tích cú pháp miễn phí được giao với FPDI." 'Bất kỳ giải pháp nào cho nó? –

+0

Bạn cần chuyển đổi pdf sang phiên bản cũ hơn (pdf 1.4) hoặc sử dụng phiên bản thương mại fpdi. * Chúng tôi cung cấp thay thế trình phân tích cú pháp dưới dạng phần bổ trợ 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. * [Source] (https: //www.setasign.com/support/faq/fpdi/lỗi-tài liệu-nén-kỹ thuật-không được hỗ trợ/# câu hỏi-89) – SwissFr

Các vấn đề liên quan