Telerik. Обработка текстов - без перехода от HTML к PDF - PullRequest
0 голосов
/ 02 июля 2019

Я работаю с Telerik Word Processing (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;

    }

1 Ответ

0 голосов
/ 03 июля 2019

Я нашел лучший, более простой и приятный способ, но это работает, только если у вас есть лицензия 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

Преимущество этого, и снова это работает, только если у вас есть пользовательский интерфейс для ххх.В этом случае я использую пользовательский интерфейс для 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>;

Но это было из-за того, что он не передавал тип объекта jquery объекта HTMLElement.Это делает его немного более надежным, позволяя вам больше в него переходить.

Я подозреваю, что этот ответ будет полезен лишь небольшому числу людей, однако, надеюсь, это поможет кому-то в будущем.

...