Domanda

Ho bisogno di dividere un documento XPS esistente e creare un nuovo documento XPS con una sola pagina di quello originale. Ho provato a copiare il documento e le pagine di eliminazione dal documento copiato, ma questo è molto lento. C'è un modo più efficiente per fare questo? In C # per favore.

Grazie.

Risolto:

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();
            }
        }
    }
È stato utile?

Soluzione

  1. Aprire il XpsDocument
  2. Crea il XpsDocument destinazione (stesso metodo)
  3. ottenere il FixedDocumentSequece dal prima XpsDocument
  4. ottenere i primi FixedDocument dalla sequenza.
  5. PageContent da Pagine proprietà
  6. Prendi il FixedPage dal href="http://msdn.microsoft.com/en-us/library/system.windows.documents.pagecontent.child.aspx" rel="nofollow noreferrer"> proprietà Bambino del PageContent
  7. ottenere il XpsDocumentWriter dal secondo XpsDocument
  8. Scrivi la FixedPage

Facile.


Come notato da Christopher Currens , può essere necessario utilizzare PageContent.GetPageRoot anziché Child nel passaggio 6.

Altri suggerimenti

Grazie, può aiutare un sacco di persone in cerca di una soluzione contro la limitazione di stampa XPS che ignora PrintTicket definito a livello di pagina.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top