2015-05-23 63 views
0

我正在研究一個通常在圖表中收集數據和繪圖結果的項目。 (使用C#)我需要將我的圖表保存爲PDF文件。我的問題是,如何在不丟失分辨率的情況下將圖表保存在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

歡迎堆棧溢出!簡單列出您的要求並尋求幫助不是在本網站上提出問題的好方法。請參閱[爲什麼「有人可以幫助我」而不是「實際」問題](http://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual -題)。我們展示如何_you_試圖自行解決問題,然後告訴我們_exactly_什麼結果,並告訴我們爲什麼你覺得它沒有工作。 –

+0

謝謝你的提示。下次我會確保以更合適的方式提出我的問題。 – Bin

+0

我試圖用iTestSharp創建一個pdf文件。爲什麼它不起作用,我需要向你展示我的程序生成的pdf文件。有沒有辦法上傳PDF文件? – Bin

回答

1

有兩種方法,我知道的,從獲得高質量的圖像你Chart轉化爲PDF

一個是通過使用矢量格式:

    1. 使用chart.SaveImage與三個emf格式之一。
  • 轉換所得emf文件wmf
  • 插入wmf文件到您iTextSharp文檔。

1和3是單線。但步驟2不是。事實上,我還沒有找到工作的c#解決方案。最好的是一個奇怪的參考已經消失here編輯..

如果你可以使用一些其他程序做,你會得到像this demo pdf file不錯的結果轉換..我用插圖的轉換。

兩個:如果你不能得到第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文檔放大後很多(300%)。 :

enter image description hereenter image description here

+0

第一種方法的結果是太棒了,正是我在找的東西。但因爲我不能用emc將emf轉換爲wmf,我應該使用第二種方法。我的問題已經以某種方式解決了。非常感謝。 – Bin

+0

如果您發現如何將emf轉換爲wmf,請在此分享。 – Bin

+0

是的,我會......但不要屏住呼吸...... – TaW