我使用Aspose.Words for .NET来替换我的文档中的一些合并字段,然后将文件保存为PDF,但是,我的格式化通过转换为PDF(即使对于非合并字段)也变得混乱(参考图像) . 代码很简单,所以我看不到我错过的东西 .
word文档,预处理:
生成的pdf:
正如您所看到的,某些字段缩进了一点而不是很好地对齐 .
我生成PDF并替换合并字段的代码是:
public async Task<Stream> GenerateContractAsync(string requestRegistrationId)
{
var requestRegistration = await _requestRegistrationRepository
.FindRequestRegistration(requestRegistrationId)
.Include(rr => rr.Request.QualityType)
.Include(rr => rr.User)
.SingleOrDefaultAsync();
var file = await _fileService
.LoadFileAsync("Concept contract.docx");
var user = requestRegistration.User;
var document = new Aspose.Words.Document(file);
document.MailMerge.Execute(
new[]
{
"EmployeeName", "EmployeeDateOfBirth", "EmployeePlaceOfBirth", "EmployeeSSN", "EmployeeCity",
"EmployeeAddress", "ContractStartDate", "EmployeeFunction", "HourlyWage", "WageDeductionApplied"
},
new object[]
{
user.FullName, $"{user.Birthday:dd-MM-yyyy}", "Oss", user.Bsn, user.City,
$"{user.PostalCode}, {user.City}", $"{requestRegistration.Request.StartDate:dd-MM-yyyy}",
requestRegistration.Request.QualityType.Name, $"{requestRegistration.Request.HourlyRate:C}",
user.PayrollTaxDiscountEnabled ? "Ja" : "Nee"
}
);
var mergedDocumentStream = new MemoryStream();
document.Save(mergedDocumentStream, SaveFormat.Pdf);
#if DEBUG
mergedDocumentStream.Seek(0, SeekOrigin.Begin);
await _fileService.SaveFileToDiskAsync($"{user.Id}-{DateTimeOffset.Now:g}.pdf", "", mergedDocumentStream);
#endif
mergedDocumentStream.Seek(0, SeekOrigin.Begin);
return mergedDocumentStream;
}
任何帮助将不胜感激 .
1 回答
出现问题是因为缺少字体 . 有关详细信息,请参阅以下文章 .
How Aspose.Words Uses True Type Fonts
在您的情况下,您需要在执行此Aspose.Words代码的机器上安装“Verdana”,“Arial”和“Cambria”字体 . 只需将这些字体文件从Windows机器复制到其他MAC机器即可 .
我和Aspose一起担任开发者布道者 .