Я использую MathML для создания некоторых блоков данных, и мне нужно вставить его через OpenXML SDK в файл docx. Я слышал, что это возможно, но я не справился с этим. Может ли кто-нибудь помочь мне с этой проблемой?OpenXML SDK и MathML
ответ
Насколько я знаю, OpenXML SDK не поддерживает презентацию MathML из коробки.
Вместо этого OpenXML SDK поддерживает Office MathML. Итак, чтобы вставить презентацию MathML в документ Word, у нас сначала есть , чтобы преобразовать презентацию MathML в Office MathML.
К счастью, Microsoft предоставляет XSL-файл (называемый MML2OMML.xsl) для преобразования представления MathML в офис MathML. Файл MML2OMML.xsl находится под %ProgramFiles%\Microsoft Office\Office12
. В сочетании с классом .Net Framework XslCompiledTransform
мы можем преобразовать презентацию MathML в Office MathML.
Следующим шагом является создание объекта OfficeMath
из преобразованного MathML. Класс OfficeMath
представляет собой пробел, содержащий WordprocessingML, который обрабатывается так, как если бы это был Office Open XML Math. Для получения дополнительной информации см. MSDN.
Презентация MathML не содержит информации о шрифте. Чтобы получить хороший результат , мы должны добавить информацию о шрифте в созданный объект OfficeMath
.
На последнем этапе мы должны добавить объект OfficeMath
к нашему слову. В приведенном ниже примере я просто ищу первый Paragraph
в текстовом документе под названием template.docx и добавьте объект OfficeMath
к найденному абзацу.
XslCompiledTransform xslTransform = new XslCompiledTransform();
// The MML2OMML.xsl file is located under
// %ProgramFiles%\Microsoft Office\Office12\
xslTransform.Load("MML2OMML.xsl");
// Load the file containing your MathML presentation markup.
using (XmlReader reader = XmlReader.Create(File.Open("mathML.xml", FileMode.Open)))
{
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 MathML to OfficeMathML
xslTransform.Transform(reader, xw);
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms, Encoding.UTF8);
string officeML = sr.ReadToEnd();
Console.Out.WriteLine(officeML);
// Create a OfficeMath instance from the
// OfficeMathML xml.
DocumentFormat.OpenXml.Math.OfficeMath om =
new DocumentFormat.OpenXml.Math.OfficeMath(officeML);
// Add the OfficeMath instance to our
// word template.
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open("template.docx", true))
{
DocumentFormat.OpenXml.Wordprocessing.Paragraph par =
wordDoc.MainDocumentPart.Document.Body.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().FirstOrDefault();
foreach (var currentRun in om.Descendants<DocumentFormat.OpenXml.Math.Run>())
{
// Add font information to every run.
DocumentFormat.OpenXml.Wordprocessing.RunProperties runProperties2 =
new DocumentFormat.OpenXml.Wordprocessing.RunProperties();
RunFonts runFonts2 = new RunFonts() { Ascii = "Cambria Math", HighAnsi = "Cambria Math" };
runProperties2.Append(runFonts2);
currentRun.InsertAt(runProperties2, 0);
}
par.Append(om);
}
}
}
- 1. OpenXML SDK - Excel Диапазоны
- 2. Автоматическое тестирование OpenXML SDK
- 3. Mocking OpenXML SDK ТабличныйДокумент
- 4. Альтернативы MS OpenXML SDK
- 5. OpenXml Sdk, стиль в таблицах?
- 6. Использование TDD с OpenXml-SDK
- 7. OpenXml SDK - Повторное использование изображений
- 8. OpenXML: прочитайте текст между двумя полями документа, используя OpenXML SDK
- 9. Невозможно встроить документ openXML внутри другого с помощью OpenXML SDK
- 10. MathML и Java
- 11. OPENXML SDK VS Microsoft Interop Assemblies
- 12. Преобразование СПР в MathML
- 13. OpenXML SDK Inject VBA в excel workbook
- 14. OpenXML SDK - объединить несколько файлов Excel
- 15. OpenXML SDK- Worksheet throws null reference exception
- 16. OpenXML SDK WordprocessingDocument дисплей в контроле WebBrowser
- 17. OpenXML SDK: как определить тип данных ячейки?
- 18. Какова альтернатива OpenXML SDK для InsertFile?
- 19. OpenXML SDK: сделать Excel пересчитанной формулой
- 20. Текст в docx (OpenXML SDK сгенерирован) uneditable
- 21. .NET OpenXML SDK 2 RunProperties - Null
- 22. OpenXML SDK заменить текст в документе шаблона
- 23. Как разбить документ в OpenXML SDK
- 24. Добавить пользовательское пространство имен и использовать его в OpenXML первенствует через C# OpenXml SDK
- 25. Начало работы OpenXml и PowerPoint
- 26. OpenXML SDK 2.0 Перечисление частей и элементов XML
- 27. Выбор и редактирование ячеек в Excel с помощью OpenXML SDK
- 28. WordML templating с XML-схемой и OpenXML SDK
- 29. openxml sdk excel как анализировать и вычислять формулу
- 30. Python Sympy MathML: mathml vs print_mathml
Большое спасибо за ваш ответ! Я очень ценю это! Я уже пробовал свой код, и у меня был успех! Вы спасли меня! Еще раз спасибо! – user1450792
@ user1450792: Добро пожаловать! Пожалуйста, примите мой ответ, нажав на галочку рядом с ответом, чтобы переключить его с полого на зеленый. – Hans
Очень хорошее решение @ Ханс. Но как я могу сделать обратное. Я хочу преобразовать xml-содержимое текстового файла с OMML в обычный текст, содержащий MML ..!? – serene