あなたのコードで起こっている奇妙な何かがあります。
ColumnText
オブジェクトを作成しますが、何もしません。 ct
へのすべての参照を削除し、あなたのコードは、前とまったく同じPDFを生成:
nTbl.WidthPercentage = 100 'Table size is set to 100% of the page
nTbl.LockedWidth = True
nTbl.SetTotalWidth(rows) ' Set the column widths on table
これにはない:私が記載されたコードを見れば
Dim LastPage As Integer = pdfRd.NumberOfPages 'The page number
Dim rows As Single() = {500} 'create column sizes
Dim nTbl As PdfPTable = New PdfPTable(1) 'number of columns in our case 1
Dim cellFont As iTextSharp.text.Font = New iTextSharp.text.Font(BaseFont, 10, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.RED)
nTbl.RunDirection = PdfWriter.RUN_DIRECTION_RTL
nTbl.WidthPercentage = 100 'Table size is set to 100% of the page
nTbl.LockedWidth = True
nTbl.SetTotalWidth(rows) ' Set the column widths on table
nTbl.DefaultCell.Border = 0
nTbl.AddCell(New iTextSharp.text.Phrase(MsgOnClosing, cellFont))
nTbl.SetExtendLastRow(1, 1)
nTbl.WriteSelectedRows(0, -1, 0, 20, stamp.GetOverContent(LastPage)) 'coords x=300,y=300
が、私はいくつかのより多くの奇妙なものを見ます意味をなさないPdfPTable
の幅は、パーセンテージ(WidthPercentage
を使用)、または絶対幅(setTotalWidth
を使用)として表すことができます。 LockedWidth
の値は、パーセンテージが使用されるかどうか(false
)、または絶対幅(true
)を決定します。あなたの場合、絶対幅を使用することを選択するので、幅のパーセンテージを設定することは理にかなっていません。
WriteSelectedRows()
メソッドを使用してテーブルを追加しているので意味がありません。 WriteSelectedRows
を使用する場合、は絶対幅を使用する必要があります。また、あなたはrows
変数を定義する行を捨てるべきです
nTbl.WriteSelectedRows(0, -1, 36, 20, stamp.GetOverContent(LastPage))
:
nTbl.SetTotalWidth(iTextSharp.text.PageSize.A4.Width - 72)
しかし、あなたは座標が右持っていることを確認してください:あなたのケースでは、私はこのようにその幅を定義します。なぜnTbl.SetExtendLastRow(1, 1)
を追加しましたか?これは、WriteSelectedRows()
のアプローチと組み合わせても効果がありません。
代替#1:
あなたが望むものを達成するための別の方法もありますが、あなたは確かにColumnText
を使用することができますが、その場合には、列にPdfPTable
を追加する必要があります。あなたはどちらかの意味がありませんでした変数cb
でやったことに注意してください、私はその行捨ててきた:再び
Dim LastPage As Integer = pdfRd.NumberOfPages 'The page number
Dim ct = New ColumnText(stamp.GetOverContent(LastPage))
Dim nTbl As PdfPTable = New PdfPTable(1) 'number of columns in our case 1
Dim cellFont As iTextSharp.text.Font = New iTextSharp.text.Font(BaseFont, 10, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.RED)
nTbl.RunDirection = PdfWriter.RUN_DIRECTION_RTL
nTbl.WidthPercentage = 100 'Table size is set to 100% of the page
nTbl.DefaultCell.Border = 0
nTbl.AddCell(New iTextSharp.text.Phrase(MsgOnClosing, cellFont))
ct.SetSimpleColumn(36, 0, iTextSharp.text.PageSize.A4.Width - 72, 36)
ct.Go()
を、私はいくつかの行を捨てなければなりませんでした。たとえば、テーブルの幅を100%に設定した場合、なぜ列の配置を設定する必要がありますか?
代替#2:
あなたのコードの主な問題は、それが回旋されていることです。ヘブライ語のテキストをすべて追加したいのであれば、なぜPdfPtable
を使用しますか?
古いiText 5の代わりにiText 7とpdfCalligraphアドオンを使用すると、正しい方向がそのまま表示されます。しかし、あなたはiTextの5を使用して主張すれば、あなたは簡単なこのようなColumnText
にヘブライ語のテキストを追加することができます。
Dim LastPage As Integer = pdfRd.NumberOfPages 'The page number
Dim ct = New ColumnText(stamp.GetOverContent(LastPage))
ct.SetSimpleColumn(36, 0, iTextSharp.text.PageSize.A4.Width - 72, 36)
ct.RunDirection = PdfWriter.RUN_DIRECTION_RTL
Dim myFont As iTextSharp.text.Font = New iTextSharp.text.Font(BaseFont, 10, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.RED)
ct.AddElement(New iTextSharp.text.Paragraph(MsgOnClosing, cellFont))
ct.Go()
を使用すると、コードの17本の曖昧なラインを費やすだろうなぜあなたは7行で同じ結果を得ることができたときにクリスタルクリアですか?
ありがとうございました。 SetSimpleColumnを使用すると、pdfサイズが動的なので結果は常に同じになりますか?新しいコンテンツの場所に影響はありませんか? – nkotb
明らかに、ハードコードされた値を適合させる必要があります。現在、コードでは '(0、0)'([座標系の原点](http://developers.itextpdf.com/question/where-origin-xy-pdf-page))は左下隅、および各ページの幅がA4ページの幅であることを示します。ページサイズが予測できない場合は、[各ページのページサイズを取得する]必要があります(http://developers.itextpdf.com/question/how-get-pdf-page-width-and-height)。 「ページを基準にしてテキストを配置する方法」を参照してください。(http://developers.itextpdf.com/question/how-position-text-relative-page) –
新しいテキストが表示されるように位置を修正しようとしています。ページの下部が、私はまだテキストがページの下部に表示されるように値を設定するSetSimpleColumnで理解できません。私はあなたのリンクを見ました。 – nkotb