private Image GetImage() { try { _textLabel.Text = null; TexFormulaParser parser = new TexFormulaParser(); TexFormula formula = parser.Parse(Template.FullTemplate); Byte[] png = formula.RenderToPng(15.0, 0.0, 0.0, "Times New Roman"); return(ImageUtils.FromBytes(png)); } catch (Exception) { _textLabel.Text = Globals.Localization.Error; return(null); } }
private static Table genTable(List <CalcCore.CalcValueBase> calcVals, MainDocumentPart mainPart) { Table tableOfInputs = new Table(); var tableGrid = new TableGrid(); tableGrid.AppendChild(new GridColumn()); tableGrid.AppendChild(new GridColumn()); tableGrid.AppendChild(new GridColumn()); tableOfInputs.AppendChild(tableGrid); var tableProps = new TableProperties(); tableProps.AppendChild(new TableLayout() { Type = TableLayoutValues.Fixed }); tableProps.AppendChild(new TableWidth() { Width = "9000", Type = TableWidthUnitValues.Dxa }); tableProps.AppendChild(new TableBorders() { InsideHorizontalBorder = new InsideHorizontalBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableProps.AppendChild(new TableBorders() { BottomBorder = new BottomBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableProps.AppendChild(new TableBorders() { TopBorder = new TopBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { LeftBorder = new LeftBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { InsideVerticalBorder = new InsideVerticalBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { RightBorder = new RightBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableOfInputs.AppendChild(tableProps); foreach (var item in calcVals) { TableRow row = new TableRow(); var para1 = new Paragraph(); TableCell cell1 = new TableCell(); // insert symbol as image var parser = new TexFormulaParser(); if (item.Symbol != "") { TexFormula formulaToParse = new TexFormula(); try { parser = new TexFormulaParser(); formulaToParse = parser.Parse(item.Symbol); } catch (Exception) { parser = new TexFormulaParser(); formulaToParse = parser.Parse("Error in LaTeX string..."); } var formulaImage = formulaToParse.RenderToPng(100, 0, 0, "Franklin Gothic Book"); ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png); using (var stream = new MemoryStream(formulaImage)) { imagePart.FeedData(stream); var img = new BitmapImage(); img.BeginInit(); img.StreamSource = stream; img.CacheOption = BitmapCacheOption.OnLoad; img.EndInit(); img.Freeze(); var paraImage = AddImageToBody(mainPart.GetIdOfPart(imagePart), img.Width * 2.54 / 600, img.Height * 2.54 / 600); para1.AppendChild(new Run(paraImage)); } } else { para1.AppendChild(new Run(new Text(" "))); } //var myMath = new M.OfficeMath(new M.Run(new M.Text(item.Symbol) { Space = SpaceProcessingModeValues.Preserve })); //para1.AppendChild(myMath); //para1.AppendChild(new Run(new Text(" ") { Space = SpaceProcessingModeValues.Preserve })); cell1.Append(para1); cell1.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "1200" })); var para2 = new Paragraph(new Run(new Text(item.Name))); TableCell cell2 = new TableCell(); cell2.AppendChild(para2); cell2.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "6100" })); var para3 = new Paragraph(); if (item.Type == CalcValueType.DOUBLE) { // insert symbol as image parser = new TexFormulaParser(); string toRender = item.ValueAsString + item.Unit; if (toRender != "") { TexFormula formulaToParse = new TexFormula(); try { parser = new TexFormulaParser(); formulaToParse = parser.Parse(toRender); } catch (Exception) { parser = new TexFormulaParser(); formulaToParse = parser.Parse("Error in LaTeX string..."); } var formulaImage = formulaToParse.RenderToPng(100, 0, 0, "Franklin Gothic Book"); ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png); using (var stream = new MemoryStream(formulaImage)) { imagePart.FeedData(stream); var img = new BitmapImage(); img.BeginInit(); img.StreamSource = stream; img.CacheOption = BitmapCacheOption.OnLoad; img.EndInit(); img.Freeze(); var paraImage = AddImageToBody(mainPart.GetIdOfPart(imagePart), img.Width * 2.54 / 600, img.Height * 2.54 / 600); para3.AppendChild(new Run(paraImage)); } } else { para3.AppendChild(new Run(new Text(" "))); } //myMath = new DocumentFormat.OpenXml.Math.OfficeMath(new M.Run(new M.Text(item.ValueAsString + item.Unit) { Space = SpaceProcessingModeValues.Preserve })); //para3.AppendChild(myMath); //para3.AppendChild(new Run(new Text(" ") { Space = SpaceProcessingModeValues.Preserve })); } else if (item.Type == CalcValueType.SELECTIONLIST) { para3.AppendChild(new Run(new Text(item.ValueAsString))); } else { cell2.AppendChild(new Paragraph(new Run(new Text(item.ValueAsString)))); } TableCell cell3 = new TableCell(); cell3.Append(para3); cell3.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "1700" })); row.Append(cell1, cell2, cell3); tableOfInputs.AppendChild(row); } return(tableOfInputs); }
private static Table genFormulaeTable(List <Formula> formulae, MainDocumentPart mainPart) { Table tableOfInputs = new Table(); var tableGrid = new TableGrid(); tableGrid.AppendChild(new GridColumn()); tableGrid.AppendChild(new GridColumn()); tableGrid.AppendChild(new GridColumn()); tableOfInputs.AppendChild(tableGrid); var tableProps = new TableProperties(); tableProps.AppendChild(new TableLayout() { Type = TableLayoutValues.Fixed }); tableProps.AppendChild(new TableWidth() { Width = "9000", Type = TableWidthUnitValues.Dxa }); tableProps.AppendChild(new TableBorders() { InsideHorizontalBorder = new InsideHorizontalBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableProps.AppendChild(new TableBorders() { BottomBorder = new BottomBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableProps.AppendChild(new TableBorders() { TopBorder = new TopBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { LeftBorder = new LeftBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { InsideVerticalBorder = new InsideVerticalBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); //tableProps.AppendChild(new TableBorders() { RightBorder = new RightBorder() { Color = "c0c0c0", Size = 4, Val = BorderValues.Single } }); tableOfInputs.AppendChild(tableProps); foreach (var item in formulae) { TableRow row = new TableRow(); var para = new Paragraph(); para.AppendChild((new Run(new Text(item.Ref)))); TableCell cell1 = new TableCell(); cell1.Append(para); cell1.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "1200" })); TableCell cell2 = new TableCell(); cell2.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "6100" })); cell2.AppendChild(new Paragraph(new Run(new Text(item.Narrative)))); //foreach (var formula in item.Expression) //{ // var mathPara = new Paragraph(); // var myMath = new M.OfficeMath(new M.Run(new M.Text(formula + Environment.NewLine) { Space = SpaceProcessingModeValues.Preserve })); // mathPara.AppendChild(myMath); // mathPara.AppendChild(new Run(new Text(" ") { Space = SpaceProcessingModeValues.Preserve })); // cell2.AppendChild(mathPara); //} foreach (var formula in item.Expression) { if (formula != "") { TexFormula formulaToParse = new TexFormula(); try { var parser = new TexFormulaParser(); formulaToParse = parser.Parse(formula); } catch (Exception) { var parser = new TexFormulaParser(); formulaToParse = parser.Parse("Error in LaTeX string..."); } var test = formulaToParse.GetRenderer(TexStyle.Script, 100, "Franklin Gothic Book"); if (test.RenderSize.Width > 0 && test.RenderSize.Height > 0) { var formulaImage = formulaToParse.RenderToPng(100, 0, 0, "Franklin Gothic Book"); ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png); using (var stream = new MemoryStream(formulaImage)) { imagePart.FeedData(stream); var img = new BitmapImage(); img.BeginInit(); img.StreamSource = stream; img.CacheOption = BitmapCacheOption.OnLoad; img.EndInit(); img.Freeze(); var paraImage = AddImageToBody(mainPart.GetIdOfPart(imagePart), img.Width * 2.54 / 600, img.Height * 2.54 / 600); cell2.AppendChild(new Paragraph(new Run(paraImage))); } } GC.WaitForPendingFinalizers(); } //var myMath = new M.OfficeMath(new M.Run(new M.Text(formula + Environment.NewLine) { Space = SpaceProcessingModeValues.Preserve })); //mathPara.AppendChild(myMath); //mathPara.AppendChild(new Run(new Text(" ") { Space = SpaceProcessingModeValues.Preserve })); //cell2.AppendChild(mathPara); } if (item.Image != null) { ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png); var tempFile = Path.GetTempFileName(); PngBitmapEncoder png = new PngBitmapEncoder(); //CHANGEBITMAP //png.Frames.Add(BitmapFrame.Create(item.Image)); var width = Math.Min(10d, item.Image.Width * 2.54 / 96); var height = ((double)item.Image.Height / (double)item.Image.Width) * width; using (SkiaSharp.SKWStream stm = new SkiaSharp.SKFileWStream(tempFile)) { item.Image.Encode(stm, SkiaSharp.SKEncodedImageFormat.Png, 0); } using (FileStream stream = new FileStream(tempFile, FileMode.Open)) { imagePart.FeedData(stream); } var paraImage = AddImageToBody(mainPart.GetIdOfPart(imagePart), width, height); cell2.AppendChild(new Paragraph(new Run(paraImage))); } TableCell cell3 = new TableCell(); cell3.Append(new Paragraph(new Run(new Text(item.Conclusion)))); cell3.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "1700" })); row.Append(cell1, cell2, cell3); tableOfInputs.AppendChild(row); } return(tableOfInputs); }