1

iTextSharp を使用して PDF ファイルを追加したいのですが、PDF ファイルにブックマークが含まれている場合は、ブックマークも追加する必要があります。

現在、次のコードを使用しています

Document document = new Document();
//Step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
writer.ViewerPreferences = PdfWriter.PageModeUseOutlines;
//Step 3: Open the document
document.Open();

PdfContentByte cb = writer.DirectContent;

//The current file path
string filename = "D:\\rtf\\2.pdf";

// we create a reader for the document
PdfReader reader = new PdfReader(filename);

//Chapter ch = new Chapter("", 1);

for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
{
    document.SetPageSize(reader.GetPageSizeWithRotation(1));
    document.NewPage();

    // Insert to Destination on the first page
    if (pageNumber == 1)
    {
        Chunk fileRef = new Chunk(" ");
        fileRef.SetLocalDestination(filename);
        document.Add(fileRef);
    }

    PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
    int rotation = reader.GetPageRotation(pageNumber);
    if (rotation == 90 || rotation == 270)
    {
        cb.Add(page);
    }
    else
    {
        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
    }
}

document.Close();
4

1 に答える 1

1

私の本の第6章を読んでください。表 6.1 には、次のように書かれています。

他の PDF ドキュメントからページをインポートできます。主な欠点は、インポートされたページのすべてのインタラクティブ機能 (注釈、ブックマーク、フィールドなど) が処理中に失われることです。

これはまさにあなたが経験することです。ただし、その表にリストされている他のクラスを見ると、インタラクティブな機能を維持するクラスである PdfStamper、PdfCopy などを見つけることができます。

PdfStamperブックマークを保持します。PdfCopy(または)を使用する場合はPdfSmartCopy、第 7 章を​​読んで保管方法を確認する必要があります。第 7 章は無料では利用できませんが、Java / C#で例を参照できます。例が必要ですConcatenateBookmarks

正しいクラスを使用していないため、現在のコードは複雑に見えることに注意してください。を使用PdfStamperすると、コードの行数が大幅に削減されます。

于 2013-02-07T08:44:51.930 に答える