Interface ITextStyle

ITextStyle interface

Interface pour travailler avec le style de texte

public interface ITextStyle

Propriétés

NomLa description
AutoKerning { get; set; }Obtient ou définit le crénage automatique.
AutoLeading { get; set; }Obtient ou définit une valeur indiquant si [interlignage automatique].
BaselineShift { get; set; }Le décalage de la ligne de base.
ContextualAlternates { get; set; }Les alternatives contextuelles utilisées pour relier les lettres ensemble.
DiscretionaryLigatures { get; set; }Les ligatures discrétionnaires utilisées pour relier les lettres, en particulier dans les polices de caractères.
FauxBold { get; set; }Obtient ou définit que le faux gras est activé.
FauxItalic { get; set; }Obtient ou définit que le faux gras est activé.
FillColor { get; set; }Obtient ou définit la couleur du remplissage.
FontBaseline { get; set; }La ligne de base de la police.
FontCaps { get; set; }Les majuscules des polices.
FontIndex { get; }Obtient l’index de la police.
FontName { get; set; }Obtient ou définit le nom de la police.
FontSize { get; set; }Obtient ou définit la taille de la police.
Fractions { get; set; }Les symboles de fractions peuvent être remplacés par un glyphe spécial.
HindiNumbers { get; set; }Obtient ou définit une valeur indiquant si [nombres hindis].
HorizontalScale { get; set; }L’échelle horizontale.
IsStandardVerticalRomanAlignmentEnabled { get; set; }Obtient ou définit l’alignement romain vertical standard. Ceci basé sur la valeur de la ressource BaselineDirection s’applique uniquement lorsque l’orientation du texte estVertical .
Kerning { get; set; }Obtient ou définit le crénage.
LanguageIndex { get; }Obtient l’index de la langue.
Leading { get; set; }Obtient ou définit l’interlignage.
NoBreak { get; set; }Obtient ou définit la valeur sans rupture.
StandardLigatures { get; set; }Les ligatures contextuelles standard utilisées pour relier les lettres ensemble.
Strikethrough { get; set; }Obtient ou définit une valeur indiquant si [barré].
StrokeColor { get; set; }Obtient ou définit la couleur du trait.
Tracking { get; set; }Obtient ou définit le suivi.
Underline { get; set; }Obtient ou définit une valeur indiquant si [souligné].
VerticalScale { get; set; }L’échelle verticale.

Méthodes

NomLa description
Apply(ITextStyle)Applique le style spécifié.
IsEqual(ITextStyle)Détermine si le style spécifié est égal.

Exemples

L’exemple suivant montre comment vous pouvez rendre différents styles dans un calque de texte dans Aspose.PSD

