2017-07-04 7 views
0

私はPDFをまとめて元のブックマークを維持しようとしています。私はここに記載されている方法を使用しています。 Merging documents with bookmarksすべてのブックマークがインポートされているわけではありません。つまり、一部のファイルのブックマークはインポートされますが、他のファイルからのブックマークはインポートされません。itext 7アウトライン/ブックマークをインポートしない

RUPS(tool that can help you debug PDFs)を使用すると、アウトラインオブジェクトのオブジェクト番号が問題であるように見えます。作業中のファイルでは、アウトラインツリーはオブジェクト1 0で、動作しないファイルではアウトラインツリーはオブジェクト16 0です。または、インポートするファイル内のページツリーのオブジェクト順序に関連している可能性があります。アウトラインツリーはページツリーの前にあります。動作しないファイルでは、ページツリーが最初に来ます。

RUPSはアウトラインツリーを読んで理解できるので、itext 7がこれらのブックマークをインポートできるようにする設定はありますか?

私はitextコミュニティをC#に使用しています。

+0

iText7のどのバージョンを使用していますか?今年は 'PdfMerger'earlierを使ってブックマークがコピーされないバグを修正したことを覚えています。 –

+0

バージョン7.0.2.2 – Jeff

答えて

0

マージ(タグ構造)しながら、ブックマークを保つには、PdfMergerクラスを使用することにより可能である:

public void createPdf(List<String> srcs, String dest) throws IOException, IOException { 
    PdfWriter writer = new PdfWriter(dest); 
    PdfDocument pdfDoc = new PdfDocument(writer); 
    pdfDoc.initializeOutlines();//Make sure the target document has outlines to merge into 
    boolean mergeTags = true; 
    boolean mergeOutlines = true; //Outlines are bookmarks, it is the named used for them in the spec. 
    PdfMerger merger = new PdfMerger(pdfDoc, mergeTags,mergeOutlines);//THis is also equal to new PdfMerger(pdfDoc) 
    for (String src : srcs) { 
     PdfReader reader = new PdfReader(src); 
     PdfDocument from = new PdfDocument(reader); 
     merger.merge(from, 1, from.getNumberOfPages()); 
     from.close(); 
    } 
    merger.close(); 
} 

これは7.0.3以降で動作します。 C#のバージョンでは、メソッドは同じで、大文字になっている名前でしかありません。

+0

ブックマークのインポートに違いがありました。しかし、今では、それ以前に問題がなかったPDFファイルのためにitextがクラッシュする。私は古いブックマークに問題があると思う(ちょうど推測する)。ここで – Jeff

+0

は、スタックトレースです: 「iText.Kernel.Pdf.PdfDocument.CloneOutlinesで(ICollection'1 outlinesToCopy、PdfOutline新規の親、PdfOutline oldParent、IDictionary'2 page2page、PdfDocument toDocument)iText.Kernel.Pdf.PdfDocument.CopyOutlinesで (ICollection'1のアウトライン、PDFドキュメントのドキュメント、IDictionary'2 page2page) iText.Kernel.Pdf.PdfDocument.CopyPagesTo(IList'1 pagesToCopy、PdfDocument toDocument、Int32 insertBeforePage、IPdfPageExtraCopier複写機) ' – Jeff

+0

そのように見えますが、入力はありませんpdf私は確かに言うことができません。プロセスのデバッグ(GithubのAGPLソースコードの検索)によって、おそらく問題の根源を見つけることができます。 RUPSも便利なツールです。しかし、それはすでに別の質問の対象です。私はそれを通過する時間がありません。 –

関連する問題