[英]Draw vector-graphics on PDF using iTextSharp (filling paths with holes)
[英]How to draw vector graphics and save it in PDF file?
我正在做一個項目,該項目通常在收集數據並在圖表中繪制結果。 (使用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
我知道有兩種方法可以將Chart
的高質量圖像轉換為PDF
。
一種是使用矢量格式:
chart.SaveImage
與三種emf
格式之一一起使用。 emf
文件轉換為wmf
wmf
文件插入到iTextSharp
文檔中。 1和3是單線。 但是第二步不是。 實際上,我根本沒有找到可行的c#
解決方案。 最好的是對這里消失的編輯的怪異參考。
如果您可以使用其他程序進行轉換,則將獲得類似此演示pdf文件的不錯結果。我使用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文件的分辨率,它將以當前屏幕分辨率(此處為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%)..:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.