我发现一种解决方法是在同一时间优雅并不依赖于使用C来扩展水晶报表。
我发现了这个小而简单的“latex equation renderer”:mimeTeX。使用它,我可以将渲染胶乳公式成GIF图像(作为CGI应用程序)。与此同时,我在报表获取数据的数据表中创建了一个幻像字节数组字段。
这里是我做了什么:
- 恢复从我真正的数据库乳胶公式标记;
- 查询mimeTeX使用这个标记和mimeTeX返回一个gif图像;
- 采取此图像并将其转换为PNG格式(水晶意外地不支持GIF文件);
- 最后把这个PNG图像(它的字节)放在报告使用的数据表中创建的幻像字段中;
- 现在您可以在报告中使用此字段!生成并显示每个记录(方程)的图像都没有问题!
的
唯一的缺点我发现到现在为止使用这种方法的缺点是
所有图像streched到现场占位符的尺寸相同。如果图像的尺寸变化很大,则会显示一些像素化图像,而其他图像会变得“被压扁”。但我期待着如何解决这个问题!
---编辑---
解决了 “压扁的图像” 的问题。我将代码中的图像调整为保持纵横比,并将它们粘贴到固定大小的图像中。现在所有的图像都有相同的尺寸,不会被挤压!
下面是调整大小代码:
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;
}
我不知道水晶不够好,但你可能需要打已经乳胶安装一个Web服务,并得到任何一个渲染PDF | PostScript | PNG(无论)包括在报告中。 – Xailor 2012-03-01 15:27:06
同样,我对LaTeX并不是很熟悉,但是您将Crystal中的文本字段设置为HTML(所有都是有限的功能) - 这可能有助于 – 2012-03-01 15:45:40
这些方程是静态的还是动态的?也就是说,你是否期望他们凭借数据改变? – Orbling 2012-03-01 21:53:20