C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: itextsharpで、セルの縦結合


(過去ログ 116 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■68347 / inTopicNo.1)  itextsharpで、セルの縦結合
  
□投稿者/ ひろ (35回)-(2013/10/15(Tue) 12:02:35)

分類:[.NET 全般] 

2013/10/15(Tue) 12:42:41 編集(投稿者)
2013/10/15(Tue) 12:39:57 編集(投稿者)

分類:[.NET 全般] 


[開発環境]ASP.NET(VB)
itextsharpを使ってPDFを作成しています。

2列の表で、1列目が2行結合、2列目が2行(1列目が縦結合)の表を作成したいのですが、以下のコードでは、上手くいきません。

------------------------------------------------------------------------------------------------
cell = New PdfPCell(New Paragraph("セル1", font))
cell.Rowspan() = 2
table.AddCell(cell)

cell = New PdfPCell(New Paragraph("セル2", font))
table.AddCell(cell)
cell = New PdfPCell(New Paragraph("セル3", font))
table.AddCell(cell)

どなたかわかる方がいらっしゃいましたら、教えて頂けませんでしょうか。
宜しくお願い致します。

引用返信 編集キー/
■68355 / inTopicNo.2)  Re[1]: itextsharpで、セルの縦結合
□投稿者/ もりお (16回)-(2013/10/15(Tue) 20:54:07)
No68347 (ひろ さん) に返信

コードを拝見するかぎりでは問題ないように思います。
処理の途中で例外が投げられたとか、表が出力されなかったとか、
表は出力されたけど期待した形じゃなかったとか、うまくいかなかったところを具体的に教えてもらえますか。
引用返信 編集キー/
■68357 / inTopicNo.3)  Re[2]: itextsharpで、セルの縦結合
□投稿者/ ひろ (36回)-(2013/10/16(Wed) 08:32:16)
2013/10/16(Wed) 09:07:21 編集(投稿者)

No68355 (もりお さん) に返信

返信ありがとうございます。
上記のコードですと、1列目が1行、2列目が2行の階段状の表ができてしまいます。

また、

cell = New PdfPCell(New Paragraph("セル2", font))
table.AddCell(cell)

cell = New PdfPCell(New Paragraph("セル1", font))
cell.Rowspan() = 2
table.AddCell(cell)

cell = New PdfPCell(New Paragraph("セル3", font))
table.AddCell(cell)

にすると、1列目が2行、2列目が1行の階段状の表ができてしまします。
上手く結合しません。
引用返信 編集キー/
■68359 / inTopicNo.4)  Re[3]: itextsharpで、セルの縦結合
□投稿者/ もりお (17回)-(2013/10/16(Wed) 12:25:28)
No68357 (ひろ さん) に返信
Sub createPdf()
    Dim filepath = "C:\Users\a\Documents\test.pdf"
    Using stream As New System.IO.FileStream(filepath, System.IO.FileMode.Create)
        Dim document As New Document()
        PdfWriter.GetInstance(document, stream)
        document.Open()
        document.Add(createTable())
        document.Close()
    End Using
End Sub

Function createTable() As PdfPTable
    Dim table = New PdfPTable(2)
    Dim font As New Font(BaseFont.CreateFont("C:\Windows\Fonts\Meiryo.ttc, 0", BaseFont.IDENTITY_H, True))
    Dim cell As PdfPCell

    cell = New PdfPCell(New Paragraph("セル1", font))
    cell.Rowspan() = 2
    table.AddCell(cell)

    cell = New PdfPCell(New Paragraph("セル2", font))
    table.AddCell(cell)

    cell = New PdfPCell(New Paragraph("セル3", font))
    table.AddCell(cell)

    Return table
End Function

私の環境では上のコードで下のように出力されました。

http://uploda.cc/img/img525e042ce7f04.png

階段状というと結合したセルの高さが1つ分しかないということですよね。
原因はなんでしょうね。上と同じコードを実行しても階段状になりますか?
もしなるようであればライブラリのバージョンの違いを疑う必要がでてくるのかなと、
もしならないようであればコードの別の部分が関係してくるのではないかと思います。

