Автор Тема: Dompdf ( HTML > PDF )  (Прочитано 17303 раз)

Оффлайн wut

  • Старший
  • ****
  • Сообщений: 531
  • Карма: +0/-0
Dompdf ( HTML > PDF )
« : 28-10-2009 16:05:31 »
 Итак) Ситуация: есть шаблоны в xml, css стили, php код. Пример:
Xml
 
Код: (xml) [Выделить]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<client>
    <top></top>
    <![CDATA[
        <div class="A4L">
         <table>
          <tr class="b_bottom">
           <td class="n_bottom">Test text</td>
           <td>]]><user>__PRINTED_BY__</user><![CDATA[</td>
          </tr>
         </table>
        </div>
        ]]>
</client>
 

Css стиль
 
Код: (CSS) [Выделить]
              table{
                    border:0;
                    border-collapse:collapse;
                }
                .A4{
                    margin-left:5px;
                    display:block;
                    height:auto;
                    float: none !important;
                    font-family: verdana;
                    font-size:13px;
                    page-break-after:always;
                 }
                div * {
                    vertical-align: middle;
                }
                .b_bottom{
                    border-bottom:solid 1px #000;
                }
                .n_bottom{
                    border-bottom:solid 1px #fff;
                }
 

Php код парсера
 
Код: (php) [Выделить]
function startElement($parser, $name, $attrs){
  global $ce,$TMPL,$html;
  $ce=$name;
  $TMPL[$name]="";
}

function endElement($parser, $name){
  global $ce,$TMPL,$T,$html;
  unset($t);
  $t=$TMPL[$name];
  $t=str_replace("/n","<br>",$t);
  $t=str_replace("/p","<p>",$t);
  $t=str_replace("/q","</p>",$t);
  $t=str_replace("/u","<u>",$t);
  $t=str_replace("/v","</u>",$t);
  switch($name){
    case 'user':
        $t=str_replace("__PRINTED_BY__",get_user_name($_SESSION[user]),$t);
    break;
  }
 }

 function characterData($parser, $data){
  global $ce,$TMPL,$html;
  switch($ce){
    case ("user"):
     $TMPL[$ce].=$data;
    break;
    default:
     $html.=$data;
  }
 }

 $xml_parser = xml_parser_create();
 xml_set_element_handler($xml_parser, "startElement", "endElement");
 xml_set_character_data_handler($xml_parser, "characterData");
 xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
 if (!($fp = fopen($link, "r"))) die("could not open XML input");
 while ($data = fread($fp, 4096)){
    if (!xml_parse($xml_parser, $data, feof($fp)))die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
 }
 xml_parser_free($xml_parser);

    require_once("includes/dompdf/dompdf_config.inc.php");
        $dompdf = new DOMPDF();
        $dompdf->set_paper("a4", "portrait");
        $dompdf->load_html($html);
        $dompdf->render();
        $dompdf->stream( "sample.pdf", array( "Attachment" => 0 ) );
 
 Сам код в много раз сложнее, но фишка не в этом)
 Самое главное - это в конце - рендер изображения и все супер.
 Проблема моя заключается в том, что не хочет печатать border-bottom: solid 1px #000; А саму рамку таблицы печатает нормально, если я её задаю. Пробовал уже копать в сам dompdf, но пока без успеха, мозг работать отказывается :(
« Последнее редактирование: 03-11-2009 17:27:26 от wut »
mb986

Оффлайн junkies

  • Новичок II
  • **
  • Сообщений: 73
  • Карма: +0/-0
Dompdf ( HTML > PDF )
« Ответ #1 : 01-12-2009 03:11:34 »
да он криво перегоняет HTML в PDF и с этим ничего не поделать, сам както мучался

в итоге нарисовал все в FPDF, тем более у тебя только табличка, ничего сложного

Оффлайн wut

  • Старший
  • ****
  • Сообщений: 531
  • Карма: +0/-0
Dompdf ( HTML > PDF )
« Ответ #2 : 01-12-2009 08:32:50 »
да он криво перегоняет HTML в PDF и с этим ничего не поделать, сам както мучался

в итоге нарисовал все в FPDF, тем более у тебя только табличка, ничего сложного
Спасиб :) Как раз присматривался,)
mb986

Оффлайн junkies

  • Новичок II
  • **
  • Сообщений: 73
  • Карма: +0/-0
Dompdf ( HTML > PDF )
« Ответ #3 : 01-12-2009 19:20:11 »
Спасиб :) Как раз присматривался,)
у меня были проблемы с русским, поставил ufpdf (Unicode/UTF-8 extension for FPDF) и сам код в utf8 проблем не наблюдаю  ;)