Fermer

novembre 17, 2021

Remplacer le texte par tout autre élément—Telerik WordsProcessing


Avec la R3 2021, nous avons introduit une nouvelle fonctionnalité dans la bibliothèque WordsProcessing : remplacez le texte par d'autres éléments du document.

Cette fonctionnalité vous permet de trouver facilement n'importe quel texte à l'intérieur du document et de le remplacer par un tableau, une image, un paragraphe ou juste un autre texte. Toutes ces fonctionnalités sont encapsulées dans une méthode unique qui comporte différentes surcharges pour une flexibilité maximale.

Aujourd'hui, je vais montrer comment vous pouvez utiliser la fonctionnalité Remplacer le texte pour générer un document représentant un achat en ligne à l'aide d'un modèle prédéfini pour les données statiques. Voici le modèle que nous utiliserons dans ce post : nous devrons renseigner le nom du client et les produits qu'il a achetés. Voyons comment cela peut être réalisé.

Notre première tâche consiste à importer le modèle dans une instance RadFlowDocument . Je l'ai au format DOCX, donc j'utiliserai DocxFormatProvider:

RadFlowDocument document;

using (Stream input = File.OpenRead([19659010]"template.docx"))

{

    DocxFormatProvider provider = nouveau DocxFormatProvider();

    document = provider.Import(input);

}

Il est maintenant temps de remplir les données. Dans l'extrait suivant, vous pouvez voir la classe qui contient les informations que nous devons remplir. Gardez à l'esprit que, pour les besoins de l'exemple, j'utiliserai des données statiques, mais vous pouvez les remplir de n'importe où : serveur, base de données, entrée utilisateur, etc.

public class Order

{

    public long ID { get ; ensemble  ; }

    public string CustomerName { get ; ensemble  ; }

    public Liste Produits { get ; ensemble  ; }

  

    public static Order GetSampleOrder()

    {

        Liste produits = nouveau] 19Liste[194590(){

            new ProductInfo() { Name = "Jeans"Prix = 33,6M, Quantité = 1, ImagePath = "../../jeans.jpg" },

            new ProductInfo() { Name = [19659010]"T-shirt"Prix = 10,99M, Quantité = 1, ImagePath = "../../t-shirt.png" },[19659002]            new ProductInfo() { Name = "Socks"Price = 2,99M, Quantity = 3, ImagePath = ". ./../socks.jpg" },

            new ProductInfo() { Name = "Robe"[19659011]Prix = 52,99M, Quantité = 1, ImagePath = "../../dress.jpg" }

        } ;

  

        Commande = nouveau Commande() { ID = 123456, CustomerName = "John"Products = products };

        return order;[19659002]    }

  

}

  

public class ProductInfo

{

    public string Name { get ; ensemble  ; }

    public decimal Prix { get ; ensemble  ; }

    public string ImagePath { get; ensemble  ; }

    public int Quantity { get ; ensemble  ; }

}

Ayant les données nécessaires, commençons à remplir notre modèle. Le premier espace réservé dans le modèle est le nom du client. Il peut être remplacé de manière assez simple :

Order order = Order.GetSampleOrder();

RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);

editor.ReplaceText("[customer name]"order.CustomerName);

Pour générer le tableau, nous devrons itérer les produits à l'intérieur de la commande , extrayez leurs données et remplissez la table avec.

private Table CreateTable(RadFlowDocument document, Order order)

