Kết xuất văn bản với phông chữ Adobe Type 1 trong Java

Kết xuất văn bản một cách liền mạch, trích xuất đường bao glyph, đo các chỉ số văn bản và vẽ kiểu chữ tùy chỉnh bằng phông chữ Adobe Type 1 (PostScript) trong các ứng dụng Java. Với Aspose.Font for Java, các nhà phát triển có thể chuyển đổi văn bản thô thành các hình dạng glyph vector có độ chính xác cao và kết xuất chúng trực tiếp lên các ngữ cảnh đồ họa hoặc hình ảnh raster mà không cần các phần phụ thuộc bên ngoài.

 

Phông chữ Adobe Type 1 sử dụng công nghệ đường bao PostScript, mang lại độ rõ nét vượt trội và khả năng thu phóng vector chính xác. Kết xuất văn bản bằng phông chữ Type 1 theo phương thức lập trình trong Java cung cấp các khả năng quan trọng cho doanh nghiệp:

  • Tạo đồ họa tùy chỉnh: - Kết xuất văn bản động lên canvas, hình ảnh được tạo hoặc bản xem trước tài liệu.
  • Trích xuất đường dẫn glyph: - Trích xuất các đường bao hình học (IGlyphAccessor & GeneralPath) để thực hiện các phép biến đổi vector tùy chỉnh hoặc các thao tác CAD.
  • Độ chính xác của các chỉ số văn bản: - Tính toán chính xác giới hạn chuỗi, độ rộng tiến, chiều cao dòng và khoảng cách glyph trước khi kết xuất.
  • Kết xuất đa nền tảng: - Đạt được tính nhất quán kiểu chữ chính xác đến từng pixel trên máy chủ Linux, container Docker và các microservice trên đám mây.

Các khả năng kết xuất cốt lõi

Đường bao vector của glyph - Truy xuất các đường dẫn vector chính xác (java.awt.geom.GeneralPath) cho từng glyph trong phông chữ Type 1.

Vẽ trong ngữ cảnh đồ họa - Vẽ trực tiếp các chuỗi văn bản lên Graphics2D hoặc hình ảnh bitmap (BufferedImage).

Mã hóa và chỉ số tùy chỉnh - Đo các chỉ số ký tự, định vị ký tự và xử lý các bảng mã hóa PostScript.

Không phụ thuộc vào GUI của hệ điều hành - Thực hiện kết xuất văn bản phía máy chủ ở chế độ headless mà không cần máy chủ X11 hoặc các yêu cầu GDI gốc.

Cách hoạt động của kết xuất văn bản trong Aspose.Font for Java

Tải phông chữ Type 1: Khởi tạo đối tượng Type1Font từ đường dẫn tệp (.pfb, .pfm) hoặc luồng byte.

Trích xuất đường bao glyph: Truy cập các biểu diễn glyph hoặc tính toán hình học đường dẫn bằng cách sử dụng mã hóa của phông chữ.

Vẽ lên canvas: Kết xuất đường dẫn glyph hoặc văn bản được định dạng trực tiếp lên canvas đồ họa đích.

Cách hoạt động của kết xuất văn bản trong Aspose.Font for Java

Tải phông chữ Type 1: Khởi tạo đối tượng Type1Font từ đường dẫn tệp (.pfb, .pfm) hoặc luồng byte.

Trích xuất đường bao glyph: Truy cập các biểu diễn glyph hoặc tính toán hình học đường dẫn bằng cách sử dụng mã hóa của phông chữ.

Vẽ lên canvas: Kết xuất đường dẫn glyph hoặc văn bản được định dạng trực tiếp lên canvas đồ họa đích.

Ví dụ mã Java để kết xuất văn bản bằng phông chữ Type 1

Dưới đây là một triển khai Java hoàn chỉnh cho thấy cách tải phông chữ Type 1, tính toán đường bao glyph và kết xuất văn bản tùy chỉnh lên canvas hình ảnh.

import com.aspose.font.ByteContentStreamSource;
import com.aspose.font.FontDefinition;
import com.aspose.font.FontType;
import com.aspose.font.Type1Font;
import com.aspose.font.GlyphId;

import java.awt.*;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.imageio.ImageIO;

public class RenderType1Text {
    public static void main(String[] args) throws IOException {
        // Load Type 1 font bytes
        String pfbPath = "path/to/font.pfb";
        byte[] fontBytes = Files.readAllBytes(Paths.get(pfbPath));

        // Initialize FontDefinition & open Type1Font
        FontDefinition fontDef = new FontDefinition(FontType.Type1, new ByteContentStreamSource(fontBytes));
        Type1Font font = (Type1Font) com.aspose.font.Font.open(fontDef);

        // Create canvas image and Graphics2D context
        int width = 800;
        int height = 200;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = image.createGraphics();

        // Configure rendering hints for clean vector text
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, width, height);
        g2d.setColor(Color.BLUE);

        // Render text character by character using glyph paths
        String textToRender = "Type 1 Text Rendering";
        double xPosition = 50;
        double yPosition = 120;
        double fontSize = 36;

        for (char c : textToRender.toCharArray()) {
            // Get Glyph ID for the character
            GlyphId glyphId = font.getEncoding().decodeToGlyphId(c);
            
            // Extract vector outline path
            GeneralPath path = font.getGlyphClass().getGlyphPath(glyphId);

            if (path != null) {
                // Save state and position glyph on canvas
                Graphics2D g2dCopy = (Graphics2D) g2d.create();
                g2dCopy.translate(xPosition, yPosition);
                g2dCopy.scale(fontSize / 1000.0, -fontSize / 1000.0); // Adjust PostScript coordinate scaling

                g2dCopy.fill(path);
                g2dCopy.dispose();
            }

            // Advance cursor position for next character
            xPosition += font.getGlyphClass().getGlyphWidth(glyphId) * (fontSize / 1000.0);
        }

        g2d.dispose();

        // Save rendered image to file
        ImageIO.write(image, "png", new File("rendered_type1_text.png"));
        System.out.println("Text rendered successfully with Type 1 font.");
    }
}

Cài đặt và thiết lập

Thêm Aspose.Font for Java vào dự án của bạn thông qua Maven.

Package Manager Console Command

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-font</artifactId>
    <version>Latest</version>
</dependency>

FAQ

1. Tôi có thể trích xuất các đường dẫn vector thô từ phông chữ Type 1 mà không cần render chúng ngay lập tức không?

Có. Bạn có thể lấy hình học vector chính xác (java.awt.geom.GeneralPath) cho bất kỳ ký tự hoặc ID glyph nào trong phông chữ Type 1 và độc lập chuyển đổi, thay đổi tỷ lệ hoặc kiểm tra các đường dẫn.

2. Aspose.Font xử lý các hệ tọa độ PostScript trong quá trình render văn bản như thế nào?

Phông chữ PostScript Type 1 sử dụng trục Y đảo ngược so với các không gian tọa độ màn hình tiêu chuẩn. Aspose.Font cung cấp hình học glyph có thể dễ dàng được chuyển đổi hoặc đảo ngược thông qua các phép biến đổi tỷ lệ tiêu chuẩn.

3. Việc render phía máy chủ có yêu cầu công cụ hiển thị hoặc thư viện native không?

Không. Aspose.Font for Java chạy hoàn toàn ở chế độ headless. Bạn có thể tính toán cấu trúc glyph và render văn bản thành hình ảnh trên máy chủ đám mây, daemon Linux hoặc môi trường container hóa mà không cần cài đặt X11 hoặc trình điều khiển hiển thị đồ họa native.