2009-06-13 10 views
10

Tôi đang sử dụng thư viện DOMPDF để tạo hóa đơn bằng PDF. Tài liệu này có thể bằng tiếng Pháp, tiếng Nga hoặc tiếng Anh, nhưng tôi gặp sự cố khi in các ký tự tiếng Nga.Vấn đề DOMPDF với ký tự Cyrillic

Trước tiên, tôi đã cố gắng để sử dụng UTF-8 mã hóa và đặt thẻ meta vào đầu của trang HTML được chuyển đổi:

< meta http-equiv = "Content-Type" content =" text/html; charset = utf-8 "/ >

Nhưng điều đó không hiệu quả.

Sau đó, tôi đã chèn thẻ meta này vào bên trong thẻ BODY và thẻ này đã giúp giải quyết sự cố với các ký tự tiếng Pháp.

Nhưng các ký tự tiếng Nga vẫn không hoạt động. Tôi cũng đã cố gắng chuyển đổi các ký tự tiếng Nga thành các thực thể HTML, nhưng điều đó cũng không hoạt động.

Tôi sử dụng R & Lớp CPDF OS, không phải PDFLib làm phụ trợ.

Có ai giúp được không?

+0

Nếu bạn muốn câu hỏi của mình được chú ý nhiều hơn, vui lòng chỉ cập nhật thông tin này với thông tin mới. Không đăng trùng lặp chính xác. –

+0

OK, cảm ơn ghi chú của bạn. –

+1

Tại sao trên thế giới là wiki cộng đồng này? Đó là một câu hỏi cụ thể với một câu trả lời tuyệt vời. – raveren

Trả lời

7

Vấn đề là với phông chữ mặc định sử dụng dompdf (nghĩa là nó không có tất cả các ký tự unicode, bây giờ là hơn 5000). Thông thường arialuni.ttf là những gì bạn cần. Bạn có thể tải phiên bản Nga cục bộ tại http://chernev.ru/dompdf.rar {link} chia

liên kết Cập nhật: https://code.google.com/p/ipwn/downloads/detail?name=arialuni.ttf

+0

Cảm ơn câu trả lời của bạn. –

+1

Liên kết hiện bị hỏng – Bulat

+1

Liên kết không hoạt động. – Sadikhasan

0

Tải arialuni.ttf Run php load_font.php 'Arial' arialuni.ttf trong thư mục dompdf, thiết lập phông chữ Arial Nó công trình;)

+1

Downvote vì kích thước tệp của Arialuni là 22 MB và khi tôi muốn tạo 1 trang PDF nó mất một thời gian dài và kích thước tập tin PDF là lớn (trong trường hợp của tôi ~ 20 MB). Khi tôi tạo ra 10 trang PDF, nó mất một thời gian xử lý vô hạn và thực sự không thể nhìn thấy kết quả. Tốt hơn là sử dụng phông chữ nhẹ. –

7

Trong liên kết trả lời được chấp nhận bị hỏng và chứa phiên bản cũ của DOMPDF.

Để làm việc với các ký hiệu unicode trong DOMPDF 0.6, bạn có hai lựa chọn: sử dụng phông chữ đã tồn tại hoặc tạo phông chữ của riêng bạn.

  • Sử dụng tồn phông chữ (áp dụng cho DOMPDF 0.6):

    1. Download lưu trữ và trích xuất.
    2. Sao chép các tệp được trích xuất trong thư mục phông chữ dompdf của bạn /dompdf/lib/fonts/.
    3. Chỉnh sửa dompdf_font_family_cache.dist.php với đoạn mã 1.
    4. Sử dụng CSS font-family: times;.

Snippet 1:

/* ... */ 
'times' => array (
    'normal' => DOMPDF_FONT_DIR . 'times', 
    'bold' => DOMPDF_FONT_DIR . 'timesbd', 
    'italic' => DOMPDF_FONT_DIR . 'timesi', 
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi' 
), 
'times-roman' => array (
    'normal' => DOMPDF_FONT_DIR . 'times', 
    'bold' => DOMPDF_FONT_DIR . 'timesbd', 
    'italic' => DOMPDF_FONT_DIR . 'timesi', 
    'bold_italic' => DOMPDF_FONT_DIR . 'timesbi' 
), 
/* ... */ 

  • Nếu bạn muốn sử dụng phông chữ TTF của riêng bạn (chẳng hạn, Arial.ttf):

    1. Run: ttf2afm -o Arial.afm Arial.ttf. (Tôi đã làm điều đó trong Ubuntu.)
    2. Chạy: ttf2ufm -a -F Arial.ttf. (Tôi đã làm điều đó trong Windows sử dụng exe từ UFPDF, nhưng tôi đoán bạn có thể sử dụng /dompdf/lib/ttf2ufm/bin/ttf2ufm.exe.)
    3. Sao chép Arial.* tệp trong /dompdf/lib/fonts/.
    4. Thêm vào dompdf_font_family_cache.dist.php đoạn mã 2.
    5. Sử dụng CSS font-family: arial;.

Snippet 2:

/* ... */ 
'arial' => array (
    'normal' => DOMPDF_FONT_DIR . 'Arial', 
    'bold' => DOMPDF_FONT_DIR . 'Arial', 
    'italic' => DOMPDF_FONT_DIR . 'Arial', 
    'bold_italic' => DOMPDF_FONT_DIR . 'Arial' 
) 
/* ... */ 
0

Đối với tôi 4 bước trên không giải quyết được vấn đề này. Bên cạnh đó, dompdf chuyển đổi tạo pdf để ANSI (ISO) Bạn cần phải vô hiệu hóa này vào các tùy chọn trang http://domain.com/admin/settings/print/pdf

Tick Unicode Kiểu hộp kiểm Use dompdf của. Điều này sẽ buộc phải tạo tệp bằng UTF-8/Unicode.

Xin lưu ý rằng cài đặt ghi đè cài đặt web trong dompdf_config.inc.php theo mặc định.

4

nếu bạn sẽ sử dụng phông chữ DejaVu bạn có thể thấy các ký tự Cyrillic

Các phông chữ TrueType DejaVu đã được cài đặt sẵn để cung cấp cho dompdf khá bảo hiểm ký tự Unicode theo mặc định. Để sử dụng phông chữ DejaVu, hãy tham khảo phông chữ trong biểu định kiểu của bạn, ví dụ: body {font-family: DejaVu Sans; } (cho DejaVu Sans).

DOMPDF bao gồm phông chữ DejaVu được mặc định

$html = "<html><head><style>body { font-family: DejaVu Sans }</style>". 
     "<body>А вот и кириллица</body>". 
     "</head></html>"; 

    $dompdf = new \DOMPDF(); 
    $dompdf->load_html($html); 
    $dompdf->render(); 
    echo file_put_contents('cyrillic.pdf', $dompdf->output()); 

Bạn cũng có thể thiết lập thay đổi def cho phông chữ mặc định trong dompdf_config.inc.php

def("DOMPDF_DEFAULT_FONT", "DejaVu Sans"); 
0

lưu ý rằng vấn đề có thể được sử dụng đặt lại css, đặc biệt là font:inherit;