您的精简样本应该可以工作。您可能会看到解决 system.drawing.common 的问题。检查您的构建输出,我的节目
warning NU1701: Package 'OpenXmlPowerTools 4.5.3.2' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework '.NETCoreApp,Version=v3.1'. This package may not be fully compatible with your project.
此代码适用于 Windows 上的 .net core 3.1,其行为将根据您使用的目标/操作系统而有所不同:
private static void Main(string[] args)
{
byte[] byteArray = File.ReadAllBytes(args[0]);
using MemoryStream memoryStream = new MemoryStream();
memoryStream.Write(byteArray, 0, byteArray.Length);
using WordprocessingDocument wDoc = WordprocessingDocument.Open(memoryStream, true);
HtmlConverterSettings htmlConverterSettings = new HtmlConverterSettings
{
ImageHandler = ImageHandler
};
WmlToHtmlConverterSettings settings = new WmlToHtmlConverterSettings(htmlConverterSettings);
XElement htmlElement = WmlToHtmlConverter.ConvertToHtml(wDoc, settings);
XDocument html = new XDocument(new XDocumentType("html", null, null, null), htmlElement);
string htmlString = html.ToString(SaveOptions.DisableFormatting);
File.WriteAllText(args[1], htmlString, Encoding.UTF8);
}
private static XElement ImageHandler(ImageInfo imageInfo)
{
using MemoryStream memoryStream = new MemoryStream();
imageInfo.Bitmap.Save(memoryStream, imageInfo.Bitmap.RawFormat);
string base64 = Convert.ToBase64String(memoryStream.ToArray());
ImageFormat format = imageInfo.Bitmap.RawFormat;
ImageCodecInfo codec = ImageCodecInfo.GetImageDecoders().First(imageCodecInfo => imageCodecInfo.FormatID == format.Guid);
string mimeType = codec.MimeType;
string imageSource = $"data:{mimeType};base64,{base64}";
return new XElement(Xhtml.img, new XAttribute(NoNamespace.src, imageSource), imageInfo.ImgStyleAttribute, imageInfo.AltText != null ? new XAttribute(NoNamespace.alt, imageInfo.AltText) : null);
}
考虑切换到支持 .net > 4.x 和 Windows 以外的操作系统的 OpenXmlPowerTools 的一些分支。