可以将多个xps文档合并为WPF中的一个xps文档并显示在DocumentViewer
?
一个应用程序有4个小的xps文档,每个文档都单独显示,但在其中一个地方,所有4个文档应该显示为一个文档。我该如何解决它?可以将多个xps文档合并为一个WPF文件吗?
3
A
回答
2
这里,targetDocument
是新文件的目标路径,list
是要合并的所有文档的列表。
public void CreateXPSStreamPages(string targetDocument, List<string> list)
{
Package container = Package.Open(targetDocument, FileMode.Create);
XpsDocument xpsDoc = new XpsDocument(container);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
SerializerWriterCollator vxpsd = writer.CreateVisualsCollator();
vxpsd.BeginBatchWrite();
foreach (string sourceDocument in list)
{
AddXPSDocument(sourceDocument, vxpsd);
}
vxpsd.EndBatchWrite();
container.Close();
}
public void AddXPSDocument(string sourceDocument, SerializerWriterCollator vxpsd)
{
XpsDocument xpsOld = new XpsDocument(sourceDocument, FileAccess.Read);
FixedDocumentSequence seqOld = xpsOld.GetFixedDocumentSequence();
foreach (DocumentReference r in seqOld.References)
{
FixedDocument d = r.GetDocument(false);
foreach (PageContent pc in d.Pages)
{
FixedPage fixedPage = pc.GetPageRoot(false);
double width = fixedPage.Width;
double height = fixedPage.Height;
Size sz = new Size(width, height);
fixedPage.Width = width;
fixedPage.Height = height;
fixedPage.Measure(sz);
fixedPage.Arrange(new Rect(new Point(), sz));
//fixedPage.UpdateLayout();
ContainerVisual newPage = new ContainerVisual();
newPage.Children.Add(fixedPage);
//test: add Watermark from Feng Yuan sample
//newPage.Children.Add(CreateWatermark(width, height, "Watermark"));
vxpsd.Write(newPage);
}
}
xpsOld.Close();
}
1
如果有人有兴趣在VB代码:
Public Sub CreateXPSStream(targetDocument As String, ListToMerge As List(Of String))
If (File.Exists(targetDocument)) Then
File.Delete(targetDocument)
End If
Dim container As Package = Package.Open(targetDocument, FileMode.Create)
Dim xpsDoc = New System.Windows.Xps.Packaging.XpsDocument(container)
Dim seqNew As FixedDocumentSequence = New FixedDocumentSequence()
For Each sourceDocument As String In ListToMerge
AddXPSDocuments(sourceDocument, seqNew)
Next
Dim xpsWriter As XpsDocumentWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc)
xpsWriter.Write(seqNew)
xpsDoc.Close()
container.Close()
End Sub
Public Sub AddXPSDocuments(ByVal sourceDocument As String, ByRef seqNew As FixedDocumentSequence)
Try
Dim xpsOld As XpsDocument = New XpsDocument(sourceDocument, FileAccess.Read)
Dim seqOld As FixedDocumentSequence = xpsOld.GetFixedDocumentSequence()
For Each r As DocumentReference In seqOld.References
Dim newRef As DocumentReference = New DocumentReference()
CType(newRef, IUriContext).BaseUri = CType(r, IUriContext).BaseUri
newRef.Source = r.Source
seqNew.References.Add(newRef)
Next
Catch ex As Exception
myStatusAdd("Error with " & sourceDocument)
End Try
End Sub
感谢您的初始代码。
这也需要引用相当数量的在您的项目:
PresentationCore
PresentationFramework
ReachFramwork
System.Core
System.Windows.Presentation
System.Xaml
System.Printing
WindowsBase
我认为这就是全部。
相关问题
- 1. 你可以将多个文件合并成一个文件吗?
- 2. 可以将sIFR js文件合并为1个js文件吗?
- 3. 多个base64文档可以存储在一个文件中吗?
- 4. 将多个JavaScript文件合并为一个安全吗?
- 5. 如何将两个XML文档合并为一个XML文档?
- 6. 将多个<Body>(xml)word文档合并为一个文档
- 7. 将多个Word文档样式合并为一个Open Xml
- 8. 将多个文档就绪功能合并为一个?
- 9. GZIP将多个文件合并为一个文件gz
- 10. 如何将多个.cs文件合并为一个.dll文件?
- 11. 将多个文件合并为一个头文件
- 12. 将多个PDF文件合并为一个PDF文件
- 13. 使用glob将多个xml文件合并为一个文件
- 14. 我可以将html5shiv.js和respond.min.js合并到一个文件中吗?
- 15. 多个JavaScript文件合并为一个
- 16. 如何将不同的文档合并为一个文档?
- 17. 合并XPS文件留下打开的文件句柄以文档引用
- 18. 将WPF(XAML)控件转换为XPS文档
- 19. 使用批处理文件将多个xml文档合并为一个大文档
- 20. 将两个文本文件合并为一个CSV文件
- 21. 通过使用php脚本将多个文档或rtf文件合并到一个文档或rtf文件
- 22. 合并多个csv文件并将它们保存为一个csv文件
- 23. 是否可以在iPhone中以编程方式将多个PDF文件合并为一个PDF文件?
- 24. 将多个JS文件合并为1个JS文件
- 25. 将多个xml文件合并为单个xml文件
- 26. 通过Wpf控件打印文件并将其转换为XPS
- 27. 将多个文件流合并成一个文件?
- 28. 将多个JSON文件合并到一个Ruby文件
- 29. 将多个JavaScript文件合并成一个JS文件
- 30. 在Java中将多个文本文件合并为一个文件