Exemplo n.º 1
0
        /// <summary>
        /// 递归,获取最子级 文字,查找大夫位置
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="searchText"></param>
        /// <returns></returns>
        private xps_search_point GetGlyphs(Canvas canvas, string searchText)
        {
            xps_search_point p = new xps_search_point(0, 0, 11);

            for (int i = 0; i < canvas.Children.Count; i++)
            {
                UIElement DocFpUiElem = canvas.Children[i];
                if (DocFpUiElem is Glyphs)
                {
                    Glyphs gps     = (Glyphs)DocFpUiElem;
                    string strMark = gps.UnicodeString;   //找到位置
                    if (strMark.Trim() == searchText)
                    {
                        p = new xps_search_point(gps.OriginX, gps.OriginY, gps.FontRenderingEmSize);
                        break;
                    }
                    textBox1.Text += strMark;
                }
                else if (DocFpUiElem is Canvas)
                {
                    p = GetGlyphs((Canvas)DocFpUiElem, searchText);
                }
            }
            return(p);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 用于实现的功能,在xps中添加指定的图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1    = new OpenFileDialog();
            string         originalDocument   = "";                                                   //读取模板
            string         detinationDocument = AppDomain.CurrentDomain.BaseDirectory + "newXps.xps"; //生成的新文件

            openFileDialog1.Filter = "图片文件(*.xps)|*.xps";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    originalDocument = openFileDialog1.FileName;

                    // int png_x = Convert.ToInt32(txtX.Text.Trim());
                    //int png_y = Convert.ToInt32(txtY.Text.Trim());

                    int png_x = 0;
                    int png_y = 0;

                    if (File.Exists(detinationDocument))
                    {
                        File.Delete(detinationDocument);
                    }
                    using (Package package = Package.Open(originalDocument, FileMode.Open, FileAccess.Read))
                    {
                        using (Package packageDest = Package.Open(detinationDocument))
                        {
                            string inMemoryPackageName = "memorystream://miXps.xps";
                            Uri    packageUri          = new Uri(inMemoryPackageName);
                            PackageStore.RemovePackage(packageUri);
                            PackageStore.AddPackage(packageUri, package);

                            XpsDocument       xpsDocument           = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
                            XpsDocument       xpsDocumentDest       = new XpsDocument(packageDest, CompressionOption.Normal, detinationDocument);
                            var               fixedDocumentSequence = xpsDocument.GetFixedDocumentSequence();
                            DocumentReference docReference          = xpsDocument.GetFixedDocumentSequence().References.First();
                            FixedDocument     doc     = docReference.GetDocument(false);
                            PageContent       content = doc.Pages[0];

                            FixedPage fixedPage = content.GetPageRoot(false);
                            //大容器
                            Canvas containCanvas = new Canvas();
                            containCanvas.Width  = fixedPage.Width;
                            containCanvas.Height = fixedPage.Height;


                            containCanvas.Background = Brushes.Transparent;

                            xps_search_point p = new xps_search_point(0, 0, 11);
                            //xps缩放比例
                            double RenderTrans = 1;
                            //获得页面宽度和高度
                            string searchText = "姓名";

                            //循环xps字元素,查找指定内容
                            for (int i = 0; i < fixedPage.Children.Count; i++)
                            {
                                UIElement DocFpUiElem = fixedPage.Children[i];
                                if (DocFpUiElem is Glyphs)
                                {
                                    Glyphs gps     = (Glyphs)DocFpUiElem;
                                    string strMark = gps.UnicodeString;
                                    //找到位置
                                    if (strMark.Trim() == searchText)
                                    {
                                        p = new xps_search_point(gps.OriginX, gps.OriginY, gps.FontRenderingEmSize);
                                        break;
                                    }
                                    textBox1.Text += strMark;
                                }
                                else if (DocFpUiElem is Canvas)
                                {
                                    Canvas cv1 = (Canvas)DocFpUiElem;
                                    //xps缩放比例
                                    RenderTrans = cv1.RenderTransform.Value.M11;
                                    p           = GetGlyphs((Canvas)DocFpUiElem, searchText);
                                }
                            }



                            Image  img = new Image();
                            string fn  = @"d:\1011.png";
                            img.Source = new BitmapImage(new Uri(fn));
                            Canvas cvs = new Canvas();
                            Canvas.SetLeft(cvs, Convert.ToDouble(png_x));
                            //Y坐标*缩放比例-图像本身高度
                            Canvas.SetTop(cvs, Convert.ToDouble(png_y));
                            img.Width  = Convert.ToDouble(62);
                            img.Height = Convert.ToDouble(27);
                            //填入图片
                            cvs.Children.Add(img);
                            //将图片cvs 添加到大容器中
                            containCanvas.Children.Add(cvs);
                            //将大容器填充到 xps Page页面当中
                            fixedPage.Children.Add(containCanvas);
                            ((IAddChild)content).AddChild(fixedPage);
                            //创建写入流,输出保存文件
                            var writter = XpsDocument.CreateXpsDocumentWriter(xpsDocumentDest);
                            writter.Write(fixedPage);

                            //释放
                            xpsDocumentDest.Close();
                            xpsDocument.Close();
                            System.Windows.Forms.MessageBox.Show("操作完成");
                        }
                    }
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
            }
        }