Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 145 additions & 0 deletions Videos/LaTeXEquation/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
using System.Diagnostics;
using LaTeXEquation.Models;
using Microsoft.AspNetCore.Mvc;
using Syncfusion.DocIO;
using Syncfusion.DocIO.DLS;

namespace LaTeXEquation.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}

// Creates a new Word document with mathematical equations
public IActionResult CreateEquation()
{
// Initialize a new Word document and ensure minimal structure
WordDocument document = new WordDocument();
document.EnsureMinimal();

// Add a main title paragraph
IWParagraph mainTitle = document.LastSection.AddParagraph();
IWTextRange titleText = mainTitle.AppendText("Mathematical Equations");
titleText.CharacterFormat.Bold = true; // Make title bold
titleText.CharacterFormat.FontSize = 18; // Set font size
mainTitle.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; // Center align title
mainTitle.ParagraphFormat.AfterSpacing = 12f; // Add spacing after title

// Add paragraph for Area of Circle equation
IWParagraph paragraph1 = document.LastSection.AddParagraph();
paragraph1.ParagraphFormat.BeforeSpacing = 8f; // Add spacing before paragraph
IWTextRange wText1 = paragraph1.AppendText("Area of Circle ");
wText1.CharacterFormat.Bold = true; // Make label bold
paragraph1.AppendMath(@"A = \pi r^2"); // Insert LaTeX math equation

// Add paragraph for Quadratic Formula equation
IWParagraph paragraph2 = document.LastSection.AddParagraph();
paragraph2.ParagraphFormat.BeforeSpacing = 8f;
IWTextRange wText2 = paragraph2.AppendText("Quadratic Formula ");
wText2.CharacterFormat.Bold = true;
paragraph2.AppendMath(@"x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}");

// Add paragraph for Fourier Series equation
IWParagraph paragraph3 = document.LastSection.AddParagraph();
paragraph3.ParagraphFormat.BeforeSpacing = 8f;
IWTextRange wText3 = paragraph3.AppendText("Fourier Series ");
wText3.CharacterFormat.Bold = true;
paragraph3.AppendMath(@"f\left(x\right)={a}_{0}+\sum_{n=1}^{\infty}{\left({a}_{n}\cos{\frac{n\pi{x}}{L}}+{b}_{n}\sin{\frac{n\pi{x}}{L}}\right)}");

// Return the document as a downloadable file
return CreateFileResult(document, "CreateEquation.docx");
}

// Adds a new equation to an existing Word document
public IActionResult AddEquation()
{
// Open existing document from file
using (FileStream fileStream = new FileStream("Data\\Input.docx", FileMode.Open, FileAccess.Read))
{
WordDocument document = new WordDocument(fileStream, FormatType.Automatic);

// Find the text "Derivative equation" in the document
TextSelection selection = document.Find("Derivative equation", false, true);

if (selection != null)
{
// Get the paragraph containing the found text
WParagraph targetParagraph = selection.GetAsOneRange().OwnerParagraph as WParagraph;

if (targetParagraph != null)
{
// Create a new paragraph for the math equation
WParagraph newParagraph = new WParagraph(document);

// Create a math object and set its LaTeX representation
WMath math = new WMath(document);
math.MathParagraph.LaTeX = @"\frac{d}{dx}\left(x^n\right)=nx^{n-1}";

// Add the math object to the new paragraph
newParagraph.ChildEntities.Add(math);

// Insert the new paragraph after the target paragraph
int index = document.LastSection.Body.ChildEntities.IndexOf(targetParagraph);
document.LastSection.Body.ChildEntities.Insert(index + 1, newParagraph);
}
}

// Return the updated document as a downloadable file
return CreateFileResult(document, "AddEquation.docx");
}
}

// Edits an existing equation in a Word document
public IActionResult EditEquation()
{
// Open template document from file
using (FileStream fileStream = new FileStream("Data\\Template.docx", FileMode.Open, FileAccess.Read))
{
WordDocument document = new WordDocument(fileStream, FormatType.Automatic);

// Find the first math object in the document
WMath? math = document.FindItemByProperty(EntityType.Math, string.Empty, string.Empty) as WMath;

if (math != null)
{
// Get the current LaTeX string and replace 'x' with 'k'
string laTex = math.MathParagraph.LaTeX;
math.MathParagraph.LaTeX = laTex.Replace("x", "k");
}

// Return the updated document as a downloadable file
return CreateFileResult(document, "EditEquation.docx");
}
}

