示例#1
0
 public void GetDocument(DocumentSnapshotHandler handler)
 {
     _documentReference.GetDocument((snapshot, error) =>
     {
         handler?.Invoke(snapshot == null ? null : new DocumentSnapshotWrapper(snapshot),
                         error == null ? null : ExceptionMapper.Map(error));
     });
 }
示例#2
0
        SerializeDocumentReference(
            DocumentReference dre
            )
        {
            IDocumentPaginatorSource idp = dre.GetDocument(false);

            if (idp != null)
            {
                FixedDocument fixedDoc = idp as FixedDocument;

                if (fixedDoc != null)
                {
                    ReachSerializer serializer = SerializationManager.GetSerializer(fixedDoc);
                    if (serializer != null)
                    {
                        serializer.SerializeObject(fixedDoc);
                    }
                }
                else
                {
                    ReachSerializer serializer = SerializationManager.GetSerializer(idp.DocumentPaginator);
                    if (serializer != null)
                    {
                        serializer.SerializeObject(idp);
                    }
                }
            }
        }
示例#3
0
        public DocumentItem(string documentPath, DocumentReference documentReference)
        {
            _documentPath      = documentPath;
            _documentReference = documentReference;
            _fixedDocument     = documentReference.GetDocument(true);
            IEnumerator <PageContent> enumerator = _fixedDocument.Pages.GetEnumerator();

            enumerator.MoveNext();
            _firstPage = enumerator.Current.GetPageRoot(true);
        }
示例#4
0
        public DocumentItem(string documentPath, DocumentReference documentReference)
        {
            TooltipString     = documentPath;
            DocumentReference = documentReference;
            FixedDocument     = documentReference.GetDocument(true);
            var enumerator = FixedDocument.Pages.GetEnumerator();

            enumerator.MoveNext();
            _firstPage = enumerator.Current.GetPageRoot(true);
        }
示例#5
0
        internal void CreatePagesFromSource()
        {
            DocumentReference documentReference = new DocumentReference();

            documentReference.Source = Source;
            (documentReference as IUriContext).BaseUri = BaseUri;
            FixedDocument fixedDocument = documentReference.GetDocument(true);

            PrivateCreatePagesFromFixedDocument(fixedDocument);
        }
示例#6
0
 private void ReCreateFixedDocumentSequence()
 {
     _fixedDocumentSequence = new FixedDocumentSequence();
     foreach (RollUpFixedDocument document in _documents)
     {
         DocumentReference documentReference = new DocumentReference();
         FillDocumentReference(documentReference, document);
         FixedDocument fixedDocument = documentReference.GetDocument(true);
         _fixedDocumentSequence.References.Add(documentReference);
     }
 }
示例#7
0
        internal void CreatePagesFromSource()
        {
            var documentReference = new DocumentReference {
                Source = Source
            };

            ((IUriContext)documentReference).BaseUri = BaseUri;
            var fixedDocument = documentReference.GetDocument(true);

            PrivateCreatePagesFromFixedDocument(fixedDocument);
        }
示例#8
0
        /// <summary>
        /// Gets the first fixed document in a fixed document sequence, or null.
        /// </summary>
        /// <param name="docSeq">The fixed document sequence</param>
        /// <returns>The first fixed document, or null.</returns>
        private static FixedDocument GetFirstDocumentOfFixedDocSeq(FixedDocumentSequence docSeq)
        {
            FixedDocument firstDoc = null;

            if (docSeq != null && docSeq.References != null && docSeq.References.Count > 0)
            {
                DocumentReference firstDocRef = docSeq.References[0];
                firstDoc = firstDocRef.GetDocument(true);
            }

            return(firstDoc);
        }
示例#9
0
        /* Main print entry point */
        public void Print(PrintQueue queu, XpsDocument xpsDocument, Print printcontrol,
                          bool print_all, int from, int to, String filename, bool tempfile)
        {
            XpsDocumentWriter     docwrite;
            FixedDocumentSequence fixedDocSeq  = xpsDocument.GetFixedDocumentSequence();
            DocumentReference     docReference = fixedDocSeq.References[0];
            FixedDocument         doc          = docReference.GetDocument(false);

            PrintTicket Ticket = SetUpTicket(queu, printcontrol, fixedDocSeq, tempfile);

            docwrite   = GetDocWriter(queu);
            m_busy     = true;
            m_filename = filename;
#if DISABLED_FOR_NOW
            docwrite.WritingPrintTicketRequired +=
                new WritingPrintTicketRequiredEventHandler(PrintTicket);
#endif
            PrintPages(docwrite, doc, print_all, from, to, Ticket);
        }
