可以將多個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. 將XPS文檔拆分爲多個XPS文檔
- 3. 我可以將這兩個.htaccess文件合併爲一個嗎?
- 4. 可以將sIFR js文件合併爲1個js文件嗎?
- 5. 多個base64文檔可以存儲在一個文件中嗎?
- 6. 將多個JavaScript文件合併爲一個安全嗎?
- 7. 如何將兩個XML文檔合併爲一個XML文檔?
- 8. 將多個<Body>(xml)word文檔合併爲一個文檔
- 9. 將多個文檔就緒功能合併爲一個?
- 10. 將多個Word文檔樣式合併爲一個Open Xml
- 11. 將多個Word文檔合併爲一個Open Xml
- 12. 您可以將多個XML文件組合成一個xml文件嗎?
- 13. 將多個PDF文件合併爲一個PDF文件
- 14. 將多個文件合併爲一個頭文件
- 15. GZIP將多個文件合併爲一個文件gz
- 16. 如何將多個.cs文件合併爲一個.dll文件?
- 17. 如何將多個csv文件合併爲一個CSV文件
- 18. 使用glob將多個xml文件合併爲一個文件
- 19. 合併xps文檔使最後一個重複
- 20. 我可以將html5shiv.js和respond.min.js合併到一個文件中嗎?
- 21. 多個JavaScript文件合併爲一個
- 22. 將多個文檔合併到單個PDF文檔中
- 23. 如何將不同的文檔合併爲一個文檔?
- 24. 在wpf中保存xps文檔爲.pdf
- 25. 合併XPS文件留下打開的文件句柄以文檔引用
- 26. 將多個文件夾中的多個文件類型合併爲一個pdf
- 27. 將WPF(XAML)控件轉換爲XPS文檔
- 28. 合併多個文本文件作爲一個CSV文件
- 29. 使用批處理文件將多個xml文檔合併爲一個大文檔
- 30. 將多個XML文檔流組合成一個有效文檔