3

既存の XPS ドキュメントを分割し、元の 1 ページのみで新しい 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();
            }
        }
    }
4

2 に答える 2

8
  1. Xps ドキュメントを開く
  2. 宛先 XpsDocument を作成します (同じ方法)。
  3. 最初の XpsDocument から FixedDocumentSequence を取得する
  4. シーケンスから最初の FixedDocument を取得します。
  5. Pages プロパティから最初のPageContentを取得する
  6. PageContentのChild プロパティから FixedPage を取得します。
  7. 2 番目の XpsDocument から XpsDocumentWriter を取得する
  8. FixedPage を書く

簡単。


Christopher Currensが指摘したように、ステップ 6PageContent.GetPageRootの代わりに使用する必要がある場合があります。Child

于 2011-03-16T16:55:10.643 に答える
1

ありがとうございます。ページ レベルで定義された PrintTicket を無視する Xps 印刷の制限に対する回避策を探している多くの人に役立ちます。

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

于 2011-11-22T16:44:36.520 に答える