示例#10
0
 private void BuildLinkList(FixedDocumentSequence fixDocSeq)
 {
     try
     {
         DocumentReference docReference = fixDocSeq.References[0];
         FixedDocument     fixDoc       = docReference.GetDocument(false);
         for (int i = 0; i < fixDoc.Pages.Count; i++)
         {
             PageContent content = fixDoc.Pages[i];
             for (int j = 0; j < content.LinkTargets.Count; j++)
             {
                 index[content.LinkTargets[j].Name] = i;
             }
         }
     }
     catch (System.Exception ex)
     {
         LogFile.Error("Exception in BuildLinkList():", ex);
     }
 }
示例#11
0
        /// <summary>
        /// override to load books
        /// </summary>
        /// <param name="bk"></param>
        /// <returns></returns>
        override public object LoadBook(Book bk)
        {
            XpsDocument           document = null;
            FixedDocumentSequence fds      = null;

            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("XpsBookService.LoadBook");
            }
            try
            {
                base.LoadBook(bk);

                document = new XpsDocument(bk.FilePath, FileAccess.Read);
                fds      = document.GetFixedDocumentSequence();

                DocumentReference docReference = fds.References.First();
                FixedDocument     fixDoc       = docReference.GetDocument(false);

                bk.PageCount = fds.DocumentPaginator.PageCount;
                for (int i = 0; i < bk.PageCount - 1; i++)
                {
                    bk.Pages.Add(new Page(bk, i.ToString(), i));
                }
            }
            catch (Exception err)
            {
                LogHelper.Manage("XpsBookService.LoadBook", err);
            }
            finally
            {
                if (document != null)
                {
                    document.Close();
                }

                LogHelper.End("XpsBookService.LoadBook");
            }
            return(fds);
        }
示例#12
0
 private static void Add(string path, FixedDocumentSequence fixedDocumentSequence)
 {
     using (var doc = new XpsDocument(path, FileAccess.Read))
     {
         var sourceSequence = doc.GetFixedDocumentSequence();
         if (sourceSequence != null)
         {
             foreach (var dr in sourceSequence.References)
             {
                 var newDocumentReference = new DocumentReference
                 {
                     Source = dr.Source
                 };
                 var baseUri = ((IUriContext)dr).BaseUri;
                 ((IUriContext)newDocumentReference).BaseUri = baseUri;
                 var fd = newDocumentReference.GetDocument(true);
                 newDocumentReference.SetDocument(fd);
                 fixedDocumentSequence.References.Add(newDocumentReference);
             }
         }
     }
 }
 public void Split(string originalDocument, string 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.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);
             var               content   = doc.Pages[0];
             var               fixedPage = content.GetPageRoot(false);
             var               writter   = XpsDocument.CreateXpsDocumentWriter(xpsDocumentDest);
             writter.Write(fixedPage);
             xpsDocumentDest.Close();
             xpsDocument.Close();
         }
     }
 }
示例#14
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);
                }
            }
        }
        public FlowDocumentPackage(string xamlFlowDocument)
        {
            toDispose = new List <IDisposable>();

            TempFolder = new DirectoryInfo(TempPath + "\\XamlToPDF\\" + DateTime.Now.Ticks.ToString());
            if (!TempFolder.Exists)
            {
                TempFolder.Create();
            }

            /*Stream = File.Create(TempFolder.FullName + "\\a.xps");
             * toDispose.Add(Stream);
             *
             * Package = Package.Open(Stream, FileMode.Create, FileAccess.ReadWrite);
             * toDispose.Add(Package);
             *
             *          pack = "pack://" + DateTime.Now.Ticks + ".xps";
             *          PackageStore.AddPackage(new Uri(pack), Package);
             *
             *
             *
             * XpsDoc = new XpsDocument(Package, CompressionOption.NotCompressed, pack);*/
            XpsDoc = new XpsDocument(TempFolder.FullName + "\\a.xps", FileAccess.ReadWrite, CompressionOption.NotCompressed);
            toDispose.Add(new InlineDisposable(() => XpsDoc.Close()));

            System.Windows.Xps.XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(XpsDoc);

            xamlFlowDocument = ReplaceImages(writer, xamlFlowDocument);

            flowDoc = XamlServices.Parse(xamlFlowDocument) as FlowDocument;

            IDocumentPaginatorSource src = flowDoc as IDocumentPaginatorSource;

            if (double.IsNaN(flowDoc.PageHeight))
            {
                flowDoc.PageHeight = 792;
            }
            if (double.IsNaN(flowDoc.PageWidth))
            {
                flowDoc.PageWidth = 612;
            }



            /*XPolicy = new XpsPackagingPolicy(XpsDoc);
             * toDispose.Add(XPolicy);
             *
             * XSrm = new XpsSerializationManager(XPolicy, false);
             * toDispose.Add(XSrm);*/


            DocumentPaginator pgn = src.DocumentPaginator;


            //XSrm.SaveAsXaml(pgn);


            writer.Write(pgn);

            var seq = XpsDoc.GetFixedDocumentSequence();

            DocumentReference reff = seq.References.First();

            Document = reff.GetDocument(true);
        }