Pregunta

Necesito dividir un documento XPS existente y crear un nuevo documento XPS con solo una página del original. Traté de copiar el documento y eliminar las páginas del documento copiado, pero eso es muy lento. ¿Hay una forma más eficiente de hacer esto? En C# por favor.

Gracias.

Resuelto:

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();
            }
        }
    }
¿Fue útil?

Solución

  1. Abra el XPSDocument
  2. Crear el destino xpsdocument (mismo método)
  3. Obtenga la fianza fija del primer XPSDocument
  4. Obtenga el primerDocumento fijo de la secuencia.
  5. Obtener el primero Contenido de página desde el Propiedad de páginas
  6. Obtenga la página fija del Propiedad infantil del pageContent
  7. Obtenga el XPSDocumentWriter del segundo XPSDocument
  8. Escribe la página fija

Fácil.


Como señaló Christopher Currens, puede ser necesario usar PageContent.GetPageRoot en vez de Child en el paso 6.

Otros consejos

Gracias, puede ayudar a muchas personas a buscar una solución contra la limitación de la impresión de XPS que ignora PrintTicket definido en el nivel de página.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top