• xps文件的基本操作


    最近一直研究XPS文件,目前已经解决了二进制流转XPS文件、XPS文件转二进流、XPS文件的解析、XPS文件转图片、XPS文件打印等。但是一直没有找到如何向xps文件中插入图片的方法,好烦恼啊!!!!如果那位大神有向xps文件中插入图片的方法请及时联系我谢谢,QQ470163177。本人研究的成果如下,需要的码友可以学习下。

    注意:

    xps命名空间在 ReachFramework.dll中
    using xps2img;引用需要的是.net4.0版本

    1.二进制流生成xps文件:
    if (File.Exists(AppDomain.CurrentDomain.BaseDirectory+"yuan.xps"))
    {
    File.Delete(AppDomain.CurrentDomain.BaseDirectory + "yuan.xps");
    }
    string xpsTempFilePath = string.Format("{0}" + "yuan.xps", AppDomain.CurrentDomain.BaseDirectory);
    using (BinaryWriter writer = new System.IO.BinaryWriter(File.OpenWrite(xpsTempFilePath)))
    {
    writer.Write(文件);
    writer.Flush();
    }

    2.XPS文件转二进流:

    try
    {
    string strPath = AppDomain.CurrentDomain.BaseDirectory + "DW1031221.xps";
    byte[] xpsBytes = File.ReadAllBytes(strPath);
    string sql2 = "insert into 打印任务文件(任务id,文件内容) values((select case when max(任务id) IS NULL then '1' else max(任务id)+1 end from 打印任务文件),@wjnr)";
    SqlParameter param = new SqlParameter("wjnr", xpsBytes);
    DBHelper.ExecuteNonQuery(sql2, CommandType.Text, param);

    System.Windows.MessageBox.Show("转换成功!");
    }
    catch (Exception ex)
    {

    System.Windows.MessageBox.Show("转换失败!");
    }

    3.XPS文件的解析:

    //打开待识别的XPS文件
    StringBuilder sb = new StringBuilder();
    XpsDocument xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(pdffile, FileAccess.Read);
    var reader = xpsDocument.FixedDocumentSequenceReader;
    foreach (var document in reader.FixedDocuments)
    {
    foreach (var page in document.FixedPages)
    {
    XmlReader xrdr = page.XmlReader;
    while (xrdr.Read())
    {
    switch (xrdr.NodeType)
    {
    case XmlNodeType.Element:
    if (xrdr.Name == "Glyphs")
    sb.Append(xrdr["UnicodeString"]+" ");
    break;
    default: break;
    }
    }
    }
    }
    //将xps内容赋值给文本框
    if (!string.IsNullOrEmpty(sb.ToString()))
    {
    richTextBox1.Text = sb.ToString();
    }
    else
    {
    MessageBox.Show("该XPS文件无法识别!");
    }

    4.XPS文件转图片:

    try
    {
    using (var xpsConverter = new Xps2Image(this.Tag.ToString()))
    {
    IEnumerable<Bitmap> images = xpsConverter.ToBitmap(new Parameters
    {
    ImageType = ImageType.Png,
    //转成图片的大小比例
    Dpi = 73
    });
    foreach (var item in images)
    {
    pdfp.Image = item;
    }
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }

    注意:需要引用xps2img类库

    5.XPS文件打印:

    xpsClass.PrintXPS(comboBox1.Text, strPath);

    public static class xpsClass
    {
    /// <summary>
    /// 打印
    /// </summary>
    /// <param name="strPrint">打印机名称</param>
    /// <param name="xpsFilePath">打印文件路径</param>
    public static void PrintXPS(string strPrint, string xpsFilePath)
    {
    PrintQueue defaultPrintQueue = new PrintQueue(new PrintServer(), strPrint);
    string filename = Path.GetFileName(xpsFilePath);
    String nextFile = xpsFilePath;
    try
    {
    // 打印Xps文件同时提供Xps验证和进展通知
    PrintSystemJobInfo xpsPrintJob = defaultPrintQueue.AddJob(filename, nextFile, false);
    }
    catch (PrintJobException e)
    {
    Console.WriteLine(e.ToString());
    }
    }
    }

    注意:需要添加System.Printing.dll引用

    人生像一张洁白的纸,全凭人生之笔去描绘,玩弄纸笔者,白纸上只能涂成一摊胡乱的墨迹;认真书写者,白纸上才会留下一篇优美的文章。
  • 相关阅读:
    tcpdump 抓包
    mysql常用日期函数
    接口自动化测试,一键快速校验接口返回值全部字段
    实训项目
    vue proxyTable 代理方式 解决 跨域pathRewrite
    cookie, session, token 发展史
    Failed to set locale, defaulting to C.UTF-8
    java String与Integer的相互转化
    java LocalDateTime 常用 转换 方法
    Java命令里面的EQ、NE、GT、LT、GE、LE分别代表含义
  • 原文地址:https://www.cnblogs.com/libj/p/5952010.html
Copyright © 2020-2023  润新知