代码之家  ›  专栏  ›  技术社区  ›  nbokmans

Words将Word文档保存为pdf格式将丢失格式

  •  0
  • nbokmans  · 技术社区  · 6 年前

    我正在使用Aspose.Words for.NET替换文档中的某些合并字段,然后将文件保存为PDF,但是,由于转换为PDF(请参阅图片),我的格式设置变得混乱(即使是非合并字段)。代码很简单,所以我看不出我遗漏了什么。

    word文档,预处理: enter image description here

    生成的pdf: enter image description here

    正如您所看到的,有些字段缩进了一点,而不是很好地对齐。

    生成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 回复  |  直到 6 年前
        1
  •  1
  •   Awais Hafeez    6 年前

    出现问题的原因是缺少字体。详情请参阅以下文章。

    How Aspose.Words Uses True Type Fonts

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

    我和Aspose一起做开发传道者。