c# - Aspose 在文档上调用 UpdateFields() 会丢失邮件合并字段数据

标签 c# aspose mailmerge aspose.words

我正在尝试使用 Aspose 将 Word 文档(链接到未按预期工作的示例文件的链接)导出为 PDF。 https://1drv.ms/w/s!AheHNqR6oXmSmd5H80L0vzCTfVVrTg

相同的代码如下。

var doc=new Document(<streamFromTheFile>); // Aspose.Words.Document
doc.UpdateFields();// This is required for any possible formula
var outStream=new MemoryStream();
doc.Save(outStream, SaveFormat.Pdf); // Aspose.Words.SaveFormat
File.WriteAllBytes(<exportPdfFilePath>, outStream.ToArray());

所有其他文件都可以正常工作,除了像示例文档中那样具有合并字段的文件,其中甚至当前值都丢失并被合并字段名称替换,如 «AtpIssueDate»。取消 UpdateFields() 方法调用可以解决问题,但无法完成,因为它破坏了逻辑。请帮助如何在不删除导出时调用 UpdateFields() 的情况下保留合并字段的值。

最佳答案

您可以使用以下代码解决此问题:

Document doc = new Document("D:\\temp\\so.docx");

// LOCK merge fields before Updatefields method call
foreach(Field field in doc.Range.Fields)
{
    if (field.Type == FieldType.FieldMergeField)
    {
        field.IsLocked = true;
    }
}

doc.UpdateFields();

// UN-LOCK merge fields after Updatefields method call
foreach (Field field in doc.Range.Fields)
{
    if (field.Type == FieldType.FieldMergeField)
    {
        field.IsLocked = false;
    }
}

doc.Save("D:\\temp\\18.10.pdf");

希望这对您有所帮助。我在 Aspose 工作,担任开发人员推广员。

关于c# - Aspose 在文档上调用 UpdateFields() 会丢失邮件合并字段数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53025761/

相关文章:

PHP fwrite - 哪些文件类型有效? - Linux服务器

mysql - 合并邮件 : only integer columns are shown, 其他为空

c# - MailMerge #foreach 使用 Aspose.Words 的字符串列表

c# - Xamarin 表单切换按钮在 IOS 上的默认颜色

java - aspose:从word文件转换为png格式的模糊图像

c# - DLL Hell - 如果缺少 MySql.Data.dll 版本 6.9.3.0 或 6.8.3.0,我的应用程序将引发错误

java - Aspose:生成首页的缩略图

java - Aspose - 将 Excel 转换为 PDF 很慢

c# - 在 C# 中确定资源的文件路径

c# - 如何使用 FlowDocument 的 IDocumentPaginatorSource DocumentPaginator 将 FlowDocument 转换为 FixedDocument?