[C#]

string sourceFile = "text212.psd";
string etalonFile = "Ethalon_text212.psd";
string outputFile = "Output_text212.psd";

using (var img = (PsdImage)Image.Load(sourceFile))
{
    TextLayer textLayer = (TextLayer)img.Layers[1];
    IText textData = textLayer.TextData;
    ITextStyle defaultStyle = textData.ProducePortion().Style;
    ITextParagraph defaultParagraph = textData.ProducePortion().Paragraph;
    defaultStyle.FillColor = Color.DimGray;
    defaultStyle.FontSize = 51;

    textData.Items[1].Style.Strikethrough = true;

    ITextPortion[] newPortions = textData.ProducePortions(
        new string[]
        {
          "E=mc", "2\r", "Bold", "Italic\r",
          "Lowercasetext"
        },
        defaultStyle,
        defaultParagraph);

    newPortions[0].Style.Underline = true; // édite le style de texte "E=mc"
    newPortions[1].Style.FontBaseline = FontBaseline.Superscript; // édite le style de texte "2\r"
    newPortions[2].Style.FauxBold = true; // édite le style de texte "Gras"
    newPortions[3].Style.FauxItalic = true; // édite le style de texte "Italique\r"
    newPortions[3].Style.BaselineShift = -25; // édite le style de texte "Italique\r"
    newPortions[4].Style.FontCaps = FontCaps.SmallCaps; // édite le style de texte "Lowercasetext"

    foreach (var newPortion in newPortions)
    {
        textData.AddPortion(newPortion);
    }

    textData.UpdateLayerData();
    img.Save(outputFile);
}

Le code suivant montre comment obtenir la taille de la police pour n’importe quelle partie de texte dans le calque de texte.

[C#]

// Extraction de la mauvaise taille de police 
string filePath = "直播+电商.psd";

var tolerance = 0.001;
using (var image = Image.Load(filePath))
{
    int layerIndex = 22;

    // Ancienne API (Utilisation de la police du premier paragraphe)
    PsdImage psdImage = image as PsdImage;
    double[] matrix = ((TextLayer)psdImage.Layers[layerIndex]).TransformMatrix;
    double baseFontSize = ((TextLayer)psdImage.Layers[layerIndex]).Font.Size;
    double fontSize = matrix[0] * baseFontSize;

    // Vérification de la taille de la police de base
    if (Math.Abs(100.0 - baseFontSize) > tolerance)
    {
        throw new Exception("Font size was read incorrect");
    }

    // Vérification de la taille réelle de la police
    if (Math.Abs(88.425 - fontSize) > tolerance)
    {
        throw new Exception("TransformMatrix was read incorrect");
    }

    // Nouvelle API (Un calque de texte peut contenir n'importe quelle quantité de tailles de police)
    ITextPortion[] portions = ((TextLayer)psdImage.Layers[layerIndex]).TextData.Items;
    ITextStyle style = portions[0].Style;
    double fontSizeOfPortion = matrix[0] * style.FontSize;

    // Vérification de la taille de la police de la portion de base
    if (Math.Abs(100.0 - style.FontSize) > tolerance)
    {
        throw new Exception("Font size was read incorrect");
    }

    // Vérification de la taille de police de la portion réelle
    if (Math.Abs(88.425 - fontSizeOfPortion) > tolerance)
    {
        throw new Exception("TransformMatrix was read incorrect");
    }
}

L’exemple de code suivant illustre la modification de portions de texte et leur style de texte.

[C#]

const double Tolerance = 0.0001;
var filePath = "ThreeColorsParagraphs.psd";
var outputPath = "ThreeColorsParagraph_out.psd";
using (var im = (PsdImage)Image.Load(filePath))
{
    for (int i = 0; i < im.Layers.Length; i++)
    {
        var layer = im.Layers[i] as TextLayer;

        if (layer != null)
        {
            var portions = layer.TextData.Items;

            if (portions.Length != 4)
            {
                throw new Exception();
            }

            // Vérification du texte de chaque portion
            if (portions[0].Text != "Old " ||
                portions[1].Text != "color" ||
                portions[2].Text != " text\r" ||
                portions[3].Text != "Second paragraph\r")
            {
                throw new Exception();
            }

            // Vérification des données des paragraphes
            // Les paragraphes ont une justification différente
            if (
                (int)portions[0].Paragraph.Justification != 0 ||
                (int)portions[1].Paragraph.Justification != 0 ||
                (int)portions[2].Paragraph.Justification != 0 ||
                (int)portions[3].Paragraph.Justification != 2)
            {
                throw new Exception();
            }

            // Toutes les autres propriétés du premier et du deuxième paragraphe sont égales
            for (int j = 0; j < portions.Length; j++)
            {
                var paragraph = portions[j].Paragraph;

                if (Math.Abs(paragraph.AutoLeading - 1.2) > Tolerance ||
                    paragraph.AutoHyphenate != false ||
                    paragraph.Burasagari != false ||
                    paragraph.ConsecutiveHyphens != 8 ||
                    Math.Abs(paragraph.StartIndent) > Tolerance ||
                    Math.Abs(paragraph.EndIndent) > Tolerance ||
                    paragraph.EveryLineComposer != false ||
                    Math.Abs(paragraph.FirstLineIndent) > Tolerance ||
                    paragraph.GlyphSpacing.Length != 3 ||
                    Math.Abs(paragraph.GlyphSpacing[0] - 1) > Tolerance ||
                    Math.Abs(paragraph.GlyphSpacing[1] - 1) > Tolerance ||
                    Math.Abs(paragraph.GlyphSpacing[2] - 1) > Tolerance ||
                    paragraph.Hanging != false ||
                    paragraph.HyphenatedWordSize != 6 ||
                    paragraph.KinsokuOrder != 0 ||
                    paragraph.LetterSpacing.Length != 3 ||
                    Math.Abs(paragraph.LetterSpacing[0]) > Tolerance ||
                    Math.Abs(paragraph.LetterSpacing[1]) > Tolerance ||
                    Math.Abs(paragraph.LetterSpacing[2]) > Tolerance ||
                    paragraph.LeadingType != LeadingMode.Auto ||
                    paragraph.PreHyphen != 2 ||
                    paragraph.PostHyphen != 2 ||
                    Math.Abs(paragraph.SpaceBefore) > Tolerance ||
                    Math.Abs(paragraph.SpaceAfter) > Tolerance ||
                    paragraph.WordSpacing.Length != 3 ||
                    Math.Abs(paragraph.WordSpacing[0] - 0.8) > Tolerance ||
                    Math.Abs(paragraph.WordSpacing[1] - 1.0) > Tolerance ||
                    Math.Abs(paragraph.WordSpacing[2] - 1.33) > Tolerance ||
                    Math.Abs(paragraph.Zone - 36.0) > Tolerance)
                {
                    throw new Exception();
                }
            }

            // Vérification des données de style
            // Les styles ont des couleurs et des tailles de police différentes
            if (Math.Abs(portions[0].Style.FontSize - 12) > Tolerance ||
                Math.Abs(portions[1].Style.FontSize - 12) > Tolerance ||
                Math.Abs(portions[2].Style.FontSize - 12) > Tolerance ||
                Math.Abs(portions[3].Style.FontSize - 10) > Tolerance)
            {
                throw new Exception();
            }

            if (portions[0].Style.FillColor != Color.FromArgb(255, 145, 0, 0) ||
                portions[1].Style.FillColor != Color.FromArgb(255, 201, 128, 2) ||
                portions[2].Style.FillColor != Color.FromArgb(255, 18, 143, 4) ||
                portions[3].Style.FillColor != Color.FromArgb(255, 145, 42, 100))
            {
                throw new Exception();
            }

            for (int j = 0; j < portions.Length; j++)
            {
                var style = portions[j].Style;

                if (style.AutoLeading != true ||
                    style.HindiNumbers != false ||
                    style.Kerning != 0 ||
                    style.Leading != 0 ||
                    style.StrokeColor != Color.FromArgb(255, 175, 90, 163) ||
                    style.Tracking != 50)
                {
                    throw new Exception();
                }
            }

            // Exemple d'édition de texte
            portions[0].Text = "Hello ";
            portions[1].Text = "World";

            // Exemple de suppression de portions de texte
            layer.TextData.RemovePortion(3);
            layer.TextData.RemovePortion(2);

            // Exemple d'ajout d'une nouvelle portion de texte
            var createdPortion = layer.TextData.ProducePortion();
            createdPortion.Text = "!!!\r";
            layer.TextData.AddPortion(createdPortion);

            portions = layer.TextData.Items;

            // Exemple d'édition de paragraphe et de style pour les portions
            // Définir la justification à droite
            portions[0].Paragraph.Justification = JustificationMode.Right;
            portions[1].Paragraph.Justification = JustificationMode.Right;
            portions[2].Paragraph.Justification = JustificationMode.Right;

            // Différentes couleurs pour chaque style. Le sera modifié, mais le rendu n'est pas entièrement pris en charge
            portions[0].Style.FillColor = Color.Aquamarine;
            portions[1].Style.FillColor = Color.Violet;
            portions[2].Style.FillColor = Color.LightBlue;

            // Police différente. Le sera modifié, mais le rendu n'est pas entièrement pris en charge
            portions[0].Style.FontSize = 6;
            portions[1].Style.FontSize = 8;
            portions[2].Style.FontSize = 10;

            layer.TextData.UpdateLayerData();

            im.Save(outputPath, new PsdOptions(im));

            break;
        }
    }
}

Voir également