Extraer una sola página de un documento XPS
-
26-10-2019 - |
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();
}
}
}
Solución
- Abra el XPSDocument
- Crear el destino xpsdocument (mismo método)
- Obtenga la fianza fija del primer XPSDocument
- Obtenga el primerDocumento fijo de la secuencia.
- Obtener el primero Contenido de página desde el Propiedad de páginas
- Obtenga la página fija del Propiedad infantil del pageContent
- Obtenga el XPSDocumentWriter del segundo XPSDocument
- 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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow