Bỏ qua để đến nội dung

Soạn văn bản với phông chữ và căn chỉnh

Dùng công thức này để đặt văn bản lên trang và kiểm soát họ phông chữ, kiểu, cỡ chữ cũng như căn chỉnh của văn bản đó. Bạn sẽ dùng ba phương thức: setFont(), cell()multiCell(). Mã nguồn bám sát examples/04-text-and-fonts.php.

Terminal window
composer require nextpdf/core:^3

Lệnh này cài đặt gói nextpdf/core. Ví dụ này yêu cầu PHP 8.4.

setFont($family, $style, $size) chọn kiểu chữ hiện hành cho lệnh gọi văn bản tiếp theo. Đối số $style kết hợp ba cờ: B (in đậm), I (in nghiêng) và U (gạch chân). Cờ U áp dụng trang trí văn bản; các cờ còn lại chọn biến thể phông chữ. Các họ Helvetica, Times và Courier phân giải thành 14 phông chữ Type 1 tiêu chuẩn được nêu tên trong ISO 32000-2. Một hồ sơ tuân thủ có thể ghi đè điều này và yêu cầu một phông chữ thay thế được nhúng.

cell() ghi một dòng trong một ô. multiCell() ngắt văn bản theo từ thành một cột dựa trên chiều rộng và chiều cao dòng bạn cung cấp. Văn bản bắt đầu trong không gian văn bản, rồi ma trận văn bản ánh xạ không gian đó sang không gian người dùng (ISO 32000-2). Bạn làm việc bằng đơn vị người dùng; engine sẽ phát ra ma trận thay bạn.

Thiết lập căn chỉnh bằng enum Alignment: Left, Center, Right, Justify. Với multiCell(), căn đều sẽ phân bổ khoảng cách giữa các từ trên toàn bộ dòng.

  • setFont(string $family, string $style = '', float $size = 12.0): staticNextPDF\Core\Concerns\HasTypography.
  • cell(float $width, float $height, string $text = '', bool|string $border = false, bool $newLine = false, Alignment $align = Alignment::Left, bool $fill = false): staticNextPDF\Core\Concerns\HasTextOutput.
  • multiCell(float $width, float $height, string $text, bool|string $border = false, Alignment $align = Alignment::Left): static — cùng trait.
  • AlignmentNextPDF\Contracts\Alignment (Left, Center, Right, Justify).

Bảng PHPDoc đầy đủ được lấy từ mã nguồn.

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;
use NextPDF\Core\Document;
$doc = Document::createStandalone();
$doc->addPage();
$doc->setFont('helvetica', 'B', 18);
$doc->cell(0, 12, 'Heading', newLine: true);
$doc->setFont('helvetica', '', 11);
$doc->multiCell(0, 7, 'Word-wrapped justified body text.', align: Alignment::Justify);
$doc->save(__DIR__ . '/out.pdf');

Ví dụ này độc lập, nên bộ khung kiểm thử có thể chạy nó. Ví dụ bám sát examples/04-text-and-fonts.php và minh họa các biến thể kiểu, nhiều cỡ chữ, văn bản tự xuống dòng được căn đều, cùng ba kiểu căn chỉnh.

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;
use NextPDF\Core\Document;
$doc = Document::createStandalone();
$doc->setTitle('Text and Fonts');
$doc->addPage();
$doc->setFont('helvetica', 'B', 18);
$doc->cell(0, 12, 'Text and Font Styles', newLine: true);
$doc->ln(5);
$doc->setFont('helvetica', '', 12);
$doc->cell(0, 8, 'Normal text in Helvetica 12pt.', newLine: true);
$doc->setFont('helvetica', 'B', 12);
$doc->cell(0, 8, 'Bold text in Helvetica 12pt.', newLine: true);
$doc->setFont('helvetica', 'I', 12);
$doc->cell(0, 8, 'Italic text in Helvetica 12pt.', newLine: true);
$doc->setFont('helvetica', 'BI', 12);
$doc->cell(0, 8, 'Bold-Italic text in Helvetica 12pt.', newLine: true);
$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);
$doc->cell(0, 10, 'Font Sizes', newLine: true);
foreach ([8, 10, 12, 14, 18] as $size) {
$doc->setFont('helvetica', '', (float) $size);
$doc->cell(0, $size * 0.8, "This is {$size}pt text.", newLine: true);
}
$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);
$doc->cell(0, 10, 'Multi-Line Text (Word Wrap)', newLine: true);
$doc->setFont('helvetica', '', 11);
$paragraph = 'NextPDF is a modern PDF 2.0 library for PHP. It provides a '
. 'fluent API for document creation. This paragraph demonstrates '
. 'automatic word wrapping and justified alignment with multiCell().';
$doc->multiCell(0, 7, $paragraph, align: Alignment::Justify);
$doc->ln(5);
$doc->setFont('helvetica', 'B', 14);
$doc->cell(0, 10, 'Text Alignment', newLine: true);
$doc->setFont('helvetica', '', 11);
$doc->cell(0, 8, 'Left-aligned text', newLine: true, align: Alignment::Left);
$doc->cell(0, 8, 'Center-aligned text', newLine: true, align: Alignment::Center);
$doc->cell(0, 8, 'Right-aligned text', newLine: true, align: Alignment::Right);
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');
$doc->save($out !== false ? $out : __DIR__ . '/compose-text-and-fonts.pdf');
echo "Wrote compose-text-and-fonts.pdf\n";

