- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用如下编码并且工作正常。这些程序将 word 文件转换为带有图像的 html 文件。
方程式有问题。我无法转换 ms word 文件方程式 HTML。
有人可以帮忙吗?
FileUpload1.SaveAs(Server.MapPath(FileUpload1.FileName));
string imageDirectoryName = FileUpload1.FileName + "_files";
DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(imageDirectoryName));
if (dirInfo.Exists)
{
// Delete the directory and files.
foreach (var f in dirInfo.GetFiles())
f.Delete();
dirInfo.Delete();
}
int imageCounter = 0;
byte[] byteArray = File.ReadAllBytes(sourceDocumentFileName);
using (MemoryStream memoryStream = new MemoryStream())
{
memoryStream.Write(byteArray, 0, byteArray.Length);
using (WordprocessingDocument doc =
WordprocessingDocument.Open(memoryStream, true))
{
HtmlConverterSettings settings = new HtmlConverterSettings()
{
//PageTitle = "Test Title",
//ConvertFormatting = false,
};
XElement html = HtmlConverter.ConvertToHtml(doc, settings,
imageInfo =>
{
DirectoryInfo localDirInfo = new DirectoryInfo(Server.MapPath(imageDirectoryName));
if (!localDirInfo.Exists)
localDirInfo.Create();
++imageCounter;
string extension = imageInfo.ContentType.Split('/')[1].ToLower();
ImageFormat imageFormat = null;
if (extension == "png")
{
// Convert the .png file to a .jpeg file.
extension = "jpeg";
imageFormat = ImageFormat.Jpeg;
}
else if (extension == "bmp")
imageFormat = ImageFormat.Bmp;
else if (extension == "jpeg")
imageFormat = ImageFormat.Jpeg;
else if (extension == "tiff")
imageFormat = ImageFormat.Tiff;
else if (extension == "wmf")
imageFormat = ImageFormat.Jpeg;
else if (extension == "png")
imageFormat = ImageFormat.Png;
// If the image format is not one that you expect, ignore it,
// and do not return markup for the link.
if (imageFormat == null)
return null;
string imageFileName = imageDirectoryName + "/image" +
imageCounter.ToString() + "." + extension;
try
{
imageInfo.Bitmap.Save(Server.MapPath(imageFileName), imageFormat);
}
catch (System.Runtime.InteropServices.ExternalException)
{
return null;
}
XElement img = new XElement(Xhtml.img,
new XAttribute(NoNamespace.src, imageFileName),
imageInfo.ImgStyleAttribute,
imageInfo.AltText != null ?
new XAttribute(NoNamespace.alt, imageInfo.AltText) : null);
return img;
});
File.WriteAllText(fileInfo.Directory.FullName + "/" + fileInfo.Name.Substring(0,
fileInfo.Name.Length - fileInfo.Extension.Length) + ".html",
html.ToStringNewLineOnAttributes());
}
}
最佳答案
第 1 步 - 您应该到这里了解如何在 word 文件中获取 Math 对象 here
第 2 步 - 遍历 word 文件的段落并选择其中的 OfficeMath 对象,将其转换为 MathML(参见第 1 步),如果您可以转换为 LaTex想要(我认为在 HTML 中使用 LaTex 会很友好)
注意:在第 1 步中从 MMOL2MML 转换为 LaTex 将类似 see here to get file
第 3 步 - 在第 2 步的对象之前/之后插入内容为 MathML/LaTex 的文本对象(在第 2 步中)。使用此步骤是因为当使用 HtmlConverter.ConvertToHtml
时会丢失 Word 内容中的数学对象,因此当您在对象数学之前/之后插入时,文本将在 HTML 中可用
这是我的代码:
using (WordprocessingDocument doc = WordprocessingDocument.Open(docFilePath, true))
{
foreach (var paragraph in doc.MainDocumentPart.RootElement.Descendants<Paragraph>())
{
foreach (var ele in paragraph.Descendants<DocumentFormat.OpenXml.Math.OfficeMath>())
{
string wordDocXml = ele.OuterXml;
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(officeMathMLSchemaFilePath);
var result = "";
using (TextReader tr = new StringReader(wordDocXml))
{
// Load the xml of your main document part.
using (XmlReader reader = XmlReader.Create(tr))
{
using (MemoryStream ms = new MemoryStream())
{
XmlWriterSettings settings = xslTransform.OutputSettings.Clone();
// Configure xml writer to omit xml declaration.
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.OmitXmlDeclaration = true;
XmlWriter xw = XmlWriter.Create(ms, settings);
// Transform our OfficeMathML to MathML.
xslTransform.Transform(reader, xw);
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
{
result = MathML2Latex(sr.ReadToEnd());
officeMLFormulas.Add(result);
}
}
}
}
Run run = new Run();
run.Append(new Text(result));
ele.InsertBeforeSelf(run);
}
}
}
关于c# - 如何在 C# 中借助 memoryStream 将带有图像和方程式的 ms word 文件转换为 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870304/
我想弄清楚如何将一周内的所有工作时间相加。 “hours”代表一周工作的小时数,“hoursDay”代表一天的工作小时数。唯一的问题是弄清楚如何在它们都由相同的名称表示时将它们全部添加。下面是我的代码
我正在尝试制定一个方程式,根据每 XX 时间的新用户及其推荐用户的输入来确定给定时间的用户数量。 基本上,我们希望每周向系统手动添加 100 个用户。我们假设每个新用户在接下来的每个星期都会再推荐一个
我正在尝试提出一个评级算法 - 所以它会做的是,从用户拥有的一组关键字(用于 SEO)中,为每个关键字提供 1-10 之间的评级(10 是最好的机会来自该集合)- 将通过比较关键字具有的“搜索量”与“
我正在尝试打开队列中的所有弹出窗口,以便它们根据队列数组中的项目数量具有不同的大小和位置。当弹出窗口启动时,想法是它们将完全填满用户屏幕(使用 screen.width 和 screen.height
我已经从一组数据创建了一个 Canvas 饼图,我现在试图定位鼠标相对于饼图的位置,以检测悬停在哪个数据部分。我快到了,但我被一个等式困住了。 我的逻辑运行良好,所以我认为这更像是一道数学题,但我会看
我正在编写一个 python 库来求解各种物理方程,并想为每个方程添加一个方法来显示 LaTeX 格式的方程。我考虑过使用 LaTeX 到 PNG 转换器,然后以某种方式显示与终端内联的图像,这导致我
我的值(value)观是: 0.263 0 0.265 0 0.267 0 0.269 0.0001 0.271 0.0003 0.273 0.0006 0.275 0.0011 0.277 0.00
我的代码在 JavaDoc 注释中通常有很多方程式。我目前正在使用 MathML 来显示这些方程式,因为这是我能够获得可以在 Eclipse 的悬停工具提示中显示的方程式的唯一方法。 我实际上并不关心
是否可以从特定网站导出文本、图像和 LaTeX 方程式,以便您可以直接自定义您自己的 PDF 而不会模糊对象?只有图像具有固定分辨率。 我知道有几种间接生成 PDF 的方法。试图在 Riemann Z
对于我的 C 程序,用户输入“aY + b = c”,其中 a、b 和 c 是 int 值,Y 是“符号常量”。 如何使“aY+b=c”与“aY + b = C”一样有效?基本上,我不确定如何利用 s
我正在根据数据集计算线性回归。我不知道编译时的回归模型或参数数量。 我将回归方程作为字符串存储在 SQL Server 2005 数据库中 y = 3x^2 + 2x // just an examp
我是一名优秀的程序员,十分优秀!