对类型 'Bitmap' 的引用声称它在"System.Drawing"中定义,但找不到



我正在尝试使用.NET Core Project中的XML电动工具将DOCX文件转换为HTML。一切都很顺畅,直到我在文档文件中遇到图像。我尝试了以下代码使用打开的XML电动工具导出图像

using (WordprocessingDocument wDoc = 
   WordprocessingDocument.Open(memoryStream, true))
{
WmlToHtmlConverterSettings settings = new WmlToHtmlConverterSettings()
{
    ImageHandler = imageInfo =>
    {
        imageInfo.Bitmap.Save([...]);
        ImageFormat format = imageInfo.Bitmap.RawFormat;
    }
}
XElement htmlElement = WmlToHtmlConverter.ConvertToHtml(wDoc, settings);
}

当我在ImageHandler中使用imageInfo.Bitmap.Save(ms, imageFormat);'时。我确实尝试从Nuget添加System.Drawing.Common软件包,但这并不能解决错误。

您的剥离样品应起作用。您可能会观看解决System.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一起使用,其行为将根据您使用过的目标/OS而不同:

      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和OS在Windows旁边。

最新更新