Frage

Ich muss ein vorhandenes XPS -Dokument teilen und ein neues XPS -Dokument mit nur einer Seite des Originals erstellen. Ich habe versucht, das Dokument zu kopieren und Seiten aus dem kopierten Dokument zu löschen, aber das ist sehr langsam. Gibt es eine effizientere Möglichkeit, dies zu tun? In C# bitte.

Vielen Dank.

Beschlossen:

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();
            }
        }
    }
War es hilfreich?

Lösung

  1. Öffnen Sie das XPSDocument
  2. Erstellen Sie das Ziel XPSDocument (gleiche Methode)
  3. Holen Sie sich das FixedDocumentsece vom ersten XPSDocument
  4. Holen Sie sich das erste feste Dokument aus der Sequenz.
  5. Holen Sie sich den ersten Seiteninhalt von dem Seiten Eigentum
  6. Holen Sie sich die Festpage von der Kindereigenschaft des PageContent
  7. Holen Sie sich den XPSDocumentWriter vom zweiten XPSDocument
  8. Schreiben Sie die Festpage

Einfach.


Wie bereits erwähnt Christopher Currens, Es kann erforderlich sein, zu verwenden PageContent.GetPageRoot Anstatt von Child In Schritt 6.

Andere Tipps

Vielen Dank, es kann vielen Menschen helfen, die eine Problemumgehung gegen die Einschränkung des XPS -Drucks suchen, der auf Seitenebene definiert wird.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top