{

{

    Border border = new Border(1, BorderStyle.Single, new ThemableColor(Colors.LightGray));

    Table productsTable = new Table(document);

    productsTabl e.PreferredWidth = new TableWidthUnit(TableWidthUnitType.Percent, 100);

   productsTable.Borders = Table (border, border, border, border);

 

    // Générer la ligne d'en-tête

    TableRow firstRow = productsTable.Rows.AddTableRow();

 

    AddCellWithTextContent(firstRow), "Produit"true);

    AddCellWithTextContent(firstRow, "Image"[19659015]true);

    AddCellWithTextContent(firstRow, "Quantity"true);

    AddCellWithTextContent(firstRow, "Price"true);

 

    [19659178]// Générer une ligne pour chaque produit

    foreach (var product in order.Products)

    {

        TableRow row = productsTable.Rows.AddTableRow();[19659002] 

        this.AddCellWithTextContent(row, product.Name);

 

        TableCell cell = row.Cells.AddTableCell();

        cell.Borders = new TableCellB nullbordure, nullbor der);

        cell.Padding = new Telerik.Windows.Documents.Primitives.Padding(5);

 

        ImageInline image = new ImageInline(document);

[        19659057]image.Image.ImageSource = new ImageSource(File.ReadAllBytes(product.ImagePath), Path.GetExtension(product.ImagePath));

        image.Image.SetHeight(true40);

 

        Paragraph paragraphe = cellule. Blocks.AddParagraph();

        paragraph.Inlines.Add(image);

 

        this.AddCellWithTextContent( row, product.Quantity.ToString());

        this.AddCellWithTextContent(row, product.Price.ToString("C" ));

    }

 

    retour productsTable;

}

 

privé void AddCellWithTextContent(TableRow ligne, string cellContent, bool isHeaderCell = false)

{

    TableCell cell = row.Cells.AddTableCell();

 

    ThemableColor lightGrayColor = new ]ThemableColor(Colors.LightGray);

    Border border = new Border(1, BorderStyle.Single, lightGrayColor);

    cell.Borders = new TableCellBorders(nullbordure, nullbordure);

 

    Run run = new Run(row.Document);

    run.Text = cellContent;

 

    if (isHeaderCell)

    {

        run.FontWeight = FontWeights.Bold;

        cell.Shadingray.ColorColor;[459002]        cell.Shadingray. ]

    }

 

    Paragraphe paragraphe = cell.Blocks.AddParagraph();

    paragraphe .Inlines.Add(run);

}

En plus de chaque produit spécifique et de ses détails, la somme totale est également très importante. C'est pourquoi j'ai décidé d'ajouter un paragraphe après le tableau pour montrer également cette information. Voici comment je génère ce paragraphe :

private Paragraph CreateParagraphTotal(RadFlowDocument document, Order order)

{

    [19659026]décimal total = 0;

 

    foreach (var produit dans ordre. Produits)

    {

        total += produit.Prix * produit.Quantité ;

    }

 

    Exécuter exécuter = nouveau Run(document);

    run.FontWeight = FontWeights.Bold;

    [19659014]run.FontSize = 20;

    run.Text = string.Format("Total : " + total.ToString("C") + " tt");

 

    Paragraphe paragraphe = nouveau Paragraphe(document);

    paragraph.Properties.TextAlignment.LocalValue = Alignment.Right;

    paragraph.Inlines .Ajouter(exécuter);

 

    retourner paragraphe;

}

Il ne reste plus qu'à assembler les pièces et à remplacer l'espace réservé par les éléments générés.

Table productsTable = this.CreateTable(document, order);

Paragraphe paragrapheTotal = ceci .CreateParagraphTotal(document, order);

 

List blocksToInsert = new List() { productsTable, paragrapheTotal } ;

editor.ReplaceText("[products table]"blocksToInsert);

C'est tout. Le document rempli est maintenant prêt à être exporté dans l'un des formats pris en charge et envoyé à votre client. Dans l'image suivante, vous pouvez voir à quoi ressemble le document :

Le contenu remplacé

J'espère que vous aimez la nouvelle fonctionnalité et que vous conviendrez que cette fonctionnalité facilitera la création des documents vos utilisateurs ont besoin de beaucoup plus de facilité.

Partagez vos commentaires

Si vous n'avez toujours pas essayé Telerik Document Processing, utilisez le bouton ci-dessous pour obtenir une version d'essai et explorer toutes les fonctionnalités et possibilités des bibliothèques.

Les bibliothèques sont livrées gratuitement avec tous nos packs de produits Web et de bureau ainsi qu'avec chaque produit individuel.

Téléchargez un essai gratuit

Si vous connaissez déjà le package, n'oubliez pas que nous sommes impatients d'entendre vos réactions. N'hésitez pas à nous laisser un commentaire ci-dessous pour partager vos réflexions. Ou visitez notre Portail de commentaires sur les bibliothèques de traitement de documents pour nous faire savoir si vous avez des suggestions ou si vous avez besoin de fonctionnalités particulières.




Source link