iText7 - 将 HTML 转换为 PDF 时不呈现 CSS3 文本溢出属性



我正在使用iText7作为概念验证项目。

我需要证明iText7可以像他们在网站上建议的那样使用CSS3和HTML5。

但是,当我生成 pdf 时,我发现 css3 属性丢失了。

下面是生成 pdf 文件的 .Net 代码。

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;
            }
        }
    }
}

这是我尝试转换为PDF的HTML:-

<!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>

PDF应该用于类似打印的文档,具有精确的页面布局。这些属性(text-overflowtext-ellipsis(与固定布局文档不是很相关,它们与具有可变尺寸的媒体(如屏幕(更相关。如果您创建一个带有省略号文本的文档,读者应该如何在纸上阅读它?

没有必要

在PDF中实现这些与屏幕相关的功能。

使用替代属性而不是文本溢出,例如

overflow:hidden;white-space:nowrap;

CSS -webkit-print-color-adjust: exact;中有一个属性允许打印 CSS3 属性。试试这个,希望它能帮助你。谢谢

body {
  -webkit-print-color-adjust: exact;
}

最新更新