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 也不起作用,但只是对此进行了测试以确保我不是白痴(并不意味着我不是,但仍然是容易检查的对象之一)

我需要帮助的是,

  1. 还有其他人遇到过这种情况吗?如果是,你是怎么解决的,
  2. 还有什么建议,有没有得到

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 的情况下显示。

  1. 在视图中 - 作品
  2. 鉴于我有一个出口,我可以在 pdf 之前将数据推送到视图 - 有效
  3. 在 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 对象类型。这使它更加健壮,使您能够将更多信息传递给它。

我怀疑这个答案只会对少数人有用,但是,希望这对将来的人有所帮助。