iT邦幫忙

0

laravel-dompdf adobe pdf reader 中文亂碼問題

  • 分享至 

  • xImage

Laravel:9.52.7
laravel-dompdf: 2.0.1

使用 laravel-dompdf 產出的 pdf 檔案,幾個熱門瀏覽器點開都沒有問題、Google Drive 也可以,下載幾個免費的 pdf reader 也都正常,唯獨 adobe 的 pdf reader 中文是亂碼,但感覺用這套的人可能不少,需要上來請教解方。

edge

Adobe PDF Reader

web.php

Route::get('pdf', function () {
    $pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView('pdf');
    $pdf->save(storage_path('pdf/test.pdf'));

    return response()->download(storage_path('/pdf/test.pdf'))->deleteFileAfterSend();
});

pdf.blade.php

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        @font-face {
            font-family: "Noto Serif TC";
            src: url('{{ storage_path("fonts/NotoSerifTC-Bold.otf") }}') format('truetype');
            font-weight: bold;
            font-style: normal;
        }

        @font-face {
            font-family: "Noto Serif TC";
            src: url('{{ storage_path("fonts/NotoSerifTC-Regular.otf") }}') format('truetype');
            font-weight: normal;
            font-style: normal;
        }

        .container {
            font-family: "Noto Serif TC", serif;
            position: relative;
        }

        body {
            overflow-wrap: anywhere;
            margin: 0;
            font-family: "Noto Serif TC";
        }

        html {
            margin: 0;
        }

        header, footer {
            width: 100%;
            height: 100px;
            background: gray;
            color: white;
            text-align: center;
        }

        footer {
            bottom: 0;
            position: absolute;
        }

        .page-break {
            page-break-after: always;
        }
    </style>
</head>
<body>
<div class="container">
    <header>I am header</header>
    <p style="width: 400px; margin: 0 auto 0 auto;">
        腳中傳便行費不神顧東切,性學司可表心重只水從自形以料持起,長天趣是營美發,指具高神去深節性國大男地標政停動與?件們生天們參身一,跑會多考提,醫當意行到天留會我工新腳和故清發部教親作,天三為金市的故,景同不重你人道山一然時之裡謝定其到結專過民股主知一……造種東正房,草的心變道發簡怕名為要技就生,在行已星係破雖心家作不白營於重一都不都別發向及。
        腳中傳便行費不神顧東切,性學司可表心重只水從自形以料持起,長天趣是營美發,指具高神去深節性國大男地標政停動與?件們生天們參身一,跑會多考提,醫當意行到天留會我工新腳和故清發部教親作,天三為金市的故,景同不重你人道山一然時之裡謝定其到結專過民股主知一……造種東正房,草的心變道發簡怕名為要技就生,在行已星係破雖心家作不白營於重一都不都別發向及。
        腳中傳便行費不神顧東切,性學司可表心重只水從自形以料持起,長天趣是營美發,指具高神去深節性國大男地標政停動與?件們生天們參身一,跑會多考提,醫當意行到天留會我工新腳和故清發部教親作,天三為金市的故,景同不重你人道山一然時之裡謝定其到結專過民股主知一……造種東正房,草的心變道發簡怕名為要技就生,在行已星係破雖心家作不白營於重一都不都別發向及。
    </p>
    <footer>I am footer</footer>
    <div class="page-break"></div>
    <header>I am header</header>
    <p style="width: 400px; margin: 0 auto 0 auto;">
        next content</p>
    <footer>I am footer</footer>
</div>
</body>
</html>
看更多先前的討論...收起先前的討論...
a05151988 iT邦新手 3 級 ‧ 2023-09-19 13:09:08 檢舉
要不要把字型拿掉試試?
chan15 iT邦新手 2 級 ‧ 2023-09-19 13:14:27 檢舉
把字型拿掉是什麼意思?不指定中文字型是直接連 edge 都開不了的大亂碼
淺水員 iT邦大師 6 級 ‧ 2023-09-19 13:20:55 檢舉
我不確定 dompdf 支援 OTF
改用 TTF 的字型看看
可以嘗試使用其他的中文字體 ? 選擇一個廣泛支援的中文字體,font-family: Arial, sans-serif;
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
淺水員
iT邦大師 6 級 ‧ 2023-09-19 15:32:04
最佳解答

目前 PHP 幾個主要的 PDF 函式庫並不支援 OTF 格式
這也包含 dompdf
因此使用前要自行把 otf 轉換成 ttf 格式

剛剛我找到 otf2ttf(python script)
轉成 TTF 之後就正常了:

  1. 電腦安裝 python
  2. 安裝 otf2ttf:pip install otf2ttf
  3. 命令列執行:otf2ttf -o output.ttf input.otf (自行替換 input 與 output)
  4. 把 pdf.blade.php 的字型改用 ttf 檔案即可正常顯示
看更多先前的回應...收起先前的回應...
chan15 iT邦新手 2 級 ‧ 2023-09-19 16:29:41 檢舉

成功了,十分感謝

淺水員 iT邦大師 6 級 ‧ 2023-09-20 14:54:56 檢舉

我發現 laravel-dompdf 預設關閉 font subsetting
這會直接把整個字型包到 pdf 讓檔案很大
但開啟後又有些字會偏離位置
感覺是 dompdf 的 bug

chan15 iT邦新手 2 級 ‧ 2023-09-22 09:20:10 檢舉

多謝提供資訊,沒注意到這個設定,檔案從 9MB 變成 750KB XDDD,而且肉眼沒看到什麼明顯的跑版

淺水員 iT邦大師 6 級 ‧ 2023-09-22 10:54:31 檢舉

「趣」的位置會偏右
剛好你提供的範例會遇到這問題
昨天我才修正發 pull request
https://github.com/dompdf/php-font-lib/pull/122

chan15 iT邦新手 2 級 ‧ 2023-09-25 10:21:26 檢舉

被納入修正了耶,感謝你的付出!

1
gino4u
iT邦新手 5 級 ‧ 2023-09-19 10:50:50

請問你下載的adobe pdf reader是英文版的嗎?
建議可以下載中文版或是 All Language (MUI) 版:
https://get.adobe.com/tw/reader/enterprise/

或者是英文版再加上Font Pack試看看:
https://helpx.adobe.com/in/acrobat/kb/windows-font-packs-32-bit-reader.html#Requirements

chan15 iT邦新手 2 級 ‧ 2023-09-19 11:20:10 檢舉

是中文喔,然後我抓了 all language(MUI) 一樣是亂碼,而且應該不太可能要求所有要看的人更新他們的版本,希望可以透過什麼參數塞入讓 Adobe 的 PDF Reader 正常化。

0
derek_lan
iT邦新手 2 級 ‧ 2023-09-20 10:09:13

大大用的Acrobat Reader是多少版呢?
沒多久前Acrobat Reader出問題,部分元件顯示的中文出現亂碼
前幾日出了最新版後,狀況就解除了

chan15 iT邦新手 2 級 ‧ 2023-09-20 10:16:28 檢舉

我為了測試都是抓最新版喔

我要發表回答

立即登入回答