在 Laravel 8 应用程序中,我使用 browsershot 制作 pdf 文件,它对我来说大部分都可以正常工作,除非我的数据包含多个页面,我有 2 个问题:
我没有看到我用页脚定义的标题(下面的代码):https ://imgur.com/a/2bkn3aD
我看到任何页面的最后一行都被切断了:https ://imgur.com/a/cKpv7yR
我通过将代码传递到控制 html 内容和生成的文件名来做到这一点:
$filename_to_save = $option_output_filename . '.' . $option_output_file_format;
$save_to_file = 'generate_profile_card_' . Session::getId() . '_' . $filename_to_save;
$today_date = getCFFormattedDate(Carbon::now(config('app.timezone')));
$site_name = config('app.name', '');
$footerHtml = '<div class="card-text d1" style="background-color: #ffffff !important; width: 100%; margin : 0 !important;">
<table style="width: 100%; font-family: \'system-ui\'; font-size: 12px !important; padding : 20px 0 0 0 !important; margin: 0 !important;
color:#101010 !important; ;" >
<tbody>';
$footerHtml .= '
<tr>
<td style="width:100%; border:0; border-top: 8px solid #c1c1c1; padding: 0; WWmargin: 21px 32px 2px 32px !important;" colspan="3">
<table style="width:100%; ">
<tr>
<td style="width:30%;" class="d-2">
Printed on: ' . $today_date . '
</td>
<td style="width:30%; " >
<span class="pageNumber"></span><span>out of</span><span class="totalPages"></span>
</td>
<td style="width:40%;" >
' . $site_name . '
</td>
</tr>
</table>
</td>
</tr>
';
$footerHtml .= ' </tbody></table>
</div>';
if (strtolower($option_output_file_format) == 'pdf') {
Browsershot::html(htmlspecialchars_decode($this->requestData['adCardContent']))
->showBrowserHeaderAndFooter()
->headerHtml('<div style="height:280px !important; background : maroon !important; ">Ad Card</div>')
->footerHtml($footerHtml)
->showBackground()
->margins(20, 10, 20, 10)
->setOption(
'addStyleTag', // I inject some tailwindcss classes
json_encode([
'content' => '
.d1 {
--tw-border-opacity: 1;
border-color: rgba(220, 38, 38, var(--tw-border-opacity));
border-width: 2px;
}
.d2 {
--tw-border-opacity: 1;
border-color: rgba(245, 158, 11, var(--tw-border-opacity));
border-width: 4px;
}
h3 {
font-size: 32px;
padding:4px;
}
h4 {
font-size: 24px;
padding:3px;
}
.md:h-4/6 {
height: 66.666667%;
}
.sm:h-4/5 {
height: 80%;
}
.text-left {
text-align: left;
}
.shadow-lg {
--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.p-2 {
padding: 0.5rem;
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.py-4 {
padding-top: 1rem;
padding-bottom: 1rem;
}
.mb-5 {
margin-bottom: 1.25rem;
}
.max-h-screen {
max-height: 100vh;
}
.justify-between {
justify-content: space-between;
}
.card-text {
background : maroon !important;
border: 4px dotted red !important;
}
.pageNumber {
background : yellow !important;
}
.totalPages {
background : blue !important;
}
.flex-col {
flex-direction: column;
}
.flex {
display: flex;
}
.modal_container {
color: green !important;
border-radius: 0.5rem;
border-width: 2px;
padding: 0.5rem;
border: 4px dotted blue !important;
}
.overflow-y-auto {
overflow-y: auto;
border: 4px dotted green !important;
}
.float-left {
float: left;
}
.big_badge {
border-color: rgba(209, 213, 219, var(--tw-border-opacity));
border-radius: 0.5rem;
border-bottom-width: 2px;
display: flex;
display: flex;
align-items: center;
justify-content: center;
height: 2.25rem;
margin: 0.5rem;
padding: 0.75rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.pt-3 {
padding-top: 0.75rem;
}'
])
)
->save($save_to_file);
\Response::download(
$save_to_file,
$save_to_file,
array('Content-Type: application/octet-stream', 'Content-Length: ' . $option_output_file_format)
);
return response()->download($save_to_file, $filename_to_save)->deleteFileAfterSend(true);
在 composer.json :
"laravel/framework": "^8.12",
"spatie/browsershot": "^3.40",
如何解决?
修改: 我在生成 pdf 时仍然遇到这些问题:我在实时服务器上上传了示例。 请在登录页面凭据已填写时打开 http://tads-back.my-demo-apps.tk/admin/ads/2/edit 。只需点击登录,上面的链接将打开模式页面,请点击“生成”按钮。默认情况下,将生成 pdf 文件,并在我的主题的打印屏幕中显示问题。我在 bootstrap 4.5 中使用了这个库,但没有这样的库问题。同样在https://github.com/spatie/browsershot的描述中,我没有看到任何带有页脚的错误描述。
我的代码我展示了我如何设置顺风类
->setOption('addStyleTag'
...
也许顺风有一些我错过的渲染功能?
谢谢!