印刷する内容をカスタマイズしたい

文書番号 : 21847     文書種別 : 使用方法     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
下記のサンプルコードではヘッダーとフッターに文字列を挿入し、30行目で改ページします。

ここではRenderメソッドでSPREADのIsPrintプロパティの値を調べ、SPREADが印刷用に出力されているかどうかを判断します。SPREADの印刷時のレイアウトは以下のようになっています。

 Me.Controls(0).Controls(0) (FpSpread)
  |- .Controls(0) (bh)
    |- .Controls(0) シート1のヘッダー(LiteralControl)
    |- .Controls(1) シート1(Table)
    |- .Controls(2) シート1のフッター(LiteralControl)
    |- .Controls(3) シート2のヘッダー(LiteralControl)
    |- .Controls(4) シート2(Table)
    |- .Controls(5) シート2のフッター(LiteralControl)
    |- ... 繰り返し

ここではSPREADが印刷用に出力されている時、スタイルシートのプロパティ「page-break-before」を使用して改ページを行います。

【VB サンプルコード】
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If IsPostBack Then Return

    FpSpread1.ActiveSheetView.RowCount = 40
    FpSpread1.ActiveSheetView.Cells(29, 0).Value = "Hello!"
  End Sub

  Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    Dim vp As Control
    Dim header As LiteralControl
    Dim footer As LiteralControl

    If FpSpread1.IsPrint Then
      vp = Me.Controls(0).Controls(0).Controls(0)
      header = CType(vp.Controls(0), LiteralControl)
      header.Text = "<DIV>ヘッダーテキスト</DIV>"
      footer = CType(vp.Controls(2), LiteralControl)
      footer.Text = "<BR><DIV>フッターテキスト</DIV><BR><BR>"

      Dim t As Table = CType(vp.Controls(1), Table)
      t.Style.Add("border-style", "none")
      Dim tc As TableCell = CType(t.Rows(0).Controls(0), TableCell)
      t = CType(tc.Controls(0), Table)

      '列ヘッダを挿入
      Dim tr As TableRow = t.Rows(0)
      Dim trHd As New TableRow
      Dim lc, lc_c As LiteralControl
      Dim key, v As String
      Dim senum As IEnumerator = tr.Cells(0).Style.Keys.GetEnumerator()
      Dim i, j As Int32
      For i = 0 To tr.Cells.Count - 1
        lc = CType(tr.Cells(i).Controls(0), LiteralControl)
        lc_c = New LiteralControl(lc.Text)
        tc = New TableCell
        tc.Controls.Add(lc_c)
        senum.Reset()
        While (senum.MoveNext())
          key = CStr(senum.Current)
          v = tr.Cells(0).Style(key)
          tc.Style.Add(key, v)
        End While
        trHd.HorizontalAlign = HorizontalAlign.Center
        trHd.Cells.Add(tc)
      Next
      t.Rows.AddAt(30, trHd)

      '30行目で改ページ
      tc = CType(t.Rows(30).Controls(0), TableCell)
      tc.Style.Add("page-break-before", "always")

      '30行目の前に空の行を挿入
      tr = New TableRow
      tc = New TableCell
      tc.Text = "&nbsp;"      
      tc.Style.Add("border-style", "none")
      tr.Controls.Add(tc)
      tr.Height = Unit.Pixel(250)
      t.Rows.AddAt(30, tr)
    End If
    MyBase.Render(writer)
  End Sub


【C# サンプルコード】
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (IsPostBack)return;

      FpSpread1.ActiveSheetView.RowCount=40;
      FpSpread1.ActiveSheetView.Cells[29,0].Value="Hello!";
      
    }

    protected override void Render(HtmlTextWriter writer)
    {
      Control vp;
      LiteralControl header;
      LiteralControl footer;

      if(FpSpread1.IsPrint)
      { 
        vp=this.Controls[0].Controls[0].Controls[0];
        header=(LiteralControl)vp.Controls[0];
        header.Text="<DIV>ヘッダーテキスト</DIV>";
        footer=(LiteralControl)vp.Controls[2];
        footer.Text="<BR><DIV>フッターテキスト</DIV><BR><BR>";

        Table t= (Table)vp.Controls[1];
        t.Style.Add("border-style","none");        
        TableCell tc=(TableCell) t.Rows[0].Controls[0];
        t= (Table)tc.Controls[0];
        
        //列ヘッダを挿入
        TableRow tr=t.Rows[0];
        TableRow trHd=new TableRow();
        LiteralControl lc,lc_c;
        string key,v;
        IEnumerator senum=tr.Cells[0].Style.Keys.GetEnumerator();
        for(int i=0;i<tr.Cells.Count;i++)
        {
          lc=(LiteralControl)tr.Cells[i].Controls[0];
          lc_c=new LiteralControl(lc.Text);
          tc=new TableCell();
          tc.Controls.Add(lc_c);
          senum.Reset();
          while(senum.MoveNext())
          { 
            key=(string)senum.Current;
            v=tr.Cells[0].Style[key];
            tc.Style.Add(key,v);
          }
          trHd.HorizontalAlign=HorizontalAlign.Center;
          trHd.Cells.Add(tc);
        }              
        t.Rows.AddAt(30,trHd);
        
        //30行目で改ページ
        tc=(TableCell)t.Rows[30].Controls[0];
        tc.Style.Add("page-break-before","always");
        
        //30行目の前に空の行を挿入
        tr=new TableRow();        
        tc=new TableCell();
        tc.Text="&nbsp;";
        tc.Style.Add("border-style","none");
        tr.Controls.Add(tc);
        tr.Height=Unit.Pixel(250);
        t.Rows.AddAt(30,tr);               

      }
      base.Render (writer);
    }
キーワード
一般

この文書は、以前は次のFAQ IDで公開されていました : 9171