0

Adobe Acrobat X Proでpdfのページ番号を編集しています。 テストPDF

  • 結果:
    • 1-フロントカバー
    • 2-フロントフォールド
    • 3-i
    • 4-ii
    • 5-ⅲ
    • 6-1
    • 7-2
    • 8-3
    • 9-4
    • 10-5
    • 11-バックフォールド
    • 12-裏表紙

しかし、この GetPageLabels の結果は間違っています

  • ページ番号:
    • 0-フロントカバー1
    • 1-FrontFold1
    • 2-FrontFoldi
    • 3-FrontFoldii
    • 4-FrontFoldiii
    • 5-フロントフォールド1
    • 6-FrontFold2
    • 7-FrontFold3
    • 8-FrontFold4
    • 9-FrontFold5
    • 10-裏折り1
    • 11-裏表紙1

C# コード:

objLabels = PdfPageLabels.GetPageLabels(objReader);
TextBox1.Text += "page number:" + Environment.NewLine;
if (objLabels != null) {
    for (i = 0; i <= objLabels.Length - 1; i++) {
        TextBox1.Text += i + "-" + objLabels(i) + Environment.NewLine;
    }
}

Adobe Acrobat X Pro のように正しい結果を得るにはどうすればよいですか?

4

2 に答える 2

1

に小さなバグがありPdfPageLabels.GetPageLabels(PdfReader)ます。P (プレフィックス) エントリのない新しいページ ラベル ディクショナリに遭遇した場合、現在の値はリセットされません。prefix

int pagecount = 1;
String prefix = "";
char type = 'D';
for (int i = 0; i < n; i++) {
    if (numberTree.ContainsKey(i)) {
        PdfDictionary d = (PdfDictionary)PdfReader.GetPdfObjectRelease(numberTree[i]);
        if (d.Contains(PdfName.ST)) {
            pagecount = ((PdfNumber)d.Get(PdfName.ST)).IntValue;
        }
        else {
            pagecount = 1;
        }
        if (d.Contains(PdfName.P)) {
            prefix = ((PdfString)d.Get(PdfName.P)).ToUnicodeString();
        }
        if (d.Contains(PdfName.S)) {
            type = ((PdfName)d.Get(PdfName.S)).ToString()[1];
        }
        else {
            type = 'e';
        }
    } 
    ...
}

else問題の に次の句を追加することで、これを修正できますif

        if (d.Contains(PdfName.P)) {
            prefix = ((PdfString)d.Get(PdfName.P)).ToUnicodeString();
        }
        else
        {
            prefix = "";
        }

この変化で私は得る

page number:
 0 - FrontCover
 1 - FrontFold
 2 - i
 3 - ii
 4 - iii
 5 - 1
 6 - 2
 7 - 3
 8 - 4
 9 - 5
10 - BackFold
11 - BackCover

PS: ReadPageLabels.javaでテストされた Java iText バージョンにも同じ問題があります。

于 2015-09-07T13:00:31.017 に答える