iText7 - CSS3 文本溢出 属性 在将 HTML 转换为 PDF 时不呈现
iText7 - CSS3 text-overflow property not rendering when converting HTML to PDF
我正在使用 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;
}
}
}
}
这里是 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>
CSS -webkit-print-color-adjust: exact;
中有一个 属性 允许 CSS3 属性 打印。试试这个我希望它能帮助你。谢谢
body {
-webkit-print-color-adjust: exact;
}
使用替代属性而不是像
这样的文本溢出
overflow:hidden;white-space:nowrap;
PDF 应该用于印刷类文档,具有精确的页面布局。这些属性 (text-overflow
, text-ellipsis
) 与固定布局文档关系不大,它们与具有可变尺寸的媒体(如屏幕)更相关。如果您创建的文档中有些文本被省略,reader 应该如何在纸上阅读它?
没有太大的必要在 PDF 中实现这些与屏幕相关的功能。
我正在使用 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;
}
}
}
}
这里是 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>
CSS -webkit-print-color-adjust: exact;
中有一个 属性 允许 CSS3 属性 打印。试试这个我希望它能帮助你。谢谢
body {
-webkit-print-color-adjust: exact;
}
使用替代属性而不是像
这样的文本溢出overflow:hidden;white-space:nowrap;
PDF 应该用于印刷类文档,具有精确的页面布局。这些属性 (text-overflow
, text-ellipsis
) 与固定布局文档关系不大,它们与具有可变尺寸的媒体(如屏幕)更相关。如果您创建的文档中有些文本被省略,reader 应该如何在纸上阅读它?
没有太大的必要在 PDF 中实现这些与屏幕相关的功能。