Рендеринг тексту зі шрифтами Adobe Type 1 у Java

Легко виконуйте рендеринг тексту, витягуйте контури гліфів, вимірюйте метрики тексту та створюйте власну типографіку за допомогою шрифтів Adobe Type 1 (PostScript) у Java-застосунках. За допомогою Aspose.Font for Java розробники можуть перетворювати необроблений текст на високоточні векторні форми гліфів і безпосередньо відтворювати їх у графічних контекстах або растрових зображеннях без зовнішніх залежностей.

 

Шрифти Adobe Type 1 використовують технологію контурів PostScript, забезпечуючи виняткову чіткість і точне векторне масштабування. Програмний рендеринг тексту зі шрифтами Type 1 у Java надає ключові можливості для корпоративних застосунків:

  • Створення власної графіки: - Відтворюйте динамічний текст на полотні, у створених зображеннях або попередньому перегляді документів.
  • Витягування шляхів гліфів: - Витягуйте геометричні контури (IGlyphAccessor & GeneralPath) для власних векторних перетворень або операцій CAD.
  • Точність текстових метрик: - Точно обчислюйте межі рядків, ширину просування, висоту рядків і відстань між гліфами перед рендерингом.
  • Кросплатформний рендеринг: - Забезпечуйте піксельну точність типографіки на серверах Linux, у контейнерах Docker і хмарних мікросервісах.

Основні можливості рендерингу

Векторні контури гліфів - Отримуйте точні векторні шляхи (java.awt.geom.GeneralPath) для окремих гліфів у шрифтах Type 1.

Малювання в графічному контексті - Малюйте текстові рядки безпосередньо в Graphics2D або растрові зображення (BufferedImage).

Власні кодування та метрики - Вимірюйте метрики символів, позиціонування символів і обробляйте таблиці кодування PostScript.

Без залежностей від графічного інтерфейсу ОС - Виконуйте серверний рендеринг тексту в headless-режимі без сервера X11 або нативних вимог GDI.

Як працює рендеринг тексту в Aspose.Font for Java

Завантаження шрифту Type 1: Ініціалізуйте об’єкт Type1Font із шляхів до файлів (.pfb, .pfm) або потоків байтів.

Витягування контурів гліфів: Отримуйте представлення гліфів або обчислюйте геометрію шляхів за допомогою кодування шрифту.

Малювання на полотні: Відтворюйте шляхи гліфів або форматований текст безпосередньо на цільовому графічному полотні.

Як працює рендеринг тексту в Aspose.Font for Java

Завантаження шрифту Type 1: Ініціалізуйте об’єкт Type1Font із шляхів до файлів (.pfb, .pfm) або потоків байтів.

Витягування контурів гліфів: Отримуйте представлення гліфів або обчислюйте геометрію шляхів за допомогою кодування шрифту.

Малювання на полотні: Відтворюйте шляхи гліфів або форматований текст безпосередньо на цільовому графічному полотні.

Приклад коду Java для рендерингу тексту зі шрифтом Type 1

Нижче наведено повну реалізацію Java, яка демонструє, як завантажити шрифт Type 1, обчислити контури гліфів і відтворити власний текст на графічному полотні зображення.

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.");
    }
}

Встановлення та налаштування

Додайте Aspose.Font for Java до свого проєкту через 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. Чи можу я витягувати необроблені векторні контури зі шрифтів Type 1 без їх негайного рендерингу?

Так. Ви можете отримати точну векторну геометрію (java.awt.geom.GeneralPath) для будь-якого символу або ID гліфа у шрифті Type 1, а також незалежно перетворювати, масштабувати або аналізувати контури.

2. Як Aspose.Font обробляє системи координат PostScript під час рендерингу тексту?

Шрифти PostScript Type 1 використовують інвертовану вісь Y порівняно зі стандартними системами екранних координат. Aspose.Font надає геометрію гліфів, яку можна легко перетворювати або інвертувати за допомогою стандартних масштабувальних перетворень.

3. Чи потребує серверний рендеринг механізму відображення або нативних бібліотек?

Ні. Aspose.Font for Java працює повністю в headless-режимі. Ви можете обчислювати структури гліфів і рендерити текст у зображення на хмарних серверах, Linux-демонах або в контейнеризованих середовищах без встановлення X11 або нативних драйверів графічного відображення.