none
winform 列印svg檔案 RRS feed

  • 問題

  • 請問大大們,我想要在c#開發的winform應用程式中,點選按鈕就可以列印指定的檔案,其中檔案的副檔名是svg,請問如果使用printDocument要怎麼印出svg圖檔呢?謝謝

    目前試過爬文找到的方法:

    #利用Process,不過會出現錯誤「指定的可執行檔不是有效的 Win32 應用程式。」

     

    using (PrintDialog pd = new PrintDialog())
    {
            pd.ShowDialog();
            ProcessStartInfo info = new ProcessStartInfo(fileSrc);//fileSrc is SVG file<br/>
             info.Verb = "PrintTo";
            info.UseShellExecute = false;
            info.Arguments = pd.PrinterSettings.PrinterName;
            info.CreateNoWindow = true;
            info.WindowStyle = ProcessWindowStyle.Hidden;
            Process.Start(info);
            
    }
    

     

     

     

    2010年8月30日 上午 11:49

解答

所有回覆

  • 你檔案總管可以直接點兩下 .svg 就顯示出來嗎?

    不行的話,這種方法當然不可以。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月30日 下午 01:14
  • 謝謝心冷大的回覆,我直接點兩下是可以指定用ie開啟svg檔案(預先安裝Adobe SVG viewer),可以看到圖,我有試過info.fileName代入IE,只是Arguments 這邊應該是要代入SVG檔案路徑,那指定印表機列印的功能就...

    還是說我必須自己讀SVG的XML內容自己去繪圖產生圖檔再列印呢?

    再麻煩大大們指教,謝謝

    2010年8月30日 下午 03:43
    • 已標示為解答 piyolala 2010年8月31日 上午 08:26
    2010年8月31日 上午 12:11
  • 感謝cmf大大提供這個連結,我先研究這個程式,實做出來再來回報^^

    2010/8/31 16:25更新:

    下面那個問題應該是dll地獄造成的問題,換到另一台電腦後可以正常執行,謝謝cmf大提供的連結。

    更新:

    我下載source code回來測試,可是在載入svg source的地方會出錯。錯誤訊息:「嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。」,有利用指令aximp "C:\Program Files\Common Files\Adobe\SVG Viewer 3.0\NPSVG3.dll" 重新產生AxSVGACTIVEXLib.dll和SVGACTIVEXLib.dll再載入測試還是一樣,再麻煩大大指正,謝謝

     

    private void cbWhat_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    			SvgGraphics ig;
    
    			ig = new SvgGraphics();
    			Render(ig);
    
    			string s = ig.WriteSVGString();
    
    			tbSVG.Text = s;
    
       StreamWriter tw = new StreamWriter("c:\\tmp.svg", false);
    
    			tw.Write(s);
    
    			tw.Close();
    
       svgCtl.SRC = "c:\\tmp.svg"; //出錯地方
       this.panel1.Invalidate();
    		
    }

     

    2010年8月31日 上午 03:05
  • 先從 BIOS 關閉 DEP 看看。ActiveX DLL 可能會因此被擋。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月31日 下午 03:37