【PDF】 セルマージを設定した場合、改ページが発生したときに罫線やグリッド線の一部が表示されないことがある

文書番号 : 37558     文書種別 : 不具合     登録日 : 2014/08/29     最終更新日 : 2015/03/31
文書を印刷する
対象製品
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
回避方法
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