Fermer

avril 14, 2022

Publipostage imbriqué dans la bibliothèque RadWordsProcessing dans R1 2022


Explorez ce qui est possible avec la fonction de fusion et publipostage imbriquée avec cette démo de bibliothèque personnelle.

Le publipostage imbriqué vous permet de gérer des scénarios de publipostage complexes. Il est utile lorsque votre source de données contient des propriétés qui sont des objets métier ou des collections de tels objets et que vous souhaitez accéder à leurs propriétés lors de l'exécution du publipostage. Cela est également utile lors de la création de tableaux.

Dans cet article de blog, nous allons créer un exemple complet d'utilisation de cette fonctionnalité. Nous allons commencer par créer un exemple d'objet métier, créer un document dans le code et enfin effectuer le publipostage et enregistrer le document résultant.

L'exemple crée une représentation d'une bibliothèque personnelle qui répertorie les livres avec leur auteur, leur description et leur position.

Création de notre bibliothèque

Nous pouvons commencer par créer l'objet métier qui représentera la bibliothèque principale. Nous aurons deux objets : un objet qui contiendra les détails du livre et un objet qui contiendra toute la bibliothèque. Les livres sont séparés par genre.

classe AccueilBibliothèque

{

Publique ListerFiction {avoir ; }

Publique ListerNon-fiction {avoir ; }

Publique ListerDes gamins {avoir ; }

Publique AccueilBibliothèque()

{

cette.Fiction =Nouveau Lister();

cette.Non-fiction =Nouveau Lister();

cette.Enfants =Nouveau Lister();

}

}

classe Détails du livre

{

Publique Détails du livre(corde Titre,corde la description,corde position,corde auteur)

{

Titre = titre ;

Descriptif = descriptif ;

Poste = poste ;

cette.Auteur = auteur ;

}

Publique corde Titre {avoir;Positionner ; }

Publique corde La description {avoir;Positionner ; }

Publique corde Position {avoir;Positionner ; }

Publique corde Auteur {avoir;Positionner ; }

}

Nous pouvons maintenant créer une bibliothèque d'échantillons contenant des livres. Dans cet exemple, les données sont stockées dans des fichiers CSV et les propriétés sont séparées par le caractère "#". LeGetLibraryFromFilelit les fichiers CSV ligne par ligne et crée les objets de détail du livre.

Publique statique HomeLibraryCréerSampleLibrary()

{

Bibliothèque HomeLibrary =Nouveau BibliothèqueAccueil();

var nonFiction = GetLibraryFromFile(@"......NonFiction.csv");

bibliothèque.NonFiction.AddRange(nonFiction);

var fiction = GetLibraryFromFile(@"......Fiction.csv");

bibliothèque.Fiction.AddRange(fiction);

var enfants = GetLibraryFromFile (@"......Enfants.csv");

bibliothèque.Kids.AddRange(enfants);

retourner bibliothèque;

}

Publique statique ListerGetLibraryFromFile(corde chemin)

{

Listerbibliothèque =Nouveau Lister();

corde séparateur ="#";

StreamReader readFile =Nouveau StreamReader(chemin);

corde doubler;

corde[]rangée;

pendant que ((ligne = readFile.ReadLine()) !=nul)

{

si (corde.IsNullOrEmpty(ligne))

{

Continuez;

}

row = line.Split(separtor, StringSplitOptions.RemoveEmptyEntries);

Détails du livre =Nouveau Détails du livre(ligne[0]rangée[2]rangée[3]rangée[1]);

bibliothèque.Add(détails);

}

readFile.Close();

retourner bibliothèque;

}

Une fois que nous avons la bibliothèque d'échantillons remplie de données, nous pouvons commencer à créer le document. Pour chacun des genres de notre bibliothèque, nous allons créer un tableau. Chaque tableau aura des lignes pour chaque livre à l'intérieur du genre et des colonnes avec les détails spécifiques du livre.

LeAjouterTable La méthode crée une table et ajoute les colonnes, puis ajoute également les champs de fusion et publipostage imbriqués. Les premier et dernier champs de fusion sont la clé de cette fonctionnalité. Vous devez commencer par leTableStart suivi du nom de la propriété à laquelle vous souhaitez accéder. Ensuite, vous pouvez accéder aux propriétés sous-jacentes comme dans un champ de fusion normal.

Lorsque vous avez terminé avec l'insertion des champs liés aux propriétés, vous devez ajouter un champ de fusion avec leFinTable mot-clé suivi du même nom de propriété également. Plus d'informations à ce sujet sont disponibles dans notre documentation :Publipostage.

