我發現一種解決方法是在同一時間優雅並不依賴於使用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