Aspose.Words сохраняет документ Word, поскольку pdf теряет форматирование

Я использую Aspose.Words для .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;
    }

Любая помощь будет принята с благодарностью.


person nbokmans    schedule 09.08.2018    source источник
comment
Пробовали ли вы последнюю версию Aspose.Words для .NET 18.8? Если проблема не устранена, заархивируйте и загрузите 1) входной документ Word 2) сгенерированный Aspose.Words 18.8 выходной файл, показывающий нежелательное поведение и 3) простое консольное приложение (исходный код без ошибок компиляции) в Dropbox и поделитесь здесь ссылкой для скачивания для тестирования. Я работаю с Aspose в качестве разработчика-евангелиста.   -  person Awais Hafeez    schedule 10.08.2018
comment
@AwaisHafeez Спасибо за ваш ответ. Я создал для вас этот ZIP-файл: dropbox.com/s/2jsxytfnkm07h26/ AsposeWordsDemo.zip?dl=0 — содержит входной документ (ExampleDocument.docx), сгенерированный выходной файл (merged.pdf) и консольное приложение (Program.cs).   -  person nbokmans    schedule 10.08.2018
comment
Проблема возникает из-за отсутствия шрифтов. Подробнее см. в этой статье. В вашем случае установите шрифты «Verdana», «Arial» и «Cambria» на машину, на которой вы выполняете этот код Aspose.Words. Простое копирование этих файлов шрифтов с компьютера Windows на другой компьютер может сработать. Я работаю с Aspose в качестве разработчика-евангелиста.   -  person Awais Hafeez    schedule 11.08.2018
comment
@AwaisHafeez спасибо за ваш ответ. Я только что подтвердил, что это действительно проблема с отсутствующими шрифтами на моем Mac. Поскольку приложение, которое я создаю, в конечном итоге будет работать в Windows, это означает, что исправить проблему не составит труда. Не стесняйтесь оставлять свой комментарий в качестве ответа, и я приму его.   -  person nbokmans    schedule 13.08.2018


Ответы (1)


Проблема возникает из-за отсутствия шрифтов. Подробности см. в следующей статье.

Как Aspose.Words использует шрифты True Type

В вашем случае вам необходимо установить шрифты «Verdana», «Arial» и «Cambria» на машину, на которой вы выполняете этот код Aspose.Words. Простое копирование этих файлов шрифтов с компьютера Windows на другой компьютер MAC должно работать.

Я работаю с Aspose в качестве разработчика-евангелиста.

person Awais Hafeez    schedule 14.08.2018