statique vide Principale(corde[]arguments)

{

Document RadFlowDocument =Nouveau();

document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.GetHeadingStyleIdByIndex(1));

document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.GetHeadingStyleIdByIndex(2));

Éditeur RadFlowDocumentEditor =Nouveau(document);

Exécutez l'en-tête = editor.InsertText("Répertorier les articles de ma bibliothèque personnelle");

titre.Paragraphe.StyleId ="Titre1";

AddTable(document, éditeur,"Non-fiction");

AddTable(document, éditeur,"Fiction");

AddTable(document, éditeur,"Des gamins");

var collection =Nouveau Lister{ CreateSampleLibrary() } ;

var mergedDocument = document.MailMerge(collection);

Fournisseur DocxFormatProvider =Nouveau DocxFormatProvider ();

Fichier.WriteAllBytes(@"......ma_bibliothèque.docx"fournisseur.Export(mergedDocument));

}

privé statique vide AddTable(document RadFlowDocument, éditeur RadFlowDocumentEditor,corde

nombibliothèque)

{

editor.InsertParagraph();

var run = editor.InsertText(libraryName);

run.Paragraph.StyleId ="Titre2";

var table = éditeur.InsertTable(2, 4);

table.PreferredWidth =Nouveau TableWidthUnit(TableWidthUnitType.Percent, 100);

document.StyleRepository.AddBuiltInStyle(BuiltInStyleNames.TableGridStyleId);

table.StyleId = BuiltInStyleNames.TableGridStyleId ;

AddTextToCelll(table.Rows[0].Cellules[0],"Titre",vrai);

AddTextToCelll(table.Rows[0].Cellules[1],"Auteur",vrai);

AddTextToCelll(table.Rows[0].Cellules[2],"La description",vrai);

AddTextToCelll(table.Rows[0].Cellules[3],"Position",vrai);

AddFieldToCelll(table.Rows[1].Cellules[0]éditeur,« MERGEFIELD TableStart : » + nom de la bibliothèque );

AddFieldToCelll(table.Rows[1].Cellules[0]éditeur,"Titre MERGEFIELD");

AddFieldToCelll(table.Rows[1].Cellules[1]éditeur,"Auteur MERGEFIELD");

AddFieldToCelll(table.Rows[1].Cellules[2]éditeur,"Description du CHAMP DE FUSION");

AddFieldToCelll(table.Rows[1].Cellules[3]éditeur,"Position CHAMP DE FUSION");

AddFieldToCelll(table.Rows[1].Cellules[3]éditeur,"Fin de table MERGEFIELD :" + nom de la bibliothèque );

editor.MoveToTableEnd(table);

editor.InsertParagraph();

}

privé statique vide AddFieldToCelll(TableCell tableCell, éditeur RadFlowDocumentEditor,corde

fieldCode)

{

Paragraphe paragraphe ;

si (tableCell.Blocks.Count == 0)

{

paragraphe = tableCell.Blocks.AddParagraph();

editor.MoveToParagraphStart(paragraphe);

}

autre

{

paragraphe = tableCell.Blocks.Last()comme Paragraphe;

editor.MoveToParagraphEnd(paragraphe);

}

editor.InsertField(fieldCode,"");

}

Publique statique vide AddTextToCelll (cellule TableCell,corde texte,bourdonner boule de glace)

{

var run = cell.Blocks.AddParagraph ().Inlines.AddRun (texte);

si (boule de glace)

{

run.FontWeight = FontWeights.Bold ;

}

}

Nous sommes prêts à tester notre projet et à examiner les résultats. Le document fusionné aura trois tableaux, un pour chaque genre dans notre bibliothèque.

nested_mail_merge_blog_001 - trois tables avec des genres non-fiction, fiction et enfants.

Essayez-le et partagez vos commentaires

Que vous soyez déjà familiarisé avec le traitement de documents Telerik ou que vous rencontriez les bibliothèques pour la première fois, dépêchez-vous et obtenez les derniers éléments afin de pouvoir profiter des différentes possibilités de gestion de documents qu'elles offrent :

Télécharger un essai gratuit

Et je suis sûr que je vous ai dit à plusieurs reprises que votre contribution est précieuse. Nous écoutons. Alors, ne soyez pas timide, envoyez-nous un message pour partager vos commentaires dans la section des commentaires ci-dessous ou directement dans notrePortail de commentaires des bibliothèques de traitement de documents.




Source link