Szöveg renderelése Adobe Type 1 betűtípusokkal Java nyelven

Rendereljen szöveget zökkenőmentesen, nyerje ki a karakterjelek körvonalait, mérje meg a szövegmetrikákat, és rajzoljon egyéni tipográfiát Adobe Type 1 (PostScript) betűtípusok használatával Java-alkalmazásokban. Az Aspose.Font for Java segítségével a fejlesztők a nyers szöveget nagy pontosságú vektorglifákká alakíthatják, és közvetlenül grafikus környezetekbe vagy raszterképekre renderelhetik külső függőségek nélkül.

 

Az Adobe Type 1 betűtípusok PostScript körvonaltechnológiát használnak, amely kivételes tisztaságot és pontos vektorméretezést biztosít. A Type 1 betűtípusú szöveg programozott renderelése Java nyelven fontos vállalati képességeket tesz lehetővé:

  • Egyéni grafika létrehozása: - Dinamikus szöveg renderelése vászonalapú környezetekre, generált képekre vagy dokumentum-előnézetekre.
  • Karakterjel-útvonalak kinyerése: - Geometriai körvonalak (IGlyphAccessor & GeneralPath) kinyerése egyéni vektoros transzformációkhoz vagy CAD-műveletekhez.
  • Pontos szövegmetrikák: - Karakterláncok pontos határainak, előrelépési szélességének, sormagasságának és karakterjelközének kiszámítása a renderelés előtt.
  • Platformfüggetlen renderelés: - Pixelpontosan egységes tipográfia biztosítása Linux-szervereken, Docker-konténerekben és felhőalapú mikroszolgáltatásokban.

Főbb renderelési lehetőségek

Karakterjelek vektoros körvonalai - Pontos vektoros útvonalak (java.awt.geom.GeneralPath) lekérése a Type 1 betűtípusok egyes karakterjeleihez.

Rajzolás grafikus környezetben - Szöveges karakterláncok közvetlen rajzolása Graphics2D környezetbe vagy bitképekre (BufferedImage).

Egyéni kódolások és metrikák - Karaktermetrikák és karakterpozíciók mérése, valamint a PostScript kódolási táblák kezelése.

Nincs szükség operációsrendszer-GUI-függőségekre - Szerveroldali szövegrenderelés végrehajtása headless módban X11-szerver vagy natív GDI-követelmények nélkül.

A szövegrenderelés működése az Aspose.Font for Java alkalmazásban

A Type 1 betűtípus betöltése: A Type1Font objektum inicializálása fájlútvonalakból (.pfb, .pfm) vagy bájtfolyamokból.

Karakterjel-körvonalak kinyerése: A karakterjel-reprezentációk elérése vagy az útvonalgeometria kiszámítása a betűtípus kódolásának használatával.

Rajzolás vászonra: Karakterjel-útvonalak vagy formázott szöveg közvetlen renderelése egy grafikus célvászonra.

A szövegrenderelés működése az Aspose.Font for Java alkalmazásban

A Type 1 betűtípus betöltése: A Type1Font objektum inicializálása fájlútvonalakból (.pfb, .pfm) vagy bájtfolyamokból.

Karakterjel-körvonalak kinyerése: A karakterjel-reprezentációk elérése vagy az útvonalgeometria kiszámítása a betűtípus kódolásának használatával.

Rajzolás vászonra: Karakterjel-útvonalak vagy formázott szöveg közvetlen renderelése egy grafikus célvászonra.

Java-kódpélda szöveg Type 1 betűtípussal történő rendereléséhez

Az alábbiakban egy teljes Java-megvalósítás látható, amely bemutatja, hogyan tölthet be Type 1 betűtípust, számíthatja ki a karakterjelek körvonalait, és renderelhet egyéni szöveget egy képi vászonra.

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

Telepítés és beállítás

Az Aspose.Font for Java programot Maven segítségével adja hozzá a projektjéhez.

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>

Gyakran ismételt kérdések

1. Kinyerhetem a Type 1 betűtípusok nyers vektoros görbéit anélkül, hogy azokat azonnal renderelném?

Igen. Lekérheti a Type 1 betűtípus bármely karakterének vagy glifazonosítójának pontos vektorgeometriáját (java.awt.geom.GeneralPath), majd a görbéket egymástól függetlenül transzformálhatja, méretezheti vagy vizsgálhatja.

2. Hogyan kezeli az Aspose.Font a PostScript koordinátarendszereket a szöveg renderelése során?

A PostScript Type 1 betűtípusok a szabványos képernyő-koordinátaterekhez képest fordított Y tengelyt használnak. Az Aspose.Font glifgeometriát biztosít, amely szabványos méretezési transzformációkkal könnyen transzformálható vagy megfordítható.

3. Igényel a szerveroldali renderelés megjelenítőmotort vagy natív könyvtárakat?

Nem. Az Aspose.Font for Java teljesen headless módban működik. A glifstruktúrákat kiszámíthatja, és a szöveget képekké renderelheti felhőszervereken, Linux-démonokon vagy konténerizált környezetekben anélkül, hogy X11-et vagy natív grafikus megjelenítő-illesztőprogramokat kellene telepítenie.