首页 > 解决方案 > Aspose.Words 将 Word 文档保存为 pdf 格式丢失

问题描述

我正在使用 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;
    }

任何帮助将不胜感激。

标签: asp.net-coreasposeaspose.words

解决方案


出现此问题的原因是缺少字体。有关详细信息,请参阅以下文章。

Aspose.Words 如何使用 True Type 字体

在您的情况下,您需要在执行此 Aspose.Words 代码的机器上安装“Verdana”、“Arial”和“Cambria”字体。只需将这些字体文件从 Windows 机器复制到其他 MAC 机器即可。

我与 Aspose 一起担任开发人员宣传员。


推荐阅读