Telerik文字处理-从HTML到PDF的行都不会穿过

时间:2019-07-02 10:29:39

标签: telerik pdf-generation html-to-pdf telerik-words-processing

我正在使用Telerik文字处理(WP),在某些情况下,屏幕上的HTML输出中有一行删除线,表明事件已取消。

由于WP的工作原理,它无法以标准方式使用链接和相对路径来使用CSS,因此会在CSHTML文件中使用样式标签。

如果在页面中我使用

.cancelled-event {
    color: #c82333;
    text-decoration: underline !important
}

如果我使用

,则该文本带有下划线并正确着色。
.cancelled-event {
    color: #c82333;
    text-decoration: line-through !important
}

我只给文本加上了正确的颜色。

Overline也行不通,但是仅对此进行了测试,以确保Im不会成为白痴(并不意味着Im不是白痴,而是仍然是容易检查的对象之一)

我想提供的帮助是

  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;

    }

1 个答案:

答案 0 :(得分:0)

我找到了一种更好,更轻松,更好的方法,但这仅在您也拥有Kendo Tools许可证的情况下才有效。

$(".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

这样做的好处,而且只有在您拥有用于xxx的用户界面时,这才再次有效。在这种情况下,我将UI用于ASP.Net Core,也使用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对象类型。这使它更加健壮,使您可以传递更多信息。

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