2017-02-26 4 views
1

ヘブライ語で最後のページの最後にあるテキストを既存のPDFに追加する必要があります。私はそれを行うことができたが、私はテキストを中心に整列させる必要がある。 pdftableには1つの列しかありません。また、列を100%幅にしたい。itext columntextを整列させて幅を作る方法

これは私のコードです:

Dim LastPage As Integer = pdfRd.NumberOfPages 'The page number 
Dim cb As iTextSharp.text.pdf.PdfContentByte = Nothing 
Dim ct = New ColumnText(cb) 
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.HorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT 'align table 
ct.Alignment = iTextSharp.text.Element.ALIGN_CENTER 
'ct.SetSimpleColumn(70, 36, iTextSharp.text.PageSize.A4.Width - 36, iTextSharp.text.PageSize.A4.Height - 300) 

nTbl.WriteSelectedRows(0, -1, 0, 20, stamp.GetOverContent(LastPage)) 'coords x=300,y=300      
ct.Go() 

答えて

1

あなたのコードで起こっている奇妙な何かがあります。

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行で同じ結果を得ることができたときにクリスタルクリアですか?

+0

ありがとうございました。 SetSimpleColumnを使用すると、pdfサイズが動的なので結果は常に同じになりますか?新しいコンテンツの場所に影響はありませんか? – nkotb

+0

明らかに、ハードコードされた値を適合させる必要があります。現在、コードでは '(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) –

+0

新しいテキストが表示されるように位置を修正しようとしています。ページの下部が、私はまだテキストがページの下部に表示されるように値を設定するSetSimpleColumnで理解できません。私はあなたのリンクを見ました。 – nkotb

関連する問題