📄 svg.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 + -