我试图从Web应用程序生成多页XPS文档,并尝试流式传输按钮单击。公共课Class1{protected void btnGenerateLetter_OnClick(object sender, EventArgs e){ try { string sid = Request.Form["id"]; byte[] bytes = FlowDocumentToXPS(GenerateLetter(), 640, 800); Response.Clear(); Response.ContentType = "application/vnd.ms-xpsdocument"; Response.AddHeader("Content-Disposition", "attachment; filename=document.xps"); Response.OutputStream.Write(bytes, 0, bytes.Length); Response.Flush(); Response.Close(); } catch (Exception ex) { }}private FlowDocument GenerateLetter(){ FlowDocument flowDocument = new FlowDocument(); string Header = "Test Header Message"; string Body = "Content goes here"; string Footer = "Footer Text"; for (int i = 0; i < 3; i++) { Paragraph header = new Paragraph(); header.Margin = new System.Windows.Thickness(250, 100, 250, 10); header.BreakPageBefore = true; header.Inlines.Add(new Run(Header)); header.Inlines.Add(new LineBreak()); header.Inlines.Add(new LineBreak()); header.Inlines.Add(new LineBreak()); Paragraph body = new Paragraph(); body.Inlines.Add(new Run(Body)); body.Inlines.Add(new LineBreak()); body.Inlines.Add(new LineBreak()); Paragraph footer = new Paragraph(); footer.Inlines.Add(new Run(Footer)); flowDocument.Blocks.Add(header); flowDocument.Blocks.Add(body); flowDocument.Blocks.Add(footer); } return flowDocument;}public static byte[] FlowDocumentToXPS(FlowDocument flowDocument, int width, int height){ MemoryStream stream = new MemoryStream(); // create a package using (Package package = Package.Open(stream, FileMode.CreateNew)) { // create an empty XPS document using (XpsDocument xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed)) { // create a serialization manager XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false); // retrieve document paginator DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator; // set page size paginator.PageSize = new System.Windows.Size(width, height); // save as XPS rsm.SaveAsXaml(paginator); rsm.Commit(); } return stream.ToArray(); }}}这在开发环境上工作正常,但是在其他计算机上部署时会出现此错误(IIS6)。启动URI:C:\ Documents and Settings \ 050583b.syn \ Desktop \ document.xps应用程序身份:System.IO.FileFormatException:文件包含损坏的数据。 在MS.Internal.IO.Zip.ZipIOEndOfCentralDirectoryBlock.FindPosition(Stream archiveStream) 在MS.Internal.IO.Zip.ZipIOEndOfCentralDirectoryBlock.SeekableLoad(ZipIOBlockManager blockManager) 在MS.Internal.IO.Zip.ZipIOBlockManager.LoadEndOfCentralDirectoryBlock() 在MS.Internal.IO.Zip.ZipArchive..ctor处(流archiveStream,FileMode模式,FileAccess访问,布尔流,布尔ownStream) 在MS.Internal.IO.Zip.ZipArchive.OpenOnStream(流流,FileMode模式,FileAccess访问,布尔流) 在System.IO.Packaging.ZipPackage..ctor处(Stream,FileMode模式,FileAccess访问,布尔流) 在System.IO.Packaging.Package.Open(流流,FileMode packageMode,FileAccess packageAccess,布尔流) 在System.IO.Packaging.Package.Open(Stream流) 在MS.Internal.Documents.Application.TransactionalPackage..ctor(原始流) 在MS.Internal.Documents.Application.PackageController.MS.Internal.Documents.Application.IDocumentController.Open(文档文档) 在MS.Internal.Documents.Application.DocumentManager.DispatchOpen(IDocumentController控制器,文档文档)处 在MS.Internal.Documents.Application.DocumentManager。 c__DisplayClass6.b__5(IDocumentController控制器,Document主题) 在MS.Internal.Documents.Application.ChainOfResponsiblity 2.Dispatch(Action action, S subject) at MS.Internal.Documents.Application.DocumentManager.<>c__DisplayClass6.<OrderByLeastDependent>b__4(Document member) at MS.Internal.Documents.Application.ChainOfDependencies 1.OrderByLeastDependent(T成员,Action操作) 在MS.Internal.Documents.Application.DocumentManager.OrderByLeastDependent(DispatchDelegate操作,文档文档)处 在MS.Internal.Documents.Application.DocumentManager.Open(文档文档) 在MS.Internal.AppModel.ApplicationProxyInternal.InitContainer() 在MS.Internal.AppModel.ApplicationProxyInternal.Run(InitData initData) 最佳答案 我想问题是字节没有完全写入响应中。请尝试以下操作,希望它可以工作。HttpContext context = HttpContext.Current;context.Response.Clear();context.Response.ContentType = "application/vnd.ms-xpsdocument";context.Response.AppendHeader("Content-Disposition", "attachment; filename=document.xps");context.Response.End();关于asp.net - 从Web应用程序生成XPS文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1363657/
10-14 05:19