引用返信 編集キー/
■68361 / inTopicNo.5)  Re[4]: itextsharpで、セルの縦結合
□投稿者/ ひろ (37回)-(2013/10/16(Wed) 14:27:55)
2013/10/16(Wed) 14:33:21 編集(投稿者)

No68359 (もりお さん) に返信

ありがとうございます。
もりおさんのコードを実行したところ、もりおさんと同じような表が出力されました。
原因がよく解りません。自分のコードと比較して、原因を究明したいと思います。

もりおさんのコードを利用させて頂こうかと思いましたが、2点追加で教えて頂けませんでしょうか。
@table.TotalWidthで表の幅を変えようと思いましたが、いくつに指定しても、大きさが変わりません。
A表を、任意の座標に配置するにはどうしたら良いでしょうか。

現在のコードを記載しておきます。(階段状になるコード)

------------------------------------------------------------------------------
Dim pdf As String = "C:\Users\a\Documents\test.pdf"
Dim doc As Document = New Document(PageSize.A4)

Dim pw As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(pdf, FileMode.Create))
Dim windir As String = System.Environment.GetEnvironmentVariable("windir")
Dim font1 As Font = New Font(BaseFont.CreateFont(windir & "\Fonts\MSGOTHIC.TTC,0", _
BaseFont.IDENTITY_H, BaseFont.EMBEDDED), 20)

doc.Open()

Dim pcb As PdfContentByte = Nothing
pcb = pw.DirectContent

Dim table As PdfPTable = New PdfPTable(2)
table.TotalWidth = 550
Dim widths As Single() = New Single() {1.0F, 1.0F}
table.SetWidths(widths)
Dim cell As PdfPCell

cell = New PdfPCell(New Paragraph("セル1", font))
cell.Rowspan() = 2
table.AddCell(cell)

cell = New PdfPCell(New Paragraph("セル2", font))
table.AddCell(cell)
cell = New PdfPCell(New Paragraph("セル3", font))
table.AddCell(cell)

table.WriteSelectedRows(0, -1, 20, 830, pcb)

doc.Close()
引用返信 編集キー/
■68364 / inTopicNo.6)  Re[5]: itextsharpで、セルの縦結合
□投稿者/ もりお (18回)-(2013/10/16(Wed) 17:52:53)
No68361 (ひろ さん) に返信

結合セルのセルが欠けるのはWriteSelectedRowsメソッドが原因にあるようですね。
WriteSelectedRowsメソッドを使わないとなると位置指定がすこしめんどうですね。

いちおうこんな感じでできました。
ColumnTextオブジェクトを作って範囲を指定してColumnTextオブジェクトにテーブルを追加しました。
テーブルの幅も反映されました。

doc.Open()

Dim pcb As PdfContentByte = pw.DirectContent

Dim table As PdfPTable = New PdfPTable(2)
table.TotalWidth = 550
Dim widths As Single() = New Single() {1.0F, 1.0F}
table.SetWidths(widths)
Dim cell As PdfPCell

cell = New PdfPCell(New Paragraph("セル1", font1))
cell.Rowspan() = 2
table.AddCell(cell)

cell = New PdfPCell(New Paragraph("セル2", font1))
table.AddCell(cell)
cell = New PdfPCell(New Paragraph("セル3", font1))
table.AddCell(cell)

table.HorizontalAlignment = Element.ALIGN_LEFT

Dim column As New ColumnText(pcb)
Dim posX = 20
Dim posY = 830
Dim width = table.TotalWidth
Dim height = table.TotalHeight

Dim leftX = posX
Dim topY = posY
Dim bottomY = topY - height
Dim rightX = leftX + width

column.SetSimpleColumn(leftX, bottomY, rightX, topY)
column.AddElement(table)
column.Go()

doc.Close()

引用返信 編集キー/
■68371 / inTopicNo.7)  Re[6]: itextsharpで、セルの縦結合
□投稿者/ ひろ (38回)-(2013/10/17(Thu) 08:50:52)
No68364 (もりお さん) に返信

もりおさん、度々ありがとうございます!
WriteSelectedRowsメソッドが原因なんですね。
思い通りの表ができそうです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -