php框架symfony5.4 phpoffice/phpword 包版本 有一个项目需要做文章批量导出为word功能,调研后决定采用phpword,使用过程中碰到以下问题: 1、如果是下面这种全局样式,p标签下的内容的就不会生效 !DOCTYPE htmlhtmlheadmeta http-equiv="Content-Type" content="text/ht
php框架symfony5.4
phpoffice/phpword 包版本
有一个项目需要做文章批量导出为word功能,调研后决定采用phpword,使用过程中碰到以下问题:
1、如果是下面这种全局样式,p标签下的内容的就不会生效
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-" />
</head>
<body>
<style>
p {font-size:18px;text-indent:36px;line-height:2.2;margin-bottom:30px;}
</style>
<p>test</p>
<img src="/image/20210226-1614324791820472.jpg" alt="1.jpg" style="width: 550; text-indent: 0; margin-bottom: 0px; margin-left: -1em;">
</body></html>
想到的解决方法是使用 ‘tijsverkoyen/css-to-inline-styles‘ 这个包来使全局样式转换为行内样式,然后再进行导出。
2、图片width解析不了
在导出word后发现图片宽度普遍比较宽,需要设置图片的宽度为500px,然而用以下方式修改并不会生效
<img src="/image/20210226-1614324791820472.jpg" alt="1.jpg" style="width: 550; text-indent: 0; margin-bottom: 0px; margin-left: -1em;">
查看phpword的包发现\vendor\phpoffice\phpword\src\PhpWord\Shared\Html.php该文件下的 788行 parseImage 方法style样式下只解析了float,没解析width,所有2个解决方案:用第一种解决方案,2829行新增以下代码:
case 'style':
$styleattr = explode(';', $attribute->value);
foreach ($styleattr as $attr) {
if (strpos($attr, ':')) {
list($k, $v) = explode(':', $attr);
switch ($k) {
case 'float':
if (trim($v) == 'right') {
$style['hPos'] = \PhpOffice\PhpWord\Style\Image::POS_RIGHT;
$style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_MARGIN; // inner section area
$style['pos'] = \PhpOffice\PhpWord\Style\Image::POS_RELATIVE;
$style['wrap'] = \PhpOffice\PhpWord\Style\Image::WRAP_TIGHT;
$style['overlap'] = true;
}
if (trim($v) == 'left') {
$style['hPos'] = \PhpOffice\PhpWord\Style\Image::POS_LEFT;
$style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_MARGIN; // inner section area
$style['pos'] = \PhpOffice\PhpWord\Style\Image::POS_RELATIVE;
$style['wrap'] = \PhpOffice\PhpWord\Style\Image::WRAP_TIGHT;
$style['overlap'] = true;
}
break;
case 'width':
$style['width'] = $v;
$style['unit'] = \PhpOffice\PhpWord\Style\Image::UNIT_PX;
break;
}
}
}
break;
沃梦达教程
本文标题为:phpword使用html保存word,图片width和全局样式无法导出问题
基础教程推荐
猜你喜欢
- thinkphp3.2.3框架动态切换多数据库的方法分析 2023-03-19
- php array分组,PHP中array数组的分组排序 2022-08-01
- PHP命名空间简单用法示例 2022-12-01
- laravel 解决多库下的DB::transaction()事务失效问题 2023-03-08
- PHP实现Redis单据锁以及防止并发重复写入 2022-10-12
- laravel ORM关联关系中的 with和whereHas用法 2023-03-02
- PHP获取MySQL执行sql语句的查询时间方法 2022-11-09
- 使用PHP开发留言板功能 2023-03-13
- PHP中的错误及其处理机制 2023-06-04
- 在Laravel中实现使用AJAX动态刷新部分页面 2023-03-02