伙计们,这就是我卡住的地方。
我需要从一大堆微小的 XPS 文件中创建一个 XPS 文件。问题是当我尝试执行此操作时,我的内存不断不足。
我在下面给出了代码(取自 MSDN),但基本上它所做的只是:
- 它读取每个微小的 XPS 文件
- 从中提取页面。
- 将这些页面添加到 FixedDocumentSequence。
- 完成所有文档后,它会将此序列写入组合的 XPS 文档。
IMO,我的 FixedDocumentSequence 变得太大了。所以,我在想,也许我可以一块一块地做这件事——即将微小的 XPS 文档一个接一个地附加到组合的 XPS 文档中。
现在,我不知道该怎么做。任何指针?
代码:
//Create new xps package
Package combinedXPS = Package.Open(filename, FileMode.Create);
XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(new XpsDocument(combinedXPS));
FixedDocumentSequence combinedSequence = new FixedDocumentSequence();
//Go through each file given
foreach (string file in filenames)
{
//Load Xps Package
XpsDocument singleXPS = new XpsDocument(file, FileAccess.Read);
FixedDocumentSequence singleSequence = singleXPS.GetFixedDocumentSequence();
//Go through each document in the file
foreach (DocumentReference docRef in singleSequence.References)
{
FixedDocument oldDoc = docRef.GetDocument(false);
FixedDocument newDoc = new FixedDocument();
DocumentReference newDocReference = new DocumentReference();
newDocReference.SetDocument(newDoc);
//Go through each page
foreach (PageContent page in oldDoc.Pages)
{
PageContent newPage = new PageContent();
newPage.Source = page.Source;
(newPage as IUriContext).BaseUri = ((IUriContext)page).BaseUri;
newPage.GetPageRoot(true);
newDoc.Pages.Add(newPage);
}
//Add the document to package
combinedSequence.References.Add(newDocReference);
}
singleXPS.Close();
}
xpsWriter.Write(combinedSequence);
combinedXPS.Close();