iText7 - CSS3-свойство переполнения текста не отображается при конвертации HTML в PDF - PullRequest
3 голосов
/ 04 апреля 2019

Я играю с iText7 в качестве доказательства концепции проекта.

Мне нужно доказать, что iText7 может использовать CSS3 и HTML5, как они предлагают на своем сайте.

Тем не менее, я обнаружил, что когда я генерирую PDF, свойства css3 теряются.

Ниже приведен код .Net, который генерирует PDF-файл.

public class HtmlToPdfService : IHtmlToPdfService
    {
        public async Task CreatePdfFromHtmlFileStreamAsync(IFormFile file)
        {
            try
            {
                if (file == null)
                {
                    throw new ArgumentException("file cannot be null or empty.");
                }

                var filename = $"{Path.GetFileNameWithoutExtension(file.FileName)}.pdf";

                var stream = new MemoryStream();

                var html = string.Empty;
                using (var reader = new StreamReader(file.OpenReadStream()))
                {
                    var converterProperties = new ConverterProperties();

                    html = reader.ReadToEnd();

                    using (var pdfWriter = new PdfWriter(stream))
                    {
                        pdfWriter.SetCloseStream(false);
                        HtmlConverter.ConvertToPdf(html, pdfWriter, converterProperties);
                    }
                }

                stream.Position = 0;


                using (var fileStream = new FileStream(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot/pdf", filename), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
                {
                    await stream.CopyToAsync(fileStream);
                }

            }
            catch (Exception x)
            {
                throw x;
            }
        }
    }
}

Вот HTML-код, который я пытался преобразовать в PDF: -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
     p {
        width: 200px;
        border: 1px solid;
        padding: 2px 5px;

        /* BOTH of the following are required for text-overflow */
        white-space: nowrap;
        overflow: hidden;
    }

    .overflow-visible {
        white-space: initial;
    }

    .overflow-clip {
        text-overflow: clip;
    }

    .overflow-ellipsis {
        text-overflow: ellipsis;
    }

    .overflow-string {
    /* Not supported in most browsers, 
        see the 'Browser compatibility' section below */
        text-overflow: " [..]"; 
    }
</style>
</head>
    <body>
            <p class="overflow-visible">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
            <p class="overflow-clip">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
            <p class="overflow-ellipsis">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
            <p class="overflow-string">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </body>
</html>

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

PDF предполагается использовать для печатных документов с точным макетом страницы.Эти свойства (text-overflow, text-ellipsis) не очень важны для документов с фиксированным макетом, они более актуальны для носителей с переменными размерами, таких как экраны.Если вы создаете документ с многоточием текста, как читатель должен прочитать его на бумаге?

Нет большой необходимости реализовывать эти функции, связанные с экраном, в PDF.

0 голосов
/ 16 апреля 2019

Используйте альтернативные свойства вместо переполнения текста, как

overflow:hidden;white-space:nowrap;
0 голосов
/ 10 апреля 2019

В CSS -webkit-print-color-adjust: exact; есть свойство, позволяющее печатать свойство CSS3.Попробуйте это, я надеюсь, это поможет вам.Спасибо

body {
  -webkit-print-color-adjust: exact;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...