Извлечь одну страницу из документа XPS - PullRequest
3 голосов
/ 16 марта 2011

Мне нужно разделить существующий документ 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();
            }
        }
    }

Ответы [ 2 ]

8 голосов
/ 16 марта 2011
  1. Открыть XpsDocument
  2. Создать целевой XpsDocument (тот же метод)
  3. Получить FixedDocumentSequece из первого XpsDocument
  4. Получить первый FixedDocument из последовательности.
  5. Получить первый PageContent из свойства Pages
  6. Получите FixedPage из свойства Child PageContent
  7. Получите XpsDocumentWriter из второго XpsDocument
  8. Напишите FixedPage

Легко.


Как отмечено Christopher Currens , может потребоваться использовать PageContent.GetPageRoot вместо Child на шаге 6.

1 голос
/ 22 ноября 2011

Спасибо, это может помочь многим людям, которые ищут способ обойти ограничение печати Xps, которое игнорирует PrintTicket, определенный на уровне страницы.

...