Question

Je dois diviser un XPS document existant et créer un nouveau document XPS avec une seule page de l'original. J'ai essayé de copier le document et les pages de suppression du document copié, mais qui est très lent. Y at-il un moyen plus efficace de le faire? En C # s'il vous plaît.

Merci.

Résolu:

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();
            }
        }
    }
Était-ce utile?

La solution

  1. Ouvrez le XpsDocument
  2. Créez le XpsDocument de destination (même méthode)
  3. Obtenez le FixedDocumentSequece de la premier XpsDocument
  4. obtenir le premier FixedDocument de la séquence.
  5. Obtenir le premier PageContent de propriété Pages
  6. Obtenir le FixedPage de la propriété enfant du PageContent
  7. Obtenez le XpsDocumentWriter de la deuxième XpsDocument
  8. Ecrire le FixedPage

facile.


Comme indiqué par Christopher Currens , il peut être nécessaire d'utiliser PageContent.GetPageRoot au lieu de Child à l'étape 6.

Autres conseils

Merci, elle peut aider beaucoup de gens à la recherche d'une solution de contournement contre la limitation de l'impression Xps qui ne tient pas compte PrintTicket défini au niveau de la page.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top