// Helper method to create a FileStreamResult for downloading the document
private FileStreamResult CreateFileResult(WordDocument document, string fileName)
{
MemoryStream outputStream = new MemoryStream();
document.Save(outputStream, FormatType.Docx); // Save document to memory stream
outputStream.Position = 0; // Reset stream position
return File(outputStream, "application/docx", fileName); // Return file as response
}

public IActionResult Index()
{
return View();
}

public IActionResult Privacy()
{
return View();
}

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Binary file added Videos/LaTeXEquation/Data/Input.docx
Binary file not shown.
Binary file added Videos/LaTeXEquation/Data/Template.docx
Binary file not shown.
13 changes: 13 additions & 0 deletions Videos/LaTeXEquation/LaTeXEquation.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Syncfusion.DocIO.Net.Core" Version="*" />
</ItemGroup>

</Project>
9 changes: 9 additions & 0 deletions Videos/LaTeXEquation/Models/ErrorViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace LaTeXEquation.Models
{
public class ErrorViewModel
{
public string? RequestId { get; set; }

public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}
36 changes: 36 additions & 0 deletions Videos/LaTeXEquation/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
namespace LaTeXEquation
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
}
}
}
38 changes: 38 additions & 0 deletions Videos/LaTeXEquation/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:47672",
"sslPort": 44327
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5295",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7277;http://localhost:5295",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
21 changes: 21 additions & 0 deletions Videos/LaTeXEquation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# How to Work with Latex Equations in a Word Document Using the .NET Word Library

This repository provides an example of how to work with LaTeX equations in a Word document using the **Syncfusion .NET Word Library (DocIO)**. It demonstrates how to create, add, and edit LaTeX equations in Word documents.

## Process behind Field Integration

This sample shows how LaTeX syntax can be used to insert professional mathematical equations into Word documents. LaTeX is widely used in scientific and academic fields for typesetting complex formulas.

Using the Syncfusion DocIO library, you can:

- Create equations like area of a circle, quadratic formula, and Fourier series in a new Word document.
- Add equations dynamically to an existing document at specific locations.
- Edit equations by modifying LaTeX strings to update variables.

## Steps to use the sample

1. Open the ASP.NET Core application where the Syncfusion DocIO package is installed.
2. Run the application and click the following buttons:
- **CreateEquation**: Creates a Word document with multiple LaTeX equations.
- **AddEquation**: Inserts a new LaTeX equation into an existing document
- **EditEquation**: Updates an existing LaTeX equation in the document.
21 changes: 21 additions & 0 deletions Videos/LaTeXEquation/Views/Home/Index.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
@{
ViewData["Title"] = "Home Page";
}

<div>
<h2 style="margin-bottom: 20px; font-size: 22px;">Working with LaTeX Equations</h2>
<div>
<button style="width: 200px; margin-bottom: 20px; height: 40px; display: block; font-size: 18px;"
onclick="location.href='@Url.Action("CreateEquation", "Home")'">
Create Equation
</button>
<button style="width: 200px; margin-bottom: 20px; height: 40px; display: block; font-size: 18px;"
onclick="location.href='@Url.Action("AddEquation", "Home")'">
Add Equation
</button>
<button style="width: 200px; margin-bottom: 20px; height: 40px; display: block; font-size: 18px;"
onclick="location.href='@Url.Action("EditEquation", "Home")'">
Edit Equation
</button>
</div>
</div>
6 changes: 6 additions & 0 deletions Videos/LaTeXEquation/Views/Home/Privacy.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p>Use this page to detail your site's privacy policy.</p>
25 changes: 25 additions & 0 deletions Videos/LaTeXEquation/Views/Shared/Error.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}

<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
49 changes: 49 additions & 0 deletions Videos/LaTeXEquation/Views/Shared/_Layout.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - LaTeXEquation</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/LaTeXEquation.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">LaTeXEquation</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>

<footer class="border-top footer text-muted">
<div class="container">
&copy; 2025 - LaTeXEquation - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Loading
Loading