На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> таблица на печать!
    Здравствуйте!

    Такая проблема:

    имеется большАя таблица на HTML (генерится JSP. это, впрочем, неважно),
    при выводе на печать эта таблиуа бьется на страницы и каждая строка в самом низу каждого листа не переносится целиком на следующую страницу, а разделяется на две части. зачастую это выглядит, как будто у одной из строк нет нижнего border'a.
    Как при выводе на печать переносить строки?


    Заранее спасибо
      Обсуждалась ета тема - поищи по разделу WWW Masters
        Поискал - не нашел :blink:
        Также поискал в HTML...
          гм было - и помоему пришли к выводу что никак
            Есть два варианта, в принципе. Оба были реализованы, так что 100% гарантия...

            Если кому интересно, выкладываю...

            1. Через парсер XML в EXCEL. Написал на JSP, но, думаю, всем будет более-менее понятно, а главная часть на JavaScript, так что разберетесь.

            ExpandedWrap disabled
               
              ### jsp_ved.jsp ----> Главная страница на JSP, всего лишь интерпретатор,
              ### так что перемисать под тот же PHP не составит труда.
              ### Не обращайте внимание на JavaBeans'ы, не имеет значение
              ### откуда брать инфу, все самое важное в JS'ке. Итак:
               
              <%@ page contentType="text/html; charset=windows-1251" %>
              <html>
              <head>
                  <link href="toolbar.css" rel="styleSheet" type="text/css">
                  <script src="check.js"></SCRIPT>
                  [B]<script src="ved2excel.js"></SCRIPT>[/B]
              </head>
              <jsp:useBean id="jsp_vedbeanId" scope="session" class="authorize_users1.jsp_vedbean" />
              <jsp:setProperty name="jsp_vedbeanId" property="*" />
               
              <body>
                <script>menu_draw(2,'<jsp:getProperty name="jsp_vedbeanId" property="predname" />');</script>
                <script>
                  var prt = document.location.port; if (prt=="") {prt = "80";}
                  var hostname = "http://"+document.location.hostname+":"+prt;
                  document.writeln("<a style='cursor: Hand;' onClick='Export(\""+hostname+"<jsp:getProperty name="jsp_vedbeanId" property="path" />/xls/ved.xls\")'>
                       <img src='images/excel.gif' width=20 height=20 alt='Экспортировать в MS Excel'></a>");
                </script>
                <table id="TableMain">
                  <thead>
                    <th>Колонка 1</th>
                    <th>Колонка 2</th>
                  </thead>
                <jsp:getProperty name="jsp_vedbeanId" property="table" />  
                </table>
                
                <jsp:getProperty name="jsp_vedbeanId" property="error_msg" />  
                
              </body>
              </html>


            Теперь JavaScript :wacko: :
            ExpandedWrap disabled
               
               // Получить ссылку в формате A1 из номера строки и колонки
              function GetRef(_row, _col) {
                 var xCol = String.fromCharCode( (new String("A")).charCodeAt(0) + _col - 1 );
                 var rng = xCol + _row;
                 return rng;
                }
               
               // Запись данных в ячейки
              function ExportTable(sheet, t, from_row,length_col){
                 var R0 = GetRef(from_row, 1);
                 var R1;
                 var R;
                 var xlEdgeBottom = 9;
                 var xlEdgeLeft = 7;
                 var xlEdgeRight = 10;
                 var xlEdgeTop = 8;
                
                 if ( length_col > 26 ) {
                    R1 = GetRef(t.rows.length + from_row - 1, length_col-26);
                    R  = R0 + ":A" + R1;
                 } else {
                    R1 = GetRef(t.rows.length + from_row - 1, length_col);
                    R  = R0 + ":" + R1;
                 }
               
                 for( var ir = 0, NR = t.rows.length ; ir < NR ; ++ir )
                 {
                    var r = t.rows[ir];
                    for( var ic = 0, NC = r.cells.length ; ic < NC ; ++ic )
                    {
                       var c = r.cells[ic];
                       var xc = sheet.Cells( ir + from_row, ic + 1 );
                       xc.WrapText = true;
                       xc.Value = c.innerText;
                       if (ic==0) {xc.Borders(xlEdgeLeft).Weight = 3;}
                       else {xc.Borders(xlEdgeLeft).Weight = 2;}
                       if (ic==NC-1) {xc.Borders(xlEdgeRight).Weight = 3;}
                       else {xc.Borders(xlEdgeRight).Weight = 3;}
                       if ((ir==NR-1)||(ir==0)) {xc.Borders(xlEdgeBottom).Weight = 3;}
                       else {xc.Borders(xlEdgeBottom).Weight = 2;}
                    }
                 }
                
                 return ir + from_row;
              }
              /* Экспортировать в Excel */
              //xlsname - имя документа с путем!
              function Export(xlsname) {
                 var excel;
                 error = 0;
                 error_msg = "";
                 try {
                 excel = new ActiveXObject("Excel.Application");
                 excel.Visible = true;
                 var book=excel.Application.Workbooks.Open(xlsname);
                 excel.Application.Visible = true;
                 var sheet = book.Worksheets.Item(1); //  Имя листа или его номер
                 sheet.Select;
                 //Убирание символов <br>
                 var re = new RegExp("<br>","gi");
                 var s = document.all.title.innerText+"\n\r"+document.all.title1.innerText;
                 s = s.replace(re,"\n\r");
                 sheet.Range("A2").Value = s; //Заголовок
              /*   s = document.all.title1.innerText;
                 sheet.Range("А5").Value = s; */
                 var last_row=4; // с какой строки
                 var length_col=20; // количество колонок
                 //Таблица
                 var max_row = ExportTable(sheet, document.all.TableMain, last_row,length_col);
                 s = document.all.desc.innerText;
                 var c = GetRef(max_row+1,1);
                 sheet.Range(c).Font.Bold = true;
                 sheet.Range(c).HorizontalAlignment = -4131;
                 sheet.Range(c).Value = s;
                 sheet.Range("A1").Select;
              //   excel.ActiveWorkbook.RunAutoMacros(1);
                 excel = "";
                 } catch(e) { error = 1; error_msg = e.description; }
                 if (error==0) {   alert("Экспорт в Excel завершен!"); }
                 else {alert("Ошибка при экспорте таблицы в MS Excel. Эта ошибка могла возникнуть
              по двум причинам: \n\r  1. Не установлен MS Excel \n\r  2. Неправильно
              настроена безопасность браузера.\n\r"+error_msg);}
              }


            Как видите, вариант более-менее универсален, но требует
            установки MS Office (насколько понимаю, не ниже 2000??).


            2ой способ.
            писать все через ActiveX, но требует тогда установки у
            пользователя клиента ActiveX.. Вот такие дела, блин :wall:
            Надеюсь, отсюда можно хоть что-нибудь почерпнуть.
            SergeS, сенкс.
              [mod-offtopic]Суть Зла, зарегистрируйся наконец-таки по-нормальному. Эта твоя игра с никами начинает раздражать.[/mod-offtopic]
                Оказывается, я уже полгода, как зареган. :o
                Извиняюсь за неразбериху.

                А по теме: странно, что нет какого-нибудь стиля у ьаблицы, или свойтсва для этого... Есть что-то вроде pageBreakAfter (??).. но не то.
                  Суть Зла,
                  про первый способ лучше забудь - не у всех есть ексцель
                  хотя - если вставишь туды проверку на наличее - и в зависимости от етого будетшь включать фишку - то после подготовления для FAQ - дгм могёшь получить
                    SergeS, насчет EXCEL прав, безусловно.
                    просто этот способ мы применяем на ЖДорогах, поэтому он вполне приемлем (правда, у них бывает по два офиса установлено!!!)
                      Суть Зла,
                      кстати лучше всётаки доделай сей способ чтоб он проверял есть ли Ексцель и если есть - то делал так чтоб было деление - и отправь ето в FAQ
                        SergeS, ок, если успею все..
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0289 ]   [ 15 queries used ]   [ Generated: 2.05.24, 16:10 GMT ]