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
get
;
ensemble
; }
public
static
Order GetSampleOrder()
{
Liste
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 null
bordure,
null
bor 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(
true
40);
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(
null
bordure,
null
bordure);
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
new
List
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 :
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.
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