⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svg.cs

📁 按固定格式转成图片打印清单 应用与酒店 pos机 银行 航空 百货等行业
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using Business.SelfService.Cares.com;



namespace GPP.SelfService.Cares.com
{
    /// <summary>
    /// 将SVG文件通过调用外部的ImageMagick命令,转换为JPG格式的图片,
    /// 并直接送打印机打印。
    /// </summary>
    public class SVG
    {
        private string svgTemplateFile;                 // SVG模板文件
        private string jpgTargetFile;                   // 保存转换结果的JPG文件
        private StringBuilder svgTemplate;              // 在内存中保存的svg内容
        private const string TMP_SVG_FILE = "temp.svg"; // 临时SVG文件

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="svg">SVG源文件</param>
        /// <param name="jpg">转换后的目标文件,均包含路径信息</param>
        public SVG(string svg, string jpg)
        {
            this.svgTemplateFile = svg;
            this.jpgTargetFile = jpg;
            svgTemplate = new StringBuilder();
        }

        /// <summary>
        /// 实现转换操作
        /// </summary>
        public void ConvertToJpg()
        {
            if (this.WriteSvgFile())
            {
                string convertCmd = "convert " + TMP_SVG_FILE + " " + this.jpgTargetFile;
                this.ExeCmd(convertCmd);
            }
        }

        /// <summary>
        /// 创建一个进程去执行一个外部convert命令
        /// </summary>
        /// <param name="cmd"></param>
        private void ExeCmd(string cmd)
        {
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.WriteLine(cmd);
            p.StandardInput.WriteLine("exit");
            //string strRst = p.StandardOutput.ReadToEnd();
            p.Close();
        }


        /// <summary>
        /// 将SVG模板都到一个字符串中。
        /// </summary>
        private bool ReadTemplate()
        {
            if (!File.Exists(this.svgTemplateFile))
            {
                Console.WriteLine("{0} does not exist.", this.svgTemplateFile);
                return false;
            }
            using (StreamReader sr = File.OpenText(this.svgTemplateFile))
            {
                string input;
                while ((input = sr.ReadLine()) != null)
                {
                    this.svgTemplate.AppendLine(input);

                }
                sr.Close();
            }
            return true;

        }

        /// <summary>
        /// 将内存中的替换好的svg内容写入文件系统。
        /// 因为要调用的是ImageMagick的convert指令,只能接收文件系统作为其参数,这里效率有些低。
        /// </summary>
        private bool WriteSvgFile()
        {
            try
            {
                if (File.Exists(TMP_SVG_FILE))
                {
                    File.Delete(TMP_SVG_FILE); // 如果临时文件存在,先删除
                }

                FileStream fs = new FileStream(TMP_SVG_FILE, FileMode.CreateNew, FileAccess.ReadWrite);
                File.SetAttributes(TMP_SVG_FILE, FileAttributes.Hidden); // 设置文件属性为‘隐藏’
                StreamWriter sw = new StreamWriter(fs);
                sw.Write(this.svgTemplate);
                sw.Close();
                fs.Close();
            }
            catch (IOException e)
            {
                Console.Write("Writing to tmp svg file failed: " + e.ToString());
                return false;
            }
            return true;
        }

        /// <summary>
        /// 将模板中的数据域填入真实的数据
        /// </summary>
        /// <param name="receipt"></param>
        public void FillTemplate(Receipt receipt)
        {
            if (this.ReadTemplate())
            {
                this.svgTemplate.Replace("%NAME%", receipt.paxName);
                this.svgTemplate.Replace("%ETTN%", receipt.ettn);
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -