PHP로 xlsx 파일을 PDF로 변환하면 Libre Office밖에 없어요.
10680 단어 PHPLibreOffice
전날 보도는 @motuo씨의 EC-CUBE4 계열(Symfony)의 트위터를Ajax(jQuery)로 Validation해 봤다.입니다.
캘린더 URL 여기 있습니다.
Joolen Advent Calendar 2019
이마
최근에는 PHP를 사용하여 xlsx 파일을 PDF로 변환하는 업무가 있습니다.
다양한 시도의 결과로 Libre Office는 안정되었다.
그 이유를 실제 바뀐 결과와 함께 쓰다.
컨디션
PDF 변환 방법 선택
원래 PHP는 xlsx를 PDF로 변환할 수 있습니까?
이 의문에서 다양한 인터넷 바다를 헤엄쳐 다음과 같은 정보를 얻었다.
1. PhpSpreadsheet과 Domapdf 등으로 전환
우선 PHP가 Excel 파일을 가지고 노는 유명한 PhpSpreadsheet을 사용해 보자.
PhpSpreadsheet은 Domapdf를 제외한 mPDF와 TCPDF도 대응하기 때문에 모두 시도합니다.
필요한 라이브러리 설치
작업 목록은 이런 느낌입니다.
.
├── composer.json
├── composer.lock
├── src
└── storage
├── excel
└── pdf
compooser에 다양한 프로그램 라이브러리 설치$ composer require phpoffice/phpspreadsheet
$ composer require dompdf/dompdf
$ composer require mpdf/mpdf
$ composer require tecnickcom/tcpdf
composer.json 확인composer.json
{
(中略)
"require": {
"phpoffice/phpspreadsheet": "^1.9",
"dompdf/dompdf": "^0.8.3",
"mpdf/mpdf": "^8.0"
"tecnickcom/tcpdf": "^6.3",
}
}
OK!!샘플 Excel 파일 생성하기
내 수중에 EXCEL이 없기 때문에 Google 전자 표로 아래의 물품 인도서를 만들었다
이 파일을
storage/excel
에 저장합니다..
├── composer.json
├── composer.lock
├── src
└── storage
├── excel
│ └── delivery-note.xlsx <- 作成したエクセルファイル
└── pdf
코드를 쓰다
src/xlsx-to-pdf.php
<?php
require __DIR__ . '/../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
$orderNote = __DIR__ . '/../storage/excel/order-note.xlsx';
echo "load: $orderNote", PHP_EOL;
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($orderNote);
// Dompdfを使用してエクスポート
outputPdf($spreadsheet, 'Dompdf');
// mPDFを使用してエクスポート
outputPdf($spreadsheet, 'Mpdf');
// TCPDFを使用してエクスポート
outputPdf($spreadsheet, 'Tcpdf');
function outputPdf($spreadsheet, $writerType) {
$writer = IOFactory::createWriter($spreadsheet, ucfirst(strtolower($writerType)));
$writer->save(__DIR__ . '/../storage/pdf/' . strtolower($writerType) . '.pdf');
}
실행 후 PDF 파일이 추가되었습니다.안을 보세요.
Dompdf
mPDF
TCPDF
TCPDF의 놀라운 화이트.
Domapdf 및 mPDF에서 디코딩 및 인쇄 설정이 발생할 수 있습니다.내 격선의 일부가 사라진 것 같아...
이후 코드가 깨지지 않도록 글꼴을 넣으려고 했으나 제대로 완성하지 못했다.
혹시 아시는 분 있으면 알려주세요...
2. LibreOffice 설치, PHP에서 명령 호출
LibreOffice는 무료로 사용할 수 있는 사무용 소프트웨어입니다.
명령줄에서도 다양한 조작이 가능하기 때문에 xlsx를 PDF로 변환합니다.
LibreOffice 설치
다음 URL에서 설치합니다.
https://ja.libreoffice.org/download/download/
Linux의 경우yum과 appt-get에 있습니다.
코드를 쓰다
방금 쓴 코드에 LibreOffice를 사용하여 변환하는 처리를 추가합니다.
src/xlsx-to-pdf.php
<?php
require __DIR__ . '/../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
$orderNote = __DIR__ . '/../storage/excel/order-note.xlsx';
echo "load: $orderNote", PHP_EOL;
(中略)
// LibreOfficeを使用してエクスポート
$soffice = '/Applications/LibreOffice.app/Contents/MacOS/soffice';
$command = "$soffice --headless --convert-to pdf --outdir " . __DIR__ . "/../storage/pdf $orderNote";
echo $command, PHP_EOL;
exec($command);
실행해 보세요.괜찮은데 자동적으로 높이를 조절하는 것은 소용이 없어요.
LibreOffice는 시스템 글꼴을 사용하는 것처럼 Linux의 일본어도 어렵지 않다.
PhpSpreadsheet 및 LibreOffice를 사용한 PDF 변환의 결과는 다음과 같습니다.
총결산
내일은 @hwatry씨의 TS 초보자의 입문입니다.
Reference
이 문제에 관하여(PHP로 xlsx 파일을 PDF로 변환하면 Libre Office밖에 없어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hiro2525/items/2bab16f5d9318762e2fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)