我正在研究一个通常在图表中收集数据和绘制结果的项目。 (使用C#)我需要将我的图表保存在PDF文件中。我的问题是,如何在不丢失分辨率的情况下将图表保存在PDF文件中?我的观点是如何绘制矢量图形而不是光栅图形?
我尝试使用iTextSharp来创建PDF文件但结果并不令人满意!
我是新来的,所以我无法上传图片。
以下是保存文件后的结果: https://www.dropbox.com/s/ruwtc82hfosxk6y/Test.pdf?dl=0
以下是我需要创建的PDF: https://www.dropbox.com/s/jvu5uu069imo9xc/nir%20well%20abfar.pdf?dl=0
答案 0 :(得分:1)
我知道有两种方法可以将Chart
的高质量图像转换为PDF
。
一个是使用矢量格式:
chart.SaveImage
与emf
格式中的一种结合使用。emf
文件转换为wmf
wmf
文件插入iTextSharp
文档。 1和3是单行。但第2步不是。事实上,我还没有找到一个有效的c#
解决方案。最好的是对已消失的编辑here ..
如果你可以使用一些其他程序进行转换,你会得到很好的结果,例如this demo pdf file ..我使用 Illustrator 进行转换。
两个:如果您无法使第2步工作,如果您使用具有良好且高分辨率的光栅图像,则仍可获得不错的效果。以下是如何做到这一点:
首先我们隐藏Chart
,因此我们不会吓唬用户。然后我们将它设置为我们想要的输出。然后我们DrawToBitmap
,最后我们再次重置图表..:
Size s = chart1.Size;
chart1.Hide();
// pick your size in pixels
// I simply multiply my screen size..:
chart1.Size = new System.Drawing.Size(s.Width * 5, s.Height * 5);
using (Bitmap bmp = new Bitmap(chart1.ClientSize.Width, chart1.ClientSize.Height))
{
// you should set the resolution,
// although I didn't find a way for iTextSharp to use it visually
bmp.SetResolution(600, 600);
using (Graphics G = Graphics.FromImage(bmp))
{
G.SmoothingMode = SmoothingMode.HighQuality;
G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
chart1.DrawToBitmap(bmp, chart1.ClientRectangle);
bmp.Save(yourImageFile, ImageFormat.Png);
}
}
chart1.Size = s;
chart1.Show();
你也可以使用SaveImage并保存几行,但你不能在那里设置png文件的分辨率,它将以currnt屏幕分辨率保存,这里是96dpi ..
现在你有一个大图像,可能需要在iTextSharp中缩小它:
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(yourImageFile);
img .ScalePercent(15); // scale to fit your needs..
doc.Add(img );
请注意,图例和标签会以这种方式变小,因此您可能需要在保存之前将其放大。我还发现,缩小时,图像相当明亮,直到放大..
以下是两个截图,一个来自图表,另一个来自pdf documnet,经过大量放大(300%)..: