【PDF】 セルマージを設定した場合、改ページが発生したときに罫線やグリッド線の一部が表示されないことがある
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
PDF出力時、マージしたセルの罫線やグリッド線が正しく描画されない場合があります。
※PDF出力設定として、各ページのヘッダとして特定の行を繰り返し表示した場合に現象が発生します。
【再現手順】
1.新規 Web フォームに SPREAD と標準のボタンコントロール二つを用意します
2.下記の再現コードを貼り付けます
3.Web ページを起動しボタン1を押下します
--- 出力されたPDF内にあるマージされたセル罫線の一部がただしく描画されません
4.Web ページを起動しボタン2を押下します
--- 出力されたPDF内にあるマージされたセルグリッド線の一部がただしく描画されません
【再現コード】
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 初期化
InitSpread()
' 罫線の設定
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' PDF出力
FpSpread1.SavePdfToResponse("test1.pdf")
End Sub
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 初期化
InitSpread()
' グリッド線の設定
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' PDF出力
FpSpread1.SavePdfToResponse("test2.pdf")
End Sub
Private Sub InitSpread()
FpSpread1.ActiveSheetView.Reset()
' SPREADの設定
FpSpread1.ActiveSheetView.AllowPage = False
FpSpread1.ActiveSheetView.RowCount = 100
For i As Integer = 1 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, "A1")
If i < 50 Then
FpSpread1.ActiveSheetView.SetValue(i, 1, "B1")
Else
FpSpread1.ActiveSheetView.SetValue(i, 1, "B2")
End If
FpSpread1.ActiveSheetView.SetValue(i, 3, String.Format("D{0}", i + 1))
Next
' マージ設定
FpSpread1.ActiveSheetView.SetColumnMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.Always)
FpSpread1.ActiveSheetView.PrintInfo.RepeatColStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatColEnd = 3
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowEnd = 0
End Sub
End Class
※PDF出力設定として、各ページのヘッダとして特定の行を繰り返し表示した場合に現象が発生します。
【再現手順】
1.新規 Web フォームに SPREAD と標準のボタンコントロール二つを用意します
2.下記の再現コードを貼り付けます
3.Web ページを起動しボタン1を押下します
--- 出力されたPDF内にあるマージされたセル罫線の一部がただしく描画されません
4.Web ページを起動しボタン2を押下します
--- 出力されたPDF内にあるマージされたセルグリッド線の一部がただしく描画されません
【再現コード】
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 初期化
InitSpread()
' 罫線の設定
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' PDF出力
FpSpread1.SavePdfToResponse("test1.pdf")
End Sub
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 初期化
InitSpread()
' グリッド線の設定
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' PDF出力
FpSpread1.SavePdfToResponse("test2.pdf")
End Sub
Private Sub InitSpread()
FpSpread1.ActiveSheetView.Reset()
' SPREADの設定
FpSpread1.ActiveSheetView.AllowPage = False
FpSpread1.ActiveSheetView.RowCount = 100
For i As Integer = 1 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, "A1")
If i < 50 Then
FpSpread1.ActiveSheetView.SetValue(i, 1, "B1")
Else
FpSpread1.ActiveSheetView.SetValue(i, 1, "B2")
End If
FpSpread1.ActiveSheetView.SetValue(i, 3, String.Format("D{0}", i + 1))
Next
' マージ設定
FpSpread1.ActiveSheetView.SetColumnMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.Always)
FpSpread1.ActiveSheetView.PrintInfo.RepeatColStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatColEnd = 3
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowEnd = 0
End Sub
End Class
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
セル罫線とグリッド線、両方の設定を行ってPDF出力を行います。
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 初期化
InitSpread()
' 罫線の設定
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' 【回避コード】上記の罫線設定に加えてグリッド線の設定を行います
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' PDF出力
FpSpread1.SavePdfToResponse("test1.pdf")
End Sub
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 初期化
InitSpread()
' グリッド線の設定
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' 【回避コード】上記のグリッド線設定に加えて罫線の設定を行います
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' PDF出力
FpSpread1.SavePdfToResponse("test2.pdf")
End Sub
Private Sub InitSpread()
FpSpread1.ActiveSheetView.Reset()
' SPREADの設定
FpSpread1.ActiveSheetView.AllowPage = False
FpSpread1.ActiveSheetView.RowCount = 100
For i As Integer = 1 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, "A1")
If i < 50 Then
FpSpread1.ActiveSheetView.SetValue(i, 1, "B1")
Else
FpSpread1.ActiveSheetView.SetValue(i, 1, "B2")
End If
FpSpread1.ActiveSheetView.SetValue(i, 3, String.Format("D{0}", i + 1))
Next
' マージ設定
FpSpread1.ActiveSheetView.SetColumnMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.Always)
FpSpread1.ActiveSheetView.PrintInfo.RepeatColStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatColEnd = 3
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowEnd = 0
End Sub
End Class
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
セル罫線とグリッド線、両方の設定を行ってPDF出力を行います。
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 初期化
InitSpread()
' 罫線の設定
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' 【回避コード】上記の罫線設定に加えてグリッド線の設定を行います
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' PDF出力
FpSpread1.SavePdfToResponse("test1.pdf")
End Sub
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 初期化
InitSpread()
' グリッド線の設定
FpSpread1.ActiveSheetView.GridLineColor = System.Drawing.Color.Black
' 【回避コード】上記のグリッド線設定に加えて罫線の設定を行います
FpSpread1.ActiveSheetView.DefaultStyle.Border = New FarPoint.Web.Spread.Border(System.Drawing.Color.Black)
' PDF出力
FpSpread1.SavePdfToResponse("test2.pdf")
End Sub
Private Sub InitSpread()
FpSpread1.ActiveSheetView.Reset()
' SPREADの設定
FpSpread1.ActiveSheetView.AllowPage = False
FpSpread1.ActiveSheetView.RowCount = 100
For i As Integer = 1 To FpSpread1.ActiveSheetView.RowCount - 1
FpSpread1.ActiveSheetView.SetValue(i, 0, "A1")
If i < 50 Then
FpSpread1.ActiveSheetView.SetValue(i, 1, "B1")
Else
FpSpread1.ActiveSheetView.SetValue(i, 1, "B2")
End If
FpSpread1.ActiveSheetView.SetValue(i, 3, String.Format("D{0}", i + 1))
Next
' マージ設定
FpSpread1.ActiveSheetView.SetColumnMerge(-1, FarPoint.Web.Spread.Model.MergePolicy.Always)
FpSpread1.ActiveSheetView.PrintInfo.RepeatColStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatColEnd = 3
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowStart = 0
FpSpread1.ActiveSheetView.PrintInfo.RepeatRowEnd = 0
End Sub
End Class