Как центрировать содержимое с рамками при преобразовании из html в pdf

#html #css #pdf

Вопрос:

У меня есть html-страница с содержимым внутри рамки с 7 пикселей, которая должна быть разделена на родительский и дочерний разделы, я пытаюсь преобразовать ее в pdf, но когда я это делаю, страница выравнивается больше вправо, оставляя огромное пространство слева. Но когда одна и та же страница просматривается в формате html, она правильно центрирована. Th

Чего мне нужно добиться, так это центрировать границу и ее содержимое в файле PDF. Родительский div имеет следующий css

 ``` #wrapper{
    width: 740px;
    /*margin: 2px auto;*/
    margin: auto;
    /*border: solid  red;*/
    height: 1000px;
    page-break-after: avoid;
}```
 

и дочерний div имеет следующий css

 ```#maincontent{
    border: solid 7px black;
    /*margin: 2px auto 100px;*/
    /*margin: 2px auto;*/
    margin: auto;
    height: 98.2%;
    /*width: 98%;*/
    width: 720px;
    display: block;
    page-break-before: avoid;
    break-after: avoid;
}```
 

Комментарии:

1. Вы создаете pdf-файл с помощью функций печати браузеров?

Ответ №1:

Laravel-dompdf-хорошая библиотека, но она не очень хороша при работе с css, поэтому существует wkhtmltopdf, который является инструментом CLI, использующим механизм рендеринга WebKit. Существует библиотека PHP под названием laravel-snappy, которая создала оболочку для wkhtmltopdf и преобразует html в pdf/изображение, доступное почти для всех операционных систем. Полное объяснение и ссылка на ручную документацию доступны по адресу [ссылка]https://github.com/barryvdh/laravel-snappy

Комментарии:

1. спасибо вам за информацию, которую я сам только начал использовать в Laravel, и, честно говоря, поскольку в pdf не так много информации, это мне поможет. мой первоначальный ответ был основан на CodeIgniter

Ответ №2:

С MPDF не стилизуйте внутри вашей страницы печати HTML, это не будет работать. Добавьте стиль в свой контроллер или .CSS или добавьте стиль над вашим HTML, а не внутри. Пожалуйста, обратите внимание, что стиль строки очень важен, вам нужно добавить его в свой стиль. Также обратите внимание, что начальная загрузка не всех версий начальной загрузки удобна для MPDF. Версия 3.4.1 работает на меня.

 <?php
$mpdf = new MpdfMpdf();
$stylesheet = file_get_contents('https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css');
$mpdf->WriteHTML($stylesheet, MpdfHTMLParserMode::HEADER_CSS);
$stylesheet = '<style>
    .row {
        margin: 10px 0px 0px 0px !important;
        padding: 0px !important;
    }
    .wrapper{
    width: 740px;
    /*margin: 2px auto;*/
    margin: auto;
    /*border: solid  red;*/
    height: 1000px;
    page-break-after: avoid;
    }
    .maincontent{
    border: solid 7px black;
    /*margin: 2px auto 100px;*/
    /*margin: 2px auto;*/
    margin: auto;
    height: 98.2%;
    /*width: 98%;*/
    width: 720px;
    display: block;
    page-break-before: avoid;
    break-after: avoid;
    }
</style>';
$mpdf->WriteHTML($stylesheet, MpdfHTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML(view('/print/print_jobcard', $data), MpdfHTMLParserMode::HTML_BODY);
$mpdf->Output($data['jobcard'][0]['job_number'].'.pdf', 'D');
?>

<!DOCTYPE html>
<html>
<body>

<div >
   
    <br style="height: 15mm; margin: 0;">
    <div class="row">
        <div class="col-xs-8 col-sm-8"><h4>Date</h4></div>
        <div class="col-sm-8"><h4 style= "text-align:center"> Lorem Ipson</h4></div>
    </div>
 
    <br style="height: 30mm; margin: 0;">
    <div class="row">
        <div class="col-xs-4 col-sm-4"><h4>Name</h4></div>
        <div class="col-xs-4 col-sm-4"><h4>Email</h4></div>
        <div class="col-sm-4"><h4>Tel</h4></div>
    </div>
   
</div>

</body>
</html>
 

Комментарии:

1. Я использую библиотеку DomPDF

2. основы останутся прежними, используйте внешний стиль. DomPDF поддерживает больше CSS, но, если я правильно понимаю, он работает медленнее, но конечным результатом будет pdf. если вы можете дать мне свой код, я попытаюсь реализовать свой код для тестирования.

3. скопируйте мой <стиль> и внедрите в свой код и посмотрите, поможет ли это

4. Большое вам спасибо, я вам очень признательна. Но, я нашел очень полезную ссылку, которая помогла мне много,кажется, что Laravel-dompdf оболочка имеет некоторые проблемы при преобразовании HTML в PDF, есть еще одна обертка точно так же, как barryvdh/фреймворк Laravel-dompdf , но это называется фреймворк Laravel-живо barryvdh/фреймворк Laravel-живо , я использовал эту оболочку и работал как шарм

5. Я нашел выпущенные и предложенные решения @Corez64 по адресу [ссылка] laracasts.com/discuss/channels/general-discussion/…