Telerik 文字处理 - 从 HTML 到 PDF 没有删除线
Telerik Words Processing - No line strike through from HTML to PDF
我正在使用 Telerik 文字处理 (WP),在某些情况下,屏幕上的 HTML 输出有一条删除线,表示事件已取消。
由于 WP 的工作方式,它无法以使用链接和相对路径的标准方式使用 CSS,因此我在 CSHTML 文件中使用样式标签。
如果在页面中我使用
.cancelled-event {
color: #c82333;
text-decoration: underline !important
}
文本带有下划线并且颜色正确,如果我使用
.cancelled-event {
color: #c82333;
text-decoration: line-through !important
}
我只是让文字颜色正确。
Overline 也不起作用,但只是对此进行了测试以确保我不是白痴(并不意味着我不是,但仍然是容易检查的对象之一)
我需要帮助的是,
- 还有其他人遇到过这种情况吗?如果是,你是怎么解决的,
- 还有什么建议,有没有得到
CSHTML页面如下,munis代码会把这个问题搞得一团糟。
<style>
.date-selection {
border: 1px solid #8c8c8c;
background-color: #ffffff
}
.cancelled-event {
color: #c82333;
text-decoration: line-through !important
... more styles here...
}
</style>
<img src="http://localhost:8001/images/logo.png" />
<br/>
<partial name="~/Views/Roster/_RosterAgenda.cshtml" model="@Model" />
我知道删除线确实在 2/3 的情况下显示。
- 在视图中 - 作品
- 鉴于我有一个出口,我可以在 pdf 之前将数据推送到视图 - 有效
- 在 PDF 中 - 不起作用。
PDF 生成是这样完成的,传入的字节数组是 base 64 编码的,因为原始文件信息正在通过网络从一个系统传递到 API。
public byte[] ConvertHtmlToPdf(byte[] fileData, string extension, PageSettings.PageOrientation orientation)
{
byte[] convertedData = null;
var base64EncodedBytes = Convert.FromBase64String(Encoding.Default.GetString(fileData));
var html = Encoding.UTF8.GetString(base64EncodedBytes);
HtmlFormatProvider htmlProvider = new HtmlFormatProvider();
RadFlowDocument document = htmlProvider.Import(html);
IFormatProvider<RadFlowDocument> provider = this.providers
.FirstOrDefault(p => p.SupportedExtensions
.Any(e => string.Compare(extension, e, StringComparison.InvariantCultureIgnoreCase) == 0));
if (provider == null)
{
Log.Error($"No provider found that supports the extension: {extension}");
return null;
}
var quality = Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Export.ImageQuality.Medium;
PdfFormatProvider formatProvider = new PdfFormatProvider();
formatProvider.ExportSettings.ImageQuality = quality;
if (document.Sections.Any())
{
foreach (var section in document.Sections)
{
//section.PageOrientation = orientation == PageSettings.PageOrientation.Landscape ? PageOrientation.Landscape : PageOrientation.Portrait;
section.Rotate(orientation == PageSettings.PageOrientation.Landscape ? PageOrientation.Landscape : PageOrientation.Portrait);
}
}
using (var stream = new MemoryStream())
{
formatProvider.Export(document, stream);
convertedData = stream.ToArray();
}
return convertedData;
}
我找到了一种更好、更简单、更好的方法,但这只有在您也拥有 Kendo 工具许可证的情况下才有效。
$(".export-pdf").click(function() {
// Convert the DOM element to a drawing using kendo.drawing.drawDOM
kendo.drawing.drawDOM($(".content-wrapper"))
.then(function(group) {
// Render the result as a PDF file
return kendo.drawing.exportPDF(group, {
paperSize: "auto",
margin: { left: "1cm", top: "1cm", right: "1cm", bottom: "1cm" }
});
})
.done(function(data) {
// Save the PDF file
kendo.saveAs({
dataURI: data,
fileName: "HR-Dashboard.pdf",
proxyURL: "https://demos.telerik.com/kendo-ui/service/export"
});
});
});
按照惯例,Telerik 文档很糟糕,要找到任何你想要的东西,你几乎必须开始寻找其他东西。但是,此代码是在
处找到的
https://www.telerik.com/blogs/5-ways-export-asp-net-word-pdf-file
这样做的好处,再一次,这只有在你有 UI 的 xxx 时才有效。在这种情况下,我将 UI 用于 ASP.Net 核心,并且还使用 Typescript,它也需要修改确定类型的文件 kendo.all.d.ts。
function drawDOM(element: JQuery, options: any): JQueryPromise<any>; //Existing code in the d.ts file
function drawDOM(element: JQuery<HTMLElement>);
function drawDOM(element: any, options?: any): JQueryPromise<any>;
但这是因为没有传入 HTMLElement 的 jquery 对象类型。这使它更加健壮,使您能够将更多信息传递给它。
我怀疑这个答案只会对少数人有用,但是,希望这对将来的人有所帮助。
我正在使用 Telerik 文字处理 (WP),在某些情况下,屏幕上的 HTML 输出有一条删除线,表示事件已取消。
由于 WP 的工作方式,它无法以使用链接和相对路径的标准方式使用 CSS,因此我在 CSHTML 文件中使用样式标签。
如果在页面中我使用
.cancelled-event {
color: #c82333;
text-decoration: underline !important
}
文本带有下划线并且颜色正确,如果我使用
.cancelled-event {
color: #c82333;
text-decoration: line-through !important
}
我只是让文字颜色正确。
Overline 也不起作用,但只是对此进行了测试以确保我不是白痴(并不意味着我不是,但仍然是容易检查的对象之一)
我需要帮助的是,
- 还有其他人遇到过这种情况吗?如果是,你是怎么解决的,
- 还有什么建议,有没有得到
CSHTML页面如下,munis代码会把这个问题搞得一团糟。
<style>
.date-selection {
border: 1px solid #8c8c8c;
background-color: #ffffff
}
.cancelled-event {
color: #c82333;
text-decoration: line-through !important
... more styles here...
}
</style>
<img src="http://localhost:8001/images/logo.png" />
<br/>
<partial name="~/Views/Roster/_RosterAgenda.cshtml" model="@Model" />
我知道删除线确实在 2/3 的情况下显示。
- 在视图中 - 作品
- 鉴于我有一个出口,我可以在 pdf 之前将数据推送到视图 - 有效
- 在 PDF 中 - 不起作用。
PDF 生成是这样完成的,传入的字节数组是 base 64 编码的,因为原始文件信息正在通过网络从一个系统传递到 API。
public byte[] ConvertHtmlToPdf(byte[] fileData, string extension, PageSettings.PageOrientation orientation)
{
byte[] convertedData = null;
var base64EncodedBytes = Convert.FromBase64String(Encoding.Default.GetString(fileData));
var html = Encoding.UTF8.GetString(base64EncodedBytes);
HtmlFormatProvider htmlProvider = new HtmlFormatProvider();
RadFlowDocument document = htmlProvider.Import(html);
IFormatProvider<RadFlowDocument> provider = this.providers
.FirstOrDefault(p => p.SupportedExtensions
.Any(e => string.Compare(extension, e, StringComparison.InvariantCultureIgnoreCase) == 0));
if (provider == null)
{
Log.Error($"No provider found that supports the extension: {extension}");
return null;
}
var quality = Telerik.Windows.Documents.Fixed.FormatProviders.Pdf.Export.ImageQuality.Medium;
PdfFormatProvider formatProvider = new PdfFormatProvider();
formatProvider.ExportSettings.ImageQuality = quality;
if (document.Sections.Any())
{
foreach (var section in document.Sections)
{
//section.PageOrientation = orientation == PageSettings.PageOrientation.Landscape ? PageOrientation.Landscape : PageOrientation.Portrait;
section.Rotate(orientation == PageSettings.PageOrientation.Landscape ? PageOrientation.Landscape : PageOrientation.Portrait);
}
}
using (var stream = new MemoryStream())
{
formatProvider.Export(document, stream);
convertedData = stream.ToArray();
}
return convertedData;
}
我找到了一种更好、更简单、更好的方法,但这只有在您也拥有 Kendo 工具许可证的情况下才有效。
$(".export-pdf").click(function() {
// Convert the DOM element to a drawing using kendo.drawing.drawDOM
kendo.drawing.drawDOM($(".content-wrapper"))
.then(function(group) {
// Render the result as a PDF file
return kendo.drawing.exportPDF(group, {
paperSize: "auto",
margin: { left: "1cm", top: "1cm", right: "1cm", bottom: "1cm" }
});
})
.done(function(data) {
// Save the PDF file
kendo.saveAs({
dataURI: data,
fileName: "HR-Dashboard.pdf",
proxyURL: "https://demos.telerik.com/kendo-ui/service/export"
});
});
});
按照惯例,Telerik 文档很糟糕,要找到任何你想要的东西,你几乎必须开始寻找其他东西。但是,此代码是在
处找到的https://www.telerik.com/blogs/5-ways-export-asp-net-word-pdf-file
这样做的好处,再一次,这只有在你有 UI 的 xxx 时才有效。在这种情况下,我将 UI 用于 ASP.Net 核心,并且还使用 Typescript,它也需要修改确定类型的文件 kendo.all.d.ts。
function drawDOM(element: JQuery, options: any): JQueryPromise<any>; //Existing code in the d.ts file
function drawDOM(element: JQuery<HTMLElement>);
function drawDOM(element: any, options?: any): JQueryPromise<any>;
但这是因为没有传入 HTMLElement 的 jquery 对象类型。这使它更加健壮,使您能够将更多信息传递给它。
我怀疑这个答案只会对少数人有用,但是,希望这对将来的人有所帮助。