Извлечь одну страницу из документа XPS
-
26-10-2019 - |
Вопрос
Мне нужно разделить существующий документ XPS и создать новый документ XPS только на одной странице исходного. Я попытался скопировать документ и удалить страницы из скопированного документа, но это очень медленно. Есть ли более эффективный способ сделать это? В C# пожалуйста.
Спасибо.
Решено:
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();
}
}
}
Решение
- Откройте XPSDocument
- Создайте назначение XPSDocument (тот же метод)
- Получите FixedDocument Sechrobece из первого XPSDOCUMENT
- Получите первый FixdDocument из последовательности.
- Получите первое Выступление от Страницы недвижимость
- Получите фиксированную страницу от Дочерняя собственность уцветания
- Получите XPSDocumentWriter со второго XPSDocument
- Напишите фиксированную страницу
Легкий.
Как отмечено Кристофер Керренс, может быть необходимо использовать PageContent.GetPageRoot
вместо Child
на шаге 6.
Другие советы
Спасибо, это может помочь многим людям, которые ищут обходной путь от ограничения печати XPS, который игнорирует PrintTicket, определенную на уровне страницы.
Не связан с StackOverflow