.net 有没有办法在Crystal Reports中呈现LaTeX方程?
我正在Crystal Reports中开发一个报告,需要在其中呈现一些数学公式和方程式。公式和方程式以纯文本形式存储在SQL Server数据库中(使用LaTeX标记) 让它们以HTML呈现不是问题,因为我使用MathJax在浏览器级别(HTML/CSS或MathML)进行工作 真正的问题是:如何在报告中呈现这些方程式?我在网上搜索了一下,什么也没找到。在Crystal界面上进行更多搜索,我发现的唯一一件事是在报告中插入(过时的)“Microsoft公式编辑器”作为OLE对象,但这两种方法都不起作用 那么,如何在水晶报告中呈现这些乳胶数学方程呢?是否有一些(模糊的)组件/插件可以完成这项工作?如果没有,有没有更好的方法?有人已经得到并解决了类似的用例 OBS 1:我必须以PDF格式生成此报告,因为我的工作中使用的标准已经过验证 OBS 2:将生成此报告的应用程序是一个ASP.NET MVC 3 web应用程序,带有SQL Server 2008数据库(使用NHibernate)。您需要创建一个应用程序来执行此操作。将公式的LaTeX表示形式传递给UFL,生成公式的图像表示形式,返回图像的URL 要使用路径,请插入“图片”,然后在“图形位置”属性中引用UFL的功能:.net 有没有办法在Crystal Reports中呈现LaTeX方程?,.net,asp.net-mvc-3,crystal-reports,latex,.net,Asp.net Mvc 3,Crystal Reports,Latex,我正在Crystal Reports中开发一个报告,需要在其中呈现一些数学公式和方程式。公式和方程式以纯文本形式存储在SQL Server数据库中(使用LaTeX标记) 让它们以HTML呈现不是问题,因为我使用MathJax在浏览器级别(HTML/CSS或MathML)进行工作 真正的问题是:如何在报告中呈现这些方程式?我在网上搜索了一下,什么也没找到。在Crystal界面上进行更多搜索,我发现的唯一一件事是在报告中插入(过时的)“Microsoft公式编辑器”作为OLE对象,但这两种方法都不起
//Insert | Picture...; graphic location conditional formula
latex({table.latex_field})
我发现了一种既优雅又不依赖于使用C扩展Crystal报表的解决方法 我发现了这个小而简单的“乳胶方程式渲染器”:。使用它,我能够将latex方程渲染成GIF图像(作为CGI应用程序)。这样,我在报告获取数据的数据表中创建了一个幻像字节数组字段 以下是我所做的:
MemoryStream ResizeImage(Stream OriginalFile, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
{
int finalWidth = NewWidth;
int finalHeight = MaxHeight;
System.Drawing.Image FullsizeImage = System.Drawing.Image.FromStream(OriginalFile);
// Prevent using images internal thumbnail
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
if (OnlyResizeIfWider)
{
if (FullsizeImage.Width <= NewWidth)
{
NewWidth = FullsizeImage.Width;
}
}
int NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
if (NewHeight > MaxHeight)
{
// Resize with height instead
NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
NewHeight = MaxHeight;
}
System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);
// Clear handle to original file so that we can overwrite it if necessary
FullsizeImage.Dispose();
MemoryStream bmpStream = new MemoryStream();
// Put in a new image of A x B pixels to evict distortion
using (var bitmap = new Bitmap(finalWidth, finalHeight))
{
using (var canvas = Graphics.FromImage(bitmap))
{
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.Clear(Color.White);
canvas.DrawImage(NewImage, 0, 0);
canvas.Save();
}
bitmap.Save(bmpStream, ImageFormat.Bmp);
}
return bmpStream;
}
MemoryStream ResizeImage(流原始文件、int NewWidth、int MaxHeight、bool only resizeifwide)
{
int finalWidth=NewWidth;
int finalHeight=最大高度;
System.Drawing.Image FullsizeImage=System.Drawing.Image.FromStream(原始文件);
//防止使用图像内部缩略图
FULLSIZEMAGE.RotateFlip(系统图.RotateFlipType.Rotate180FlipNone);
FULLSIZEMAGE.RotateFlip(系统图.RotateFlipType.Rotate180FlipNone);
如果(仅限ResizeIfWide)
{
if(FullsizeImage.Width最大高度)
{
//改为使用高度调整大小
NewWidth=FullsizeImage.Width*MaxHeight/FullsizeImage.Height;
NewHeight=MaxHeight;
}
System.Drawing.Image NewImage=FullsizeImage.GetThumbnailImage(NewWidth、NewHeight、null、IntPtr.Zero);
//清除原始文件的句柄,以便我们可以在必要时覆盖它
FullsizeImage.Dispose();
MemoryStream bmpStream=新的MemoryStream();
//放入一个x B像素的新图像以消除失真
使用(var位图=新位图(最终宽度、最终高度))
{
使用(var canvas=Graphics.FromImage(位图))
{
canvas.InterpolationMode=InterpolationMode.HighQualityBicubic;
画布。清晰(颜色。白色);
canvas.DrawImage(NewImage,0,0);
canvas.Save();
}
保存(bmpStream,ImageFormat.Bmp);
}
返回BMP流;
}
我对crystal不太了解,但您可能需要访问一个安装了latex的web服务,并在所述报告中包含一个呈现的PDF | PostScript | PNG(无论什么)。同样,我对latex不太熟悉,但您可以将crystal中的文本字段设置为HTML(功能有限)-这可能有助于这些方程,它们是静态的还是动态的?也就是说,你希望它们随着数据而改变吗?@Orbling这些方程是动态的。它们由用户填写并保存在数据库中,将来可能会改变。@leettickett这个问题不仅仅表现在HTML中,因为我需要“编译”LaTeX标记到一些图像或排版上,使方程看起来像是手写的。主要是因为它可能是方程,甚至是化学公式。这个解决方案似乎是最好的(通过使用API等),但似乎有点“过度”鉴于该项目完全是用C语言开发的,回到纯C语言对于这样的解决方案来说有点“超出范围”。不过很高兴知道Crystal Reports有扩展点!如果有帮助,您还可以在Delphi、COM和Java中构建UFL。