Nous avons un docx MailMerge qui a le tableau suivant:MailMerge TaleStart-TableFin: Ajouter Entrée sur la fin de la page avec des lignes multilignes
_____________________________________________________________________________
Date Id Description Amount
_____________________________________________________________________________
{{TableStart {{Id}} {{Description}} € {{Amount
:Lines}}{{Da \# 0,00}}{{
te \@"dd-MM- TableEnd:Li
yyyy"}} nes}}
_____________________________________________________________________________
Total € {{Total \#
0,00}}
_____________________________________________________________________________
est ici une ligne de résultat exemple:
____________________________________________________________________________
Date Id Description Amount
____________________________________________________________________________
03-09-2015 0001 Company Name € 25,00
Buyer Name 1, Buyer Name 2
Product description
Extra description line
Comme vous pouvez voir, la description a plusieurs lignes. Lorsque la fin d'une page est atteinte, elle continue à la page suivante. Donc, avec l'exemple ci-dessus, la ligne pourrait être comme celui-ci à la fin de la page 1:
03-09-2015 0001 Company Name € 25,00
Buyer Name 1, Buyer Name 2
Et comme ça au début de la page 2:
Product description
Extra description line
Ce que je voudrais plutôt est ce qui suit: Lorsqu'un article ne rentre plus sur la page, l'article entier doit aller au début de la page suivante. Fondamentalement, je veux empêcher les articles de se diviser entre les pages. Existe-t-il un moyen d'accomplir cela avec MailMerge?
En outre, nous utilisons C# dans notre projet. Voici le code que nous utilisons pour MailMerge. Je pense qu'il est un peu trop ambitieux de se demander s'il existe un paramètre pour autoriser le comportement que je désire dans les bibliothèques MailMerge. Quoi qu'il en soit, voici le code que nous utilisons pour convertir les données & docx à un pdf:
var pdf = _documentService.CreateTableFile(new TableFileData(date, companyId,
dataList.Select(x => new TableRowData
{
Description = x.Description,
Amount = x.Amount,
Date = x.Date,
Id = x.Id
}).ToList()));
var path = Path.Combine(FileService.GetTemporaryPath(), Path.GetRandomFileName());
var file = Path.ChangeExtension(path, "pdf");
using (var fs = File.OpenWrite(file))
{
fs.Write(pdf, 0, pdf.Length);
}
Process.Start(file);
Avec CreateTableFile méthode:
public byte[] CreateTableFile(TableFileData data)
{
if (data == null) throw new ArgumentNullException("data");
const string fileName = "TableFile.docx";
var path = Path.Combine(_templatePath, fileName);
using (var fs = File.OpenRead(path))
{
var dataSource = new DocumentDataSource(data);
return GenerateDocument(fs, dataSource);
}
}
Avec GenerateDocument méthode:
private static byte[] GenerateDocument(Stream template, DocumentDataSource dataSource, IFieldMergingCallback fieldMergingCallback = null)
{
var doc = new Document(template);
doc.MailMerge.FieldMergingCallback = fieldMergingCallback;
doc.MailMerge.UseNonMergeFields = true;
doc.MailMerge.CleanupOptions = MailMergeCleanupOptions.RemoveContainingFields |
MailMergeCleanupOptions.RemoveUnusedFields |
MailMergeCleanupOptions.RemoveUnusedRegions |
MailMergeCleanupOptions.RemoveEmptyParagraphs;
doc.MailMerge.Execute(dataSource);
doc.MailMerge.ExecuteWithRegions((IMailMergeDataSourceRoot)dataSource);
doc.UpdateFields();
using (var ms = new MemoryStream())
{
var options = new PdfSaveOptions { WarningCallback = new AsposeWarningCallback() };
doc.Save(ms, options);
return ms.ToArray();
}
}
Il semble que vous utilisiez une fonctionnalité de fusion tierce, pas la fusion intégrée. Mais vous ne savez pas si c'est un problème de programmation, * si * vous pouvez le résoudre en sélectionnant la ligne du tableau dans votre document principal de publipostage et en décochant la case "Autoriser la ligne à traverser les pages" (dans l'onglet Ligne du Boîte de dialogue Propriétés du tableau). Peut encore être un problème de veuve/orphelin où la rangée de titre est sur une page et la rangée de données finit la prochaine. –
@bibadia Merci beaucoup, cela a fait l'affaire. J'ai vérifié l'option sur dans les paramètres de la table dans le fichier .docx, et cela fonctionne. Pourriez-vous accepter une réponse, ou voulez-vous que je vous réponde? –
Voulez-vous créer la réponse? (Je n'ai pas d'étapes détaillées à portée de main, par exemple). –