Olvassa el a Glyphs and Metrics információkat

C++ API megoldás a karakterláncszélesség kiszámításához, a karakterjel-koordináták kiszámításához és a karakterjelekkel végzett egyéb manipulációkhoz.

 

Az Aspose.Font API a betűtípusokhoz kapcsolódó funkciók átfogó skáláját kínálja, beleértve a konvertálást, a karakterjelek manipulálását, a latin szimbólumok észlelését és még sok mást. Ezen jellemzők némelyike ​​a karakterjelek manipulálására vonatkozik, amelyek egy betűtípus egyedi karakterei vagy a szimbólumok/karakterek grafikus ábrázolásai. Ha többet szeretne megtudni a betűtípus egységeiről, olvassa el a Introduction to Glyph cikket.

Ez az oldal ismerteti a Glyph és Metrics információk olvasásának lehetőségét, de a funkciók teljes megértéséhez olvassa el a Using Glyph Objects . Itt számos példát találhat a C++ kódra, és megismerheti az Aspose.Font képességeit a karakterjelekkel és karakterjel-objektumokkal való munkához. További kódpéldák, amelyek bemutatják az Aspose.Font karakterjelek manipulálására való használatát, az Aspose Github Project -ben találhatók.

A karakterjel-metrikák, az itt használt kifejezés, egy adott betűtípus információira és méréseire utalnak. Tartalmazhatnak olyan információkat, mint például a karakterjel magassága, szélessége, előrehaladott szélessége és egyéb méretei, amelyek fontosak a betűtípusban lévő karakterek megfelelő elhelyezéséhez és térközéhez. Ezeket a mutatókat a szövegelrendezési és renderelő rendszerek használják a szöveg egységes és pontos megjelenítésének biztosítására.

A karakterjelekkel való munkához szükségünk van:

  • Aspose.Font for C++ API, amely funkciókban gazdag, hatékony és könnyen használható dokumentumkezelési és -konverziós API.

  • Nyissa meg a NuGet csomagkezelőt, keresse meg az Aspose.Font elemet, és telepítse. A következő parancsot is használhatja a Package Manager konzolból.

Package Manager Console Command


    PM> Install-Package Aspose.Font

A karakterláncszélesség kiszámításának lépései C++ használatával:

Egy karakterlánc szélességének karakterjelekkel történő kiszámításához először meg kell határoznia a karakterláncban lévő egyes karakterjelek szélességét, majd összegeznie kell ezeket a szélességeket, hogy megkapja a teljes számot. Ha lépésekkel magyarázza el, a sorrend a következő:

  1. Határozza meg a karakterlánc szélességének kiszámításához használni kívánt betűtípust és -méretet.
  2. A karakterlánc minden egyes karakteréhez határozza meg a megfelelő karakterjelet a betűtípusban. Használja a karaktertérképet, amely megadja a megfelelő karakterjel indexét.
  3. A karakterjel-index segítségével keresse meg a karakterjel metrikáját a betűtípus metrikatáblázatában. A karakterjelek metrikái általában a szélességet, a magasságot és az előrehaladási szélességet tartalmazzák.
  4. Adja össze a karakterlánc összes karakterjelének speciális szélességét, hogy megkapja a karakterlánc teljes szélességét. Megjegyzés: ügyeljen a levágási információkra.

Ha egy hasonló folyamatot ír le a C++ kóddal, akkor a következőképpen nézne ki.

C++ kód a karakterlánc szélességének megállapításához

    using System;
    using System::IO;
    using System::Drawing;
    using System::Collections::Generic;
    using Aspose::Font::Sources;
    using Aspose::Font::Glyphs;
    using Aspose::Font::RenderingPath;
        //Declare the text and other constants
        const System::String text = u"Hello world";
        const int32_t fontSize = 10;
    
        //Declare the variable for string width
        double width = 0;
    
        //Get glyph for each letter in text and calculate width for whole text.
        //The same result can be achieved using method font.Metrics.MeasureString(text, fontSize).
        for (char16_t symbol : text)
        {
            System::SharedPtr<GlyphId> gid = this->_font->get_Encoding()->DecodeToGid(symbol);
            System::SharedPtr<Glyph> glyph = this->_font->GetGlyphById(gid);
            width += (glyph->get_WidthVectorX() / this->_font->get_Metrics()->get_UnitsPerEM()) * fontSize;
        }
	    font->get_Metrics()->MeasureString(text, width);

        //Print the output results
        System::Console::WriteLine(System::String::Format(u"Width for text \"{0}\" with font size {2} is equal {3}.", text, FontName, fontSize, width));

Az összes glifpont koordinátákkal C++ használatával történő kiszámításának lépései:

  1. Deklarálja a System::Drawing::Point típusú points listát: Ez a lista egy pont pontjait fogja tárolni. glif útvonal szegmens..
  2. Adja meg az Init szolgáltatás hivatkozását az IPathSegment felületen.
  3. Ismételje meg az összes karakterjel-útvonal szegmenst, és összegezze a pontokat.

C++ kód a glifpontok megtalálásához

    //Declare the resultant list with points
    System::SharedPtr<System::Collections::Generic::List<System::Drawing::Point>> points =
    System::MakeObject<System::Collections::Generic::List<System::Drawing::Point>>();
    
    //Init the service reference on IPathSegment
    System::SharedPtr<IPathSegment> prevSegment;
    
    //Iterate all the glyph path segments and collect points
    for (auto&& segment : glyph->get_Path()->get_Segments())
    {
        if ((System::ObjectExt::Is<LineTo>(segment)) || (System::ObjectExt::Is<CurveTo>(segment)))
        {
            if (System::ObjectExt::Is<MoveTo>(prevSegment))
            {
                System::SharedPtr<MoveTo> moveTo = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::MoveTo>(prevSegment);
                AddPoint((int32_t)moveTo->get_X(), (int32_t)moveTo->get_Y(), points);
            }
            if (System::ObjectExt::Is<LineTo>(segment))
            {
                System::SharedPtr<LineTo> line = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::LineTo>(segment);
                AddPoint((int32_t)line->get_X(), (int32_t)line->get_Y(), points);
            }
            else if (System::ObjectExt::Is<CurveTo>(segment))
            {
                System::SharedPtr<CurveTo> curve = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::CurveTo>(segment);
                AddPoint((int32_t)curve->get_X1(), (int32_t)curve->get_Y1(), points);
                AddPoint((int32_t)curve->get_X2(), (int32_t)curve->get_Y2(), points);
                AddPoint((int32_t)curve->get_X3(), (int32_t)curve->get_Y3(), points);
            }
        }
        prevSegment = segment;
    }



GYIK

1. Mi az a glif metrika?

A karakterjellemzők azok a paraméterek, amelyek befolyásolják a jelkép elhelyezését a szövegelrendezés létrehozásakor.

2. Mik azok a glif-metrikák?

A leggyakrabban használt karakterjel-metrikák a szélesség, az origó, az oldalsó csapágyak, az alapvonal, az emelkedés, az emelkedés, az ereszkedés, a süllyedés, a határolókeret, a magasság, a szélesség és a bevágás.

3. Hogyan kezelheti a karakterjeleket ezzel az API-megoldással?

Karjelek kódolásához C#-ban használja az Aspose.Font.Glyphs névtér entitásait.

4. Mi a fontossága a karakterjel-mérőknek?

A karakterjel-metrikák megértésével és megfelelő beállításával a tipográfusok és a tervezők biztosíthatják a nyomtatott anyagokon, digitális felületeken vagy weboldalakon található szöveg optimális térközét, igazítását és olvashatóságát.