我需要拆分现有的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();
            }
        }
    }
有帮助吗?

解决方案

  1. 打开XPSDocument
  2. 创建目标XpsDocument(相同的方法)
  3. 从第一个XpsDocument获取FixeDocumentSequece
  4. 从序列获取第一个固定文件。
  5. 获得第一个 PageContent 来自 页面属性
  6. 儿童财产 PageContent
  7. 从第二个XpsDocument获取XpsDocumentWriter
  8. 写固定页面

简单的。


如前所述 克里斯托弗·库伦斯(Christopher Currens), ,可能有必要使用 PageContent.GetPageRoot 代替 Child 在步骤6中。

其他提示

谢谢,它可以帮助很多人寻求解决方法,以防止XPS打印的限制,XPS打印忽略了页面级别定义的PrintTicket。

https://connect.microsoft.com/visualstudio/feedback/details/529120/printqueue-addjob-ignores-printtickets-printtickets-in-xps-documents

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top