Вопрос

Мне нужно разделить существующий документ 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. Получите FixedDocument Sechrobece из первого XPSDOCUMENT
  4. Получите первый FixdDocument из последовательности.
  5. Получите первое Выступление от Страницы недвижимость
  6. Получите фиксированную страницу от Дочерняя собственность уцветания
  7. Получите XPSDocumentWriter со второго XPSDocument
  8. Напишите фиксированную страницу

Легкий.


Как отмечено Кристофер Керренс, может быть необходимо использовать PageContent.GetPageRoot вместо Child на шаге 6.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top