如何绘制矢量图形并将其保存为PDF文件?

时间:2015-05-23 10:57:12

标签: c#

我正在研究一个通常在图表中收集数据和绘制结果的项目。 (使用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

1 个答案:

答案 0 :(得分:1)

我知道有两种方法可以将Chart的高质量图像转换为PDF

一个是使用矢量格式:

    1. chart.SaveImageemf格式中的一种结合使用。
    1. 将生成的emf文件转换为wmf
    1. 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%)..:

enter image description here enter image description here