Hướng dẫn dynamic pdf php - pdf php động

Tôi đang cố tạo PDF động bằng PHP,

Tôi có thể tải pdf sau khi biểu mẫu được gửi nhưng ngay khi tôi cố gắng chỉnh sửa pdf, nó không tải được

Tôi đã rút ngắn mã để giữ thẳng về phía trước

Cấu trúc PDF

Your Name is : <>

Tập lệnh động PHP

set_time_limit(180); 

//Create Variable Names
$name = $_POST['name'];

function pdf_replace($pattern, $replacement, $string) {
    $len = strlen($pattern);
    $regexp = '';

    for($i = 0; $i <$len; $i++) {
        $regexp .= $pattern[$i];
        if($i < $len - 1) {
            $regexp .= "(\)\-{0,1}[0-9]*\(){0,1}";
        }
    }
    return ereg_replace ($regexp, $replacement, $string);
}

header('Content-Disposition: filename=cert.pdf');
header('Content-type: application/pdf');

//$date = date('F d, Y');

$filename = 'testform.pdf';
$fp = fopen($filename, 'r');
$output = fread($fp, filesize($filename));

fclose($fp);

//Replace the holders
$output = pdf_replace('<>', $name, $output);


echo $output;

Nếu tôi nhận xét đầu ra, nó sẽ tải biểu mẫu tốt nhưng ngay khi tôi cố gắng chạy chức năng để thay thế trình giữ chỗ, nó không tải được. Có ai làm điều gì đó như thế này trước đây không?

Hỏi ngày 6 tháng 8 năm 2014 lúc 19:47Aug 6, 2014 at 19:47

2

Tôi đã thử mã của bạn và tôi có thể cho rằng có một trong những lý do sau đây có thể gây ra vấn đề:


Khi bạn gọi pdf_replace () PHP sẽ trả về thông báo không dùng nữa trên hàm ereg_replace (). Điều này phá vỡ cấu trúc PDF và khiến PDF không tải được. Hàm này không được dùng để dùng PHP 5.3.0. Giải pháp đơn giản là bắt đầu sử dụng preg_replace () thay thế.

function pdf_replace($pattern, $replacement, $string) {
    return preg_replace('/'.preg_quote($pattern,'/').'/', $replacement, $string);
}

Trong trường hợp bạn không thể làm điều đó thì giải pháp là chỉnh sửa tệp php.ini và chỉnh sửa tham số error_reporting. Bạn có thể thêm "^ e_deprecated" vào giá trị cấu hình hiện tại của bạn để vô hiệu hóa các thông báo không dùng nữa. Tùy chọn khác là thêm error_Reporting () khi bắt đầu tập lệnh của bạn với giá trị phù hợp.


Tôi không thấy PDF bạn sử dụng nhưng một số trình tạo PDF mã hóa nguồn PDF. Trong trường hợp này, đó là một vấn đề để tìm văn bản ở đó. Ví dụ: tôi đã thử tính năng "In để PDF" trên Mac và tôi không thể tìm thấy văn bản đơn giản trong nguồn ở đó. Vì vậy, Fopen hoặc Ereg_Replace có thể phàn nàn về định dạng tệp sai. Trong trường hợp này, bạn nên sử dụng một số thư viện có thể làm việc với PDF một cách thông minh hơn. Tôi thích FPDF nhưng có rất nhiều thư viện như vậy.

Đã trả lời ngày 20 tháng 8 năm 2014 lúc 8:23Aug 20, 2014 at 8:23

StepashkastepashkaStepashka

2.67319 Huy hiệu bạc23 Huy hiệu đồng19 silver badges23 bronze badges

Mã của bạn dường như có hai vấn đề.

Trước hết, ereg_replace() là một chức năng không dùng nữa. Do đó, tập lệnh PHP đang ném lỗi và thông báo lỗi phá vỡ cấu trúc PDF. Thay đổi hàm thành preg_replace () và nó sẽ hoạt động., ereg_replace() is a DEPRECATED function. Due to this the php script is throwing an error and the error message breaks the pdf structure. Change the function to preg_replace() and it should work.

