0

getbaseline[vector.I2]下付き文字と上付き文字の計算に使用しました。これを行うと、PDF から改行を抽出できなくなります。iTextSharp を使用して PDF から改行を取得する方法を教えてください。

4

2 に答える 2

1

あなたが提供したコードは完全に自明ではありません。したがって、私はいくつかの仮定をします。まず、あなたのコードは実装のRenderText(TextRenderInfo)メソッドの抜粋でありRenderListener、おそらくSimpleTextExtractionStrategyメンバー変数、、、、を追加しlastBaseLinefirstcharacter_baselineの拡張です。lastFontSizelastFont

これは、テキストがコンテンツストリームに読み順で出現するドキュメントにのみ関心があるように見えることを意味します。LocationTextExtractionStrategyそれ以外の場合は、または同様の基本アルゴリズムに基づいてコードを作成します。

ifさらに、常にfalseまたは常にtrueである、またはコード本体が空であるステートメントの一部を理解していません。また、何text_secondが良いのか、なぜdifference = curBaseline[Vector.I2] - curBaseline[Vector.I2]1か所で計算するのかも明確ではありません。

そうは言っても、最初のifステートメントは、新しいテキストの垂直ベースラインの位置が以前のテキストのそれと異なるかどうかをテストしているようです。したがって、これは、新しい行の開始を見つけることもできる場所です。

最後のベースラインだけでなく、ドキュメントによると現在のフォントの文字列が持つことができる最も低い範囲を表すラインである最後の降下ラインも保存し始めて、現在のフォントと比較することをお勧めしますアセントライン(ドキュメントでは、現在のフォントの文字列が持つ可能性のある最上位の範囲を表すライン)。

現在のテキストの上昇線が最後のテキストの下降線より下にある場合、つまり新しい行があることを意味するはずですが、下付き文字には遠すぎます。したがって、コードでは:

[...]
else if (curBaseline[Vector.I2] < lastBaseLine[Vector.I2])
{
    if (curAscentLine[Vector.I2] < lastDescentLine[Vector.I2])
    {
        firstcharacter_baseline = character_baseline;
        this.result.Append("<br/>");
    }
    else
    {
        difference = firstcharacter_baseline - curBaseline[Vector.I2];
        text_second.SetTextRise(difference);

        if (difference == 0)
        {
        }
        else
        {
            SupSubFlag = 2;
        }
    }
}
[...]

コンテンツストリーム内のテキストが読み取り順に発生することを期待しているため、Vector.I1最後のテキストのベースラインの終わりと新しいテキストのベースラインの始まりの座標を比較することによって、新しい行を認識しようとすることもできます。 。新しいものが古いものよりも関連する金額が少ない場合、これは新しい行を示唆するキャリッジリターンのように見えます。

もちろん、コードはさまざまな状況で問題が発生します。

  • コンテンツストリーム内のテキストが読み取り順序で発生するという期待が満たされない場合は常に、ゴミがいっぱいになります。

  • 複数列のテキストがある場合、上記のテストでは、ある列の下部と次の列の上部の間の改行は検出されません。これをキャッチするには、(提案された1行下のジャンプのチェックと同様に)新しいテキストが最後のテキストよりもはるかに上にあるかどうかをチェックし、最後の上昇ラインと新しい下降ラインを比較することをお勧めします。

  • テキストが非常に密集しているPDFを取得すると、行が周囲の行の上付き文字および下付き文字と重なる場合があります。この場合、比較を微調整する必要があります。しかし、ここでは、誤って検出されたブレークに確実に遭遇することがあります。

  • 回転したテキストを含むPDFを取得すると、全体にgarbabrが表示されます。

于 2013-03-18T10:28:12.773 に答える
0

使用できます

Document.Add(new Phrase(Environment.NewLine));

また

  // add line below title
  LineSeparator line = new LineSeparator(1f, 100f, BaseColor.BLACK, Element.ALIGN_CENTER, -1);
  document.Add(new Chunk(line));
于 2013-03-16T05:46:38.547 に答える