Как конвертировать HTML в Docx с помощью .net core, C# бесплатноC#

Место общения программистов C#
Ответить
Anonymous
 Как конвертировать HTML в Docx с помощью .net core, C# бесплатно

Сообщение Anonymous »

Мне нужно бесплатно конвертировать HTML в DOCX или PDF в DOCX, но я не могу найти свежих ответов.
Я попробовал этот код:
public static byte[] HtmlToWord(String html)
{
const string filename = "test.docx";
if (File.Exists(filename)) File.Delete(filename);

using (MemoryStream generatedDocument = new MemoryStream())
{
using (WordprocessingDocument package = WordprocessingDocument.Create(
generatedDocument, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = package.MainDocumentPart;
if (mainPart == null)
{
mainPart = package.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
}

HtmlConverter converter = new HtmlConverter(mainPart);
Body body = mainPart.Document.Body;

var paragraphs = converter.Parse(html);
for (int i = 0; i < paragraphs.Count; i++)
{
body.Append(paragraphs);
}

mainPart.Document.Save();
}

return generatedDocument.ToArray();
}

Но в этом коде я получаю исключение нулевой ссылки
var paragraphs = converter.Parse (html);
может кто-нибудь помочь решить текущую ошибку или посоветовать другие способы конвертации
Update 1

Этот HTML-код выдает исключение нулевой ссылки. Я генерирую его в виде бритвы.
Код для создания HTML-кода в виде бритвы
private readonly IRazorViewEngine _razorViewEngine;
private readonly ITempDataProvider _tempDataProvider;
private readonly IServiceProvider _serviceProvider;

public ViewRenderService(IRazorViewEngine razorViewEngine,
ITempDataProvider tempDataProvider,
IServiceProvider serviceProvider)
{
_razorViewEngine = razorViewEngine;
_tempDataProvider = tempDataProvider;
_serviceProvider = serviceProvider;
}

public async Task RenderToStringAsync(string viewName, object model)
{
var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());

using (var sw = new StringWriter())
{
var viewResult = _razorViewEngine.FindView(actionContext, viewName, false);

if (viewResult.View == null)
{
throw new ArgumentNullException($"{viewName} does not match any available view");
}

var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
{
Model = model
};

var viewContext = new ViewContext(
actionContext,
viewResult.View,
viewDictionary,
new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),
sw,
new HtmlHelperOptions()
);

await viewResult.View.RenderAsync(viewContext);
return sw.ToString();
}
}


Подробнее здесь: https://stackoverflow.com/questions/686 ... p-for-free
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»