STDOUT mong đợi:

Wrote compose-text-and-fonts.pdf
  • Chiều rộng 0 nghĩa là chiều rộng còn lại. Khi bạn truyền 0, cell(0, ...)multiCell(0, ...) dùng phần khoảng trống còn lại tới lề phải. Để có ô có chiều rộng cố định, hãy truyền chiều rộng tường minh.
  • Thứ tự chuỗi kiểu. 'BI''IB' chọn cùng một biến thể đậm-nghiêng vì trình phân tích bỏ qua thứ tự cờ. Cờ 'U' là một cờ trang trí, không phải một biến thể phông chữ.
  • Phạm vi glyph của phông chữ tiêu chuẩn. 14 phông chữ tiêu chuẩn kết xuất toàn bộ kho ký tự của WinAnsiEncoding (Windows-1252). Kho này bao phủ Latinh có dấu của Tây Âu, ký hiệu Euro và các dấu chấm câu kiểu chữ thông dụng — gạch nối en và em, dấu nháy cong, dấu chấm tròn, dấu ba chấm và ký hiệu thương hiệu. Đối với các hệ chữ viết nằm ngoài kho này, chẳng hạn tiếng Trung, tiếng Nhật, tiếng Hàn, tiếng Ả Rập, tiếng Hebrew, tiếng Hy Lạp, tiếng Kirin hoặc tiếng Thái, hãy đăng ký và chọn một kiểu chữ TrueType. Xem Nhúng và tạo tập con phông chữ.
  • Chiều cao dòng so với cỡ phông chữ. Chiều cao mỗi dòng trong multiCell() bằng cỡ phông chữ nhân với tỷ lệ chiều cao dòng mặc định của hồ sơ metric. Nếu chiều cao quá nhỏ, các dòng có thể chồng lên nhau.
  • Căn đều ở dòng cuối. multiCell() căn đều không giãn dòng cuối cùng của một đoạn văn. Điều này khớp với cách dàn trang thông thường.

Chi phí phát ra văn bản tăng tuyến tính theo số lượng glyph, O(n). Ngân sách là wall_ms: 1000, peak_mb: 64. Ngân sách này thấp hơn so với các công thức HyperText Markup Language (HTML) vì không có cascade hay cây bố cục. Phông chữ tiêu chuẩn không được nhúng, nhờ đó đầu ra vẫn nhỏ gọn.

Nội dung văn bản được kết xuất, không được diễn giải. Hãy kiểm tra độ dài các chuỗi do người dùng cung cấp để giữ kích thước đầu ra trong giới hạn. Đường dẫn này không chạy script nào và không tải bất kỳ tài nguyên từ xa nào.

Tuyên bốĐặc tảĐiều khoảnreference_id
Các họ Helvetica, Times và Courier nằm trong số 14 phông chữ Type 1 tiêu chuẩn.ISO 32000-2iso32000_2_sec9#x1.x29
Các họ standard-14 hỗ trợ toàn bộ bộ ký tự Latinh (WinAnsiEncoding, Windows code page 1252).ISO 32000-2Annex D.2 (iso32000_2_annexes#x1.x17.p4)eb9220f88dfadad27a0be2206b64e68d8ea301d6d46e08142d43859c05fac6e4
Tọa độ văn bản nằm trong không gian văn bản, được ánh xạ sang không gian người dùng bằng ma trận văn bản.ISO 32000-2iso32000_2_sec8#x1.x10.p2

Công thức này cho thấy cách NextPDF soạn văn bản bằng các phông chữ tiêu chuẩn. Phạm vi glyph của chúng là toàn bộ kho ký tự của WinAnsiEncoding (Windows-1252) — Latinh Tây Âu cùng các dấu chấm câu kiểu chữ thông dụng. Văn bản thuộc các hệ chữ viết khác cần một kiểu chữ được nhúng.

Không áp dụng.