题
我需要拆分现有的XPS文档,并创建一个新的XPS文档,只有原始页面的一页。我尝试复制文档并从复制的文档中删除页面,但这很慢。是否有更有效的方法可以做到这一点?请在C#中。
谢谢。
解决:
public void Split(string originalDocument, string detinationDocument)
{
using (Package package = Package.Open(originalDocument, FileMode.Open, FileAccess.Read))
{
using (Package packageDest = Package.Open(detinationDocument))
{
string inMemoryPackageName = "memorystream://miXps.xps";
Uri packageUri = new Uri(inMemoryPackageName);
PackageStore.AddPackage(packageUri, package);
XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
XpsDocument xpsDocumentDest = new XpsDocument(packageDest, CompressionOption.Normal, detinationDocument);
var fixedDocumentSequence = xpsDocument.GetFixedDocumentSequence();
DocumentReference docReference = xpsDocument.GetFixedDocumentSequence().References.First();
FixedDocument doc = docReference.GetDocument(false);
var content = doc.Pages[2];
var fixedPage = content.GetPageRoot(false);
var writter = XpsDocument.CreateXpsDocumentWriter(xpsDocumentDest);
writter.Write(fixedPage);
xpsDocumentDest.Close();
xpsDocument.Close();
}
}
}
解决方案
- 打开XPSDocument
- 创建目标XpsDocument(相同的方法)
- 从第一个XpsDocument获取FixeDocumentSequece
- 从序列获取第一个固定文件。
- 获得第一个 PageContent 来自 页面属性
- 从 儿童财产 PageContent
- 从第二个XpsDocument获取XpsDocumentWriter
- 写固定页面
简单的。
如前所述 克里斯托弗·库伦斯(Christopher Currens), ,可能有必要使用 PageContent.GetPageRoot
代替 Child
在步骤6中。
其他提示
谢谢,它可以帮助很多人寻求解决方法,以防止XPS打印的限制,XPS打印忽略了页面级别定义的PrintTicket。
不隶属于 StackOverflow