다음 Laravel 튜토리얼 칼럼에서는 Laravel-snappy를 사용하여 PDF를 내보내는 방법을 소개합니다. 필요한 친구들에게 도움이 되길 바랍니다!
머리말
포럼에 Laravel-snappy를 사용하는 방법에 대한 많은 기사가 있지만 그 중 대부분은 설치 및 기본 예제에만 중점을 두며 실제 응용 프로그램의 사용법을 설명하지 않으며 몇 가지 질문과 의심에 대답하지 않습니다. 그러니 이걸 정리해서 기록으로 남겨두자.
설치
우분투를 예로 들어보세요
1. wkhtmltopdf 설치를 실행합니다.
composer require h4cc/wkhtmltopdf-amd64 0.12.x composer require h4cc/wkhtmltoimage-amd64 0.12.x
이름에서 알 수 있듯이 wkhtmltopdf와 wkhtmltoimage가 각각 설치됩니다.
2. 우분투 실행 명령
sudo cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/ sudo cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/ //并使其可执行: sudo chmod +x /usr/local/bin/wkhtmltoimage-amd64 sudo chmod +x /usr/local/bin/wkhtmltopdf-amd64
3에 wkhtmltopdf를 복사합니다. laravel-snappy
composer require barryvdh/laravel-snappy
4를 config/app.php
Barryvdh\Snappy\ServiceProvider::class
5의 공급자 배열에 추가합니다. config/app.php
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class, 'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
6의 aliases 배열. 생성된 구성 파일
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
을 실행하면 기본 구성 파일이 config/snappy.php인 것을 볼 수 있습니다.
return [ 'pdf' => [ 'enabled' => true, 'binary' => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'), 'timeout' => false, 'options' => [], 'env' => [], ], 'image' => [ 'enabled' => true, 'binary' => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'), 'timeout' => false, 'options' => [], 'env' => [], ], ];
여기에는 기본 바이너리인 피트가 있습니다. 구성 /usr/local/bin/wkhtmltopdf 및 /usr/local/bin/wkhtmltoimage의 경우 처음 사용할 때 /usr/local/bin/wkhtmltopdf 오류 메시지가 보고되기 때문입니다. system, wkhtmltopdf 및 wkhtmltoimage의 실제 경로와 이름은 /usr/local/bin/wkhtmltopdf-amd64 및 /usr/local/bin/wkhtmltoimage-amd64입니다.
따라서 구성 정보를 다음과 같이 수정해야 합니다.
'pdf' => [ ... 'binary' => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf-amd64'), ... ], 'image' => [ ... 'binary' => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage-amd64'), ... ],
//使用方法1 $pdf = \PDF::loadView('welcome', $data); return $pdf->download('welcome.pdf'); //使用方法2 $html = '<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>'; $pdf = \PDF::loadHTML($html); return $pdf->inline();
를 사용하여 시작하세요. 많은 블로그에서는 방법 1에서 다음과 같은 오류가 보고될 것이라고 언급하지 않았습니다.
The exit status code '1' says something went wrong: stderr: "Loading pages (1/6) [> ] 0% [======> ] 10% QSslSocket: cannot resolve CRYPTO_num_locks QSslSocket: cannot resolve CRYPTO_set_id_callback QSslSocket: cannot resolve CRYPTO_set_locking_callback QSslSocket: cannot resolve sk_free QSslSocket: cannot resolve sk_num QSslSocket: cannot resolve sk_pop_free QSslSocket: cannot resolve sk_value QSslSocket: cannot resolve SSL_library_init QSslSocket: cannot resolve SSL_load_error_strings QSslSocket: cannot resolve SSLv3_client_method QSslSocket: cannot resolve SSLv23_client_method QSslSocket: cannot resolve SSLv3_server_method QSslSocket: cannot resolve SSLv23_server_method QSslSocket: cannot resolve X509_STORE_CTX_get_chain QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf QSslSocket: cannot resolve SSLeay QSslSocket: cannot call unresolved function CRYPTO_num_locks QSslSocket: cannot call unresolved function CRYPTO_set_id_callback QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback QSslSocket: cannot call unresolved function SSL_library_init QSslSocket: cannot call unresolved function SSLv23_client_method QSslSocket: cannot call unresolved function sk_num [==================> ] 31% QSslSocket: cannot call unresolved function SSLv23_client_method QSslSocket: cannot call unresolved function SSL_library_init [============================================================] 100% Counting pages (2/6) [============================================================] Object 1 of 1 Resolving links (4/6) [============================================================] Object 1 of 1 Loading headers and footers (5/6) Printing pages (6/6) [> ] Preparing [============================================================] Page 1 of 1 Done Exit with code 1 due to network error: UnknownNetworkError QSslSocket: cannot call unresolved function CRYPTO_num_locks QSslSocket: cannot call unresolved function CRYPTO_set_id_callback QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback " stdout: "" command: /usr/local/bin/wkhtmltopdf-amd64 --lowquality '/tmp/knp_snappy612c3edcdfc855.21787864.html' '/tmp/knp_snappy612c3edcdfce49.80482557.pdf'.
실행:
sudo apt-get update sudo apt install libssl1.0-dev
Repair 완료되면 환영 페이지를 내보냅니다.
save() 메소드를 사용하여 저장하면 기본적으로 /public 폴더에 저장됩니다. 파일 이름이 동일하면 두 번째 저장 시 파일이 이미 존재한다는 메시지가 표시됩니다.
위 내용은 Laravel-snappy를 사용하여 PDF를 내보내는 방법을 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!