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
Lister
avoir
; }
Publique
Lister
avoir
; }
Publique
Lister
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
Lister
corde
chemin)
{
Lister
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
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.
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 :
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