Thứ hai, tôi đã thử mã của bạn với dạng pdf mẫu. Có vẻ như ereg_replace () không thể xử lý một số ký tự. Trong dạng PDF mà tôi đã sử dụng, hàm này cắt ngắn chuỗi (dữ liệu dạng PDF) sau khi nó đáp ứng một ký tự cụ thể là §. Đó là lý do tại sao ngay cả khi bạn đàn áp lỗi bằng cách sử dụng error_reporting(E_ALL ^ E_DEPRECATED);, mã sẽ không hoạt động ngay cả sau đó., I tried your code with a sample pdf-form. It seems that ereg_replace() cannot process some characters. In the pdf-form that I used, this function truncates the string(the pdf-form data) after it meets a specific character namely, §. Thats why even if you suppress the the error using error_reporting(E_ALL ^ E_DEPRECATED);, the code will not work even then.

Vì vậy, tốt hơn bạn nên đi cho preg_replace();preg_replace();

>', $name, $output);


        echo $output;

?>

Đã trả lời ngày 22 tháng 8 năm 2014 lúc 14:26Aug 22, 2014 at 14:26

Hướng dẫn dynamic pdf php - pdf php động

BytestormByTestormbytestorm

1.3413 huy hiệu vàng19 Huy hiệu bạc36 Huy hiệu đồng3 gold badges19 silver badges36 bronze badges

Không thể thay thế một chuỗi văn bản trong PDF mà không có yêu cầu rất cụ thể trên tài liệu PDF ban đầu.

Một số ý kiến ​​về dự án như vậy:

Một tài liệu PDF sử dụng Byte Offsets để cho phép truy cập nhanh vào các đối tượng cụ thể trong tài liệu. Bằng cách thay đổi một chuỗi, các độ lệch này sẽ không hợp lệ và tài liệu PDF có thể được xem là bị hỏng.

Cuối cùng, hầu hết các luồng nội dung trong tài liệu PDF đều được nén. Vì vậy, chuỗi bạn đang tìm kiếm IS (có thể) trong một trong các luồng này và không phải là "hiển thị".

Một chuỗi bạn "xem" sau khi PDF được hiển thị không giống như trong nguồn PDF. Chuỗi được thay thế/mới có thể sử dụng các ký tự không có sẵn trong phông chữ được sử dụng hoặc chúng được khớp với các ký tự khác bằng một mã hóa riêng biệt.

Và nhiều điều cần xem xét hơn ...

Đã trả lời ngày 26 tháng 8 năm 2014 lúc 12:54Aug 26, 2014 at 12:54

Hướng dẫn dynamic pdf php - pdf php động

Jan Slabonjan SlabonJan Slabon

4.5612 Huy hiệu vàng11 Huy hiệu bạc26 Huy hiệu đồng2 gold badges11 silver badges26 bronze badges

Tại sao bạn không sử dụng str_replace? Vui lòng kiểm tra xem mã này có hoạt động cho bạn không (giả sử bạn có thể thấy các từ bạn muốn thay thế trong trình soạn thảo văn bản đơn giản):

// hide all errors so there will be no errors output which will break your PDF file 
error_reporting(0);
ini_set("display_errors", 0);
//Create Variable Names
$name = $_POST['name'];
$filename = 'testform.pdf';
$fp = fopen($filename, 'r');
$output = fread($fp, filesize($filename));

fclose($fp);

//Replace the holders
$output = str_replace('<>', $name, $output);

// I added the time just to avoid browser caching of the PDF file
header('Content-Disposition: filename=cert'.time().'.pdf');
header('Content-type: application/pdf');

echo $output;

Có nhiều dự án PHP để tạo các tệp PDF động bằng PHP, tại sao bạn không sử dụng chúng, tại sao bạn đang sử dụng biểu thức thông thường này ?, Có lẽ bạn sẽ có một số thiết kế mà bạn sẽ phải thêm trong tương lai vào PDF như logo bảng và logo bảng và Công cụ và cách dễ nhất là chuyển đổi HTML thành PDF. Nếu bạn đang tìm kiếm hiệu suất và gần như %100 của HTML và CSS bạn có, bạn nên sử dụng wkhtmltopdf miễn phí và dễ sử dụng nó trên máy chủ của bạn nhưng nó không phải là tệp thực thi mà bạn sẽ phải thực thi nó từ mã PHP của bạn.

http://wkhtmltopdf.org/

Một cách khác là sử dụng là pure php không giống như trước đó có thể thực thi

http://www.tcpdf.org/

Tôi đã sử dụng cả hai và thích WKHTMLTOPDF vì nó nhanh hơn và đắt nhất trong HTML và CSS

Đã trả lời ngày 26 tháng 8 năm 2014 lúc 12:41Aug 26, 2014 at 12:41

Talsibonytalsibonytalsibony

8.1385 Huy hiệu vàng46 Huy hiệu bạc44 Huy hiệu đồng5 gold badges46 silver badges44 bronze badges