1

行頭にスペースを含む正確なテキストを挿入しようとしていますが、iText は最初に表示されるシンボルの前にすべてのスペースを消費します (集計も機能しません)。

iText 7 Community エディションを使用しています。

C# コード:

 FileInfo file = new FileInfo(DEST);
 file.Directory.Create();
 //Initialize PDF writer
 PdfWriter writer = new PdfWriter(DEST);
 //Initialize PDF document
 PdfDocument pdf = new PdfDocument(writer);
 // Initialize document
 Document doc = new Document(pdf); 
 doc.Add(new Paragraph("Test\n\tTest\n  Test\n        Test   1 2      3"));
 doc.Close();

このコードは、出力 .pdf ドキュメントのテキストを次のように表示します。

Test
Test
Test
Test   1 2      3

各行の最初の可視記号の前にタブとスペースを入れない。

コードを変更して取得するにはどうすればよいですか

Test
    Test
  Test
        Test   1 2      3

出力ドキュメントに?

4

3 に答える 3

1

あなたのコード例ではiTextSharp、スペースは尊重されますが、(埋め込まれた) タブは 5.xx.xx でも機能しません。あなたが証明したように、少し驚くべきことは、iText7 が改行に続くスペースを削除することです。どちらかまたは両方のサポートが必要かどうかわからないので、各ケースを個別に処理する例を示します。

まず、タブを保持します。

Paragraph p = new Paragraph("Line 0\n")
    .AddTabStops(new TabStop(8f))
    // change to your needs  ^^
    .Add(new Tab())
    .Add("Line 1");
doc.Add(p);

次に、改行の直後にスペースを保持します。

string[] lines = "0\n1\n    2\n        3\n".Split(
    new string[] { "\n" }, 
    StringSplitOptions.RemoveEmptyEntries
);
p = new Paragraph().AddStyle(
    new Style().SetFont(PdfFontFactory.CreateFont(FontConstants.COURIER))
);
foreach (var l in lines)
{
    if (Regex.IsMatch(l, @"^\s+"))
    {
        p.Add(" ")  // all spaces stripped, whether one or more characters
            .Add(l) // now leading whitespace preserved
            .Add("\n");
    }
    else
    {
        p.Add(l).Add("\n");
    }
}
doc.Add(p);

iText7 を見たり書いたりしたのはこれが初めてなので、別の方法やより良い方法がある可能性が高く、回避策以外には何も考えていません。奇妙なことに、改行の後に任意の数のスペース文字を追加しすぐにスペース文字で始まる文字列を追加すると、最初の呼び出しではスペースが削除されますが、2 番目の呼び出しではスペースが保持されます。

余談ですが、私がすぐに気づいた点の 1 つは、新しい API で本当に気に入っていることの 1 つは、メソッド チェーンをあらゆる場所で使用できることです。:)

結果は次のとおりです。

ここに画像の説明を入力

于 2016-12-06T04:38:11.877 に答える
0

これを試してみてください。

Font bodyFont = FontFactory.GetFont("Times New Roman", 10, Font.NORMAL);
file.Directory.Create();
//Initialize PDF writer
PdfWriter writer = new PdfWriter(DEST);
//Initialize PDF document
PdfDocument pdf = new PdfDocument(writer);
// Initialize document
Document doc = new Document(pdf); 

doc.Add(new Paragraph("Test", bodyFont));
doc.Add(new Paragraph("    Test", bodyFont));
doc.Add(new Paragraph("  Test", bodyFont));
doc.Add(new Paragraph("        Test 1 2   2", bodyFont));
doc.Close();
于 2016-12-06T05:02:10.680 に答える