public static void SaveToPdf(UIElement ui, string name) { //MigraDoc.DocumentObjectModel.Document doc = new MigraDoc.DocumentObjectModel.Document(); //MigraDoc.Rendering.DocumentRenderer renderer = new DocumentRenderer(doc); //MigraDoc.Rendering.PdfDocumentRenderer pdfRenderer = new MigraDoc.Rendering.PdfDocumentRenderer(); //pdfRenderer.PdfDocument = pDoc; //pdfRenderer.DocumentRenderer = renderer; //using (MemoryStream ms = new MemoryStream()) //{ // pdfRenderer.Save(ms, false); // byte[] buffer = new byte[ms.Length]; // ms.Seek(0, SeekOrigin.Begin); // ms.Flush(); // ms.Read(buffer, 0, (int)ms.Length); //} string path = string.Format(name + "_{0}.pdf", DateTime.Now.ToString("MMddyyyy_hhmmss")); FileOperations.EnsureFileFolderExist(path); MemoryStream lMemoryStream = new MemoryStream(); Package package = Package.Open(lMemoryStream, FileMode.Create); System.Windows.Xps.Packaging.XpsDocument doc = new System.Windows.Xps.Packaging.XpsDocument(package); System.Windows.Xps.XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc); writer.Write(ui); doc.Close(); package.Close(); PdfSharp.Xps.XpsModel.XpsDocument pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream); PdfSharp.Xps.XpsConverter.Convert(pdfXpsDoc, path, 0); }
public override void ShowHelp(bool asDialog) { var helpUri = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Resources.HelpFile); var document = new System.Windows.Xps.Packaging.XpsDocument(helpUri, FileAccess.Read); var helpWindow = new Window { Icon = Application.Current.MainWindow.Icon, Title = CommonSettings.AppName + ": " + Resources.XpsHelp, WindowState = WindowState.Maximized }; var docViewer = new System.Windows.Controls.DocumentViewer { Document = document.GetFixedDocumentSequence() }; var frame = new System.Windows.Controls.Frame { NavigationUIVisibility = System.Windows.Navigation.NavigationUIVisibility.Hidden }; frame.Content = docViewer; helpWindow.Content = frame; helpWindow.Closed += (sender, e) => { document.Close(); }; docViewer.AddHandler(System.Windows.Documents.Hyperlink.RequestNavigateEvent, new System.Windows.Navigation.RequestNavigateEventHandler((sender, e) => { if (e.Uri.IsAbsoluteUri && e.Uri.Scheme == "http") { try { Process.Start(e.Uri.ToString()); } catch (Exception exc) { MessageBox.Show(string.Format(Resources.SiteNavigationError + "\r\n{1}", e.Uri, exc.Message), CommonSettings.AppName); } e.Handled = true; } } )); if (asDialog) { helpWindow.ShowDialog(); } else { helpWindow.Show(); } }
private const double DPCM = 96 / 2.54; //1cm中的像素点数量 /// <summary> /// 保存到XPS格式文档 /// </summary> /// <param name="xpsFilename">XPS文件名</param> /// <param name="fixedDoc">XPS文档</param> public static bool SaveToXpsFile(string xpsFilename, FixedDocument fixedDoc) { try { //保存到XPS文件 DocumentPaginator paginator = fixedDoc.DocumentPaginator; System.Windows.Xps.Packaging.XpsDocument xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(xpsFilename, System.IO.FileAccess.Write); var documentWriter = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(xpsDocument); documentWriter.Write(paginator); xpsDocument.Close(); return(true); } catch (Exception ex) { ErrorString = ex.Message; return(false); } }
private Public.ImageStream RenderXps() { Public.ImageStream renderedImage = new Public.ImageStream(); System.IO.MemoryStream renderedContent = new System.IO.MemoryStream(); String contentUriName = ("memorystream://rendered" + Guid.NewGuid().ToString().Replace("-", "") + ".xps"); Uri contentUri = new Uri(contentUriName, UriKind.Absolute); // FOR TESTING, OUTPUT TO DISK FILE BY CHANGING OPEN FROM MEMORY STREAM TO FILE LOCATION System.IO.Packaging.Package xpsPackage = System.IO.Packaging.Package.Open(renderedContent, System.IO.FileMode.Create); System.IO.Packaging.PackageStore.AddPackage(contentUri, xpsPackage); System.Windows.Xps.Packaging.XpsDocument renderedXpsDocument = new System.Windows.Xps.Packaging.XpsDocument(xpsPackage, System.IO.Packaging.CompressionOption.Normal, contentUriName); System.Windows.Xps.XpsDocumentWriter xpsWriter = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(renderedXpsDocument); System.Windows.Xps.Packaging.IXpsFixedDocumentSequenceWriter contentSequenceWriter; contentSequenceWriter = renderedXpsDocument.AddFixedDocumentSequence(); List <System.Windows.Xps.Packaging.XpsDocument> xpsContents = new List <System.Windows.Xps.Packaging.XpsDocument> (); // LOAD CORRESPONDENCE RECORD TO SEE IF THERE IS ANY CONTENT AVAILABLE Reference.Correspondence renderCorrespondence = application.CorrespondenceGet(correspondenceId); if (renderCorrespondence == null) { throw new ApplicationException("Unable to load base Correspondence to Render Content."); } if (renderCorrespondence.Content.Count == 0) { throw new ApplicationException("No Content to Render for Correspondence."); } renderCorrespondence.LoadContentAttachments(); foreach (Reference.CorrespondenceContent currentCorrespondenceContent in renderCorrespondence.Content.Values) { System.Windows.Xps.Packaging.XpsDocument xpsContent = null; switch (currentCorrespondenceContent.ContentType) { case Reference.Enumerations.CorrespondenceContentType.Report: #region Generate Report Content Reporting.ReportingServer reportingServer = application.ReportingServerGet(currentCorrespondenceContent.ReportingServerId); if (reportingServer == null) { throw new ApplicationException("Unable to load Reporting Server to Render Content."); } System.Reflection.Assembly reportingServerAssembly = System.Reflection.Assembly.LoadFrom(reportingServer.AssemblyReference); Type reportingServerType = reportingServerAssembly.GetType(reportingServer.AssemblyClassName); if (reportingServerType == null) { throw new ApplicationException("Unable to find Class [" + reportingServer.AssemblyClassName + "] in referenced Assembly [" + reportingServer.AssemblyReference + "]."); } Public.Reporting.IReportingServer reportingServerObject = (Public.Reporting.IReportingServer)Activator.CreateInstance(reportingServerType); Dictionary <String, String> reportParameters = new Dictionary <String, String> (); reportParameters.Add("entityCorrespondenceId", id.ToString()); // SSRS RENDER TIFF, CONVERT TO XPS Public.ImageStream imageStream = reportingServerObject.Render(reportingServer.WebServiceHostConfiguration, currentCorrespondenceContent.ReportName, reportParameters, "image", reportingServer.ExtendedProperties); xpsContent = imageStream.TiffToXps(); xpsContents.Add(xpsContent); #endregion break; case Reference.Enumerations.CorrespondenceContentType.Attachment: #region Load Attachment contentUriName = ("memorystream://attachment" + Guid.NewGuid().ToString().Replace("-", "") + ".xps"); contentUri = new Uri(contentUriName, UriKind.Absolute); System.IO.MemoryStream attachmentStream = new System.IO.MemoryStream(); System.IO.Packaging.Package attachmentPackage = System.IO.Packaging.Package.Open(currentCorrespondenceContent.Attachment); System.IO.Packaging.PackageStore.AddPackage(contentUri, attachmentPackage); xpsContent = new System.Windows.Xps.Packaging.XpsDocument(attachmentPackage, System.IO.Packaging.CompressionOption.Normal, contentUriName); xpsContents.Add(xpsContent); #endregion break; } } #region Merge XPS Contents foreach (System.Windows.Xps.Packaging.XpsDocument currentContentDocument in xpsContents) { foreach (System.Windows.Xps.Packaging.IXpsFixedDocumentReader currentContentDocumentReader in currentContentDocument.FixedDocumentSequenceReader.FixedDocuments) { System.Windows.Xps.Packaging.IXpsFixedDocumentWriter contentDocumentWriter = contentSequenceWriter.AddFixedDocument(); foreach (System.Windows.Xps.Packaging.IXpsFixedPageReader currentContentPageReader in currentContentDocumentReader.FixedPages) { System.Windows.Xps.Packaging.IXpsFixedPageWriter contentPageWriter = contentDocumentWriter.AddFixedPage(); System.Xml.XmlWriter xmlPageWriter = contentPageWriter.XmlWriter; String pageContent = CommonFunctions.XmlReaderToString(currentContentPageReader.XmlReader); #region Resource Dictionaries foreach (System.Windows.Xps.Packaging.XpsResourceDictionary currentXpsDictionary in currentContentPageReader.ResourceDictionaries) { System.Windows.Xps.Packaging.XpsResourceDictionary xpsDictionary = contentPageWriter.AddResourceDictionary(); System.IO.Stream xpsDictionaryStream = xpsDictionary.GetStream(); // GET DESTINATION STREAM TO COPY TO currentXpsDictionary.GetStream().CopyTo(xpsDictionaryStream); // REMAP SOURCE URI pageContent = pageContent.Replace(currentXpsDictionary.Uri.ToString(), xpsDictionary.Uri.ToString()); xpsDictionary.Commit(); } #endregion #region Color Contexts foreach (System.Windows.Xps.Packaging.XpsColorContext currentXpsColorContext in currentContentPageReader.ColorContexts) { System.Windows.Xps.Packaging.XpsColorContext xpsColorContext = contentPageWriter.AddColorContext(); System.IO.Stream xpsColorContextStream = xpsColorContext.GetStream(); // GET DESTINATION STREAM TO COPY TO currentXpsColorContext.GetStream().CopyTo(xpsColorContextStream); // REMAP SOURCE URI pageContent = pageContent.Replace(currentXpsColorContext.Uri.ToString(), xpsColorContext.Uri.ToString()); xpsColorContext.Commit(); } #endregion #region Fonts foreach (System.Windows.Xps.Packaging.XpsFont currentXpsFont in currentContentPageReader.Fonts) { System.Windows.Xps.Packaging.XpsFont xpsFont = contentPageWriter.AddFont(false); xpsFont.IsRestricted = false; System.IO.MemoryStream deobfuscatedStream = new System.IO.MemoryStream(); currentXpsFont.GetStream().CopyTo(deobfuscatedStream); String fontResourceName = currentXpsFont.Uri.ToString(); fontResourceName = fontResourceName.Split('/')[fontResourceName.Split('/').Length - 1]; if (fontResourceName.Contains(".odttf")) { fontResourceName = fontResourceName.Replace(".odttf", String.Empty); Guid fontGuid = new Guid(fontResourceName); deobfuscatedStream = CommonFunctions.XmlFontDeobfuscate(currentXpsFont.GetStream(), fontGuid); } System.IO.Stream xpsFontStream = xpsFont.GetStream(); // GET DESTINATION STREAM TO COPY TO deobfuscatedStream.CopyTo(xpsFontStream); // REMAP SOURCE URI pageContent = pageContent.Replace(currentXpsFont.Uri.ToString(), xpsFont.Uri.ToString()); xpsFont.Commit(); } #endregion #region Images foreach (System.Windows.Xps.Packaging.XpsImage currentXpsImage in currentContentPageReader.Images) { // FILE EXTENSION TO DETERMINE IMAGE TYPE System.Windows.Xps.Packaging.XpsImageType imageType = System.Windows.Xps.Packaging.XpsImageType.TiffImageType; String fileExtension = currentXpsImage.Uri.ToString().Split('.')[1]; switch (fileExtension.ToLower()) { case "jpeg": case "jpg": imageType = System.Windows.Xps.Packaging.XpsImageType.JpegImageType; break; case "png": imageType = System.Windows.Xps.Packaging.XpsImageType.PngImageType; break; case "wdp": imageType = System.Windows.Xps.Packaging.XpsImageType.WdpImageType; break; case "tif": case "tiff": default: imageType = System.Windows.Xps.Packaging.XpsImageType.TiffImageType; break; } System.Windows.Xps.Packaging.XpsImage xpsImage = contentPageWriter.AddImage(imageType); System.IO.Stream xpsImageStream = xpsImage.GetStream(); // GET DESTINATION STREAM TO COPY TO currentXpsImage.GetStream().CopyTo(xpsImageStream); // REMAP SOURCE URI pageContent = pageContent.Replace(currentXpsImage.Uri.ToString(), xpsImage.Uri.ToString()); // xpsImage.Uri = currentXpsImage.Uri; xpsImage.Commit(); } #endregion // COPY XAML CONTENT xmlPageWriter.WriteRaw(pageContent); contentPageWriter.Commit(); } contentDocumentWriter.Commit(); } } #endregion contentSequenceWriter.Commit(); renderedXpsDocument.Close(); xpsPackage.Close(); renderedImage.Image = renderedContent; renderedImage.Name = "EntityCorrespondence" + id.ToString() + ".xps"; renderedImage.Extension = "xps"; renderedImage.MimeType = "application/vnd.ms-xpsdocument"; renderedImage.IsCompressed = false; return(renderedImage); }
public System.Windows.Xps.Packaging.XpsDocument TiffToXps() { System.Drawing.Image[] tiffPages = TiffPages(); // INITIALIZE XPS System.IO.MemoryStream xpsStream = new System.IO.MemoryStream(); System.IO.Packaging.Package xpsPackage = System.IO.Packaging.Package.Open(xpsStream, System.IO.FileMode.Create); System.Windows.Xps.Packaging.XpsDocument xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(xpsPackage); xpsDocument.Uri = new Uri("http://www.quebesystems.com", UriKind.Absolute); System.Windows.Xps.XpsDocumentWriter xpsWriter = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(xpsDocument); // SET UP XPS DOCUMENT AND FIRST FIXED DOCUMENT System.Windows.Xps.Packaging.IXpsFixedDocumentSequenceWriter xpsFixedDocumentSequenceWriter = xpsDocument.AddFixedDocumentSequence(); System.Windows.Xps.Packaging.IXpsFixedDocumentWriter xpsFixedDocumentWriter = xpsFixedDocumentSequenceWriter.AddFixedDocument(); // WRITE TIFF IMAGES AS PAGES IN XPS foreach (System.Drawing.Image currentTiffPage in tiffPages) { // ADD A NEW PAGE, THEN EMBED IMAGE TO THE PAGE System.Windows.Xps.Packaging.IXpsFixedPageWriter xpsFixedPageWriter = xpsFixedDocumentWriter.AddFixedPage(); System.Windows.Xps.Packaging.XpsImage xpsImage = xpsFixedPageWriter.AddImage(System.Windows.Xps.Packaging.XpsImageType.TiffImageType); System.IO.Stream xpsImageStream = xpsImage.GetStream(); // GET DESTINATION STREAM TO COPY TO // COPY TIFF IMAGE TO XPS IMAGE currentTiffPage.Save(xpsImageStream, System.Drawing.Imaging.ImageFormat.Tiff); xpsImage.Commit(); // IMAGE IS EMBED, BUT PAGE HAS NOT BEEN CREATED, CREATE PAGE System.Xml.XmlWriter xmlPageWriter = xpsFixedPageWriter.XmlWriter; xmlPageWriter.WriteStartElement("FixedPage"); // XPS PAGE STARTS WITH A FIXED PAGE TAG xmlPageWriter.WriteAttributeString("xmlns", "http://schemas.microsoft.com/xps/2005/06"); xmlPageWriter.WriteAttributeString("xml:lang", "en-US"); xmlPageWriter.WriteAttributeString("Width", currentTiffPage.Width.ToString()); xmlPageWriter.WriteAttributeString("Height", currentTiffPage.Height.ToString()); xmlPageWriter.WriteStartElement("Path"); xmlPageWriter.WriteAttributeString("Data", "M 0,0 H " + currentTiffPage.Width.ToString() + " V " + currentTiffPage.Height.ToString() + " H 0 z"); xmlPageWriter.WriteStartElement("Path.Fill"); xmlPageWriter.WriteStartElement("ImageBrush"); xmlPageWriter.WriteAttributeString("TileMode", "None"); xmlPageWriter.WriteAttributeString("ViewboxUnits", "Absolute"); xmlPageWriter.WriteAttributeString("ViewportUnits", "Absolute"); xmlPageWriter.WriteAttributeString("Viewbox", "0, 0, " + currentTiffPage.Width.ToString() + ", " + currentTiffPage.Height.ToString()); xmlPageWriter.WriteAttributeString("Viewport", "0, 0, " + currentTiffPage.Width.ToString() + ", " + currentTiffPage.Height.ToString()); xmlPageWriter.WriteAttributeString("ImageSource", xpsImage.Uri.ToString()); xmlPageWriter.WriteEndElement(); // IMAGE BRUSH xmlPageWriter.WriteEndElement(); // PATH.FILL xmlPageWriter.WriteEndElement(); // PATH // PAGE END ELEMENT xmlPageWriter.WriteEndElement(); // FIXED PAGE // PAGE COMMIT xpsFixedPageWriter.Commit(); } // COMMIT DOCUMENT WRITER xpsFixedDocumentWriter.Commit(); xpsFixedDocumentSequenceWriter.Commit(); xpsDocument.Close(); xpsPackage.Close(); //System.IO.FileStream fileStream = new System.IO.FileStream (@"C:\MERCURY\TEST7.XPS", System.IO.FileMode.Create); //fileStream.Write (xpsStream.ToArray (), 0, Convert.ToInt32 (xpsStream.Length)); //fileStream.Flush (); //fileStream.Close (); String contentUriName = ("memorystream://content" + Guid.NewGuid().ToString().Replace("-", "") + ".xps"); Uri contentUri = new Uri(contentUriName, UriKind.Absolute); System.IO.Packaging.Package attachmentPackage = System.IO.Packaging.Package.Open(xpsStream); System.IO.Packaging.PackageStore.AddPackage(contentUri, attachmentPackage); System.Windows.Xps.Packaging.XpsDocument xpsContent = new System.Windows.Xps.Packaging.XpsDocument(attachmentPackage, System.IO.Packaging.CompressionOption.Normal, contentUriName); return(xpsContent); }
//文档装载预览 void UC_PrintPreview_Loaded(object sender, RoutedEventArgs e) { dvcontent.Zoom = 75.0; try { if (!string.IsNullOrWhiteSpace(GlobalCodeBuilder.filePaht)) { string[] strArr = GlobalCodeBuilder.filePaht.Split('\\'); string xpsName = strArr[strArr.Length - 1].Substring(0, strArr[strArr.Length - 1].IndexOf('.')); string xpsfilename = AppDomain.CurrentDomain.BaseDirectory + string.Format(@"Docs\{0}.xps", xpsName); string err = ""; doc = FileHelper.ConvertWordToXps(GlobalCodeBuilder.filePaht, xpsfilename, out err); if (!string.IsNullOrWhiteSpace(err)) { MessageBox.Show("doc is err:" +err); } if (doc != null) { dvcontent.Visibility = Visibility.Visible; dvcontent.Document = doc.GetFixedDocumentSequence(); doc.Close(); } } else { MessageBox.Show("未能正确获取文档地址"); BackHoem(); } } catch (Exception ex) { HttpAPIService.LiveReportAPI(HttpUtility.UrlEncode("文档预览错误"),"0"); BackHoem(); } }