首先,这是我在网站上的第一个问题,我只想感谢大家帮助像我这样的新手。我在这个网站上找到了这么多宝贵的信息!在我的编程之旅中,它帮助了我很多。
所以这是我的问题。我使用OpenTBS(PHP类)用动态数据填充.docx模板,并在文档中插入图像。
通过在图像的替代文本中输入以下命令来插入图像:
[onshow.logo_location;ope=changepic;tagpos=inside;adjust=100%;]
我有一个我设置为$ logo_location的变量,指向要插入的图像。
此步骤完美无缺。创建一个docx文件,并在适当的位置使用适当的图像。
当我尝试使用phpdocx将此docx文件转换为PDF时,我收到错误消息。生成pdf的代码如下:
require_once '../bbms/classes/phpdocx/classes/TransformDoc.inc';
require_once '../bbms/classes/phpdocx/classes/CreateDocx.inc';
$docx = new CreateDocx();
$document = new TransformDoc();
$document->setStrFile('199.docx');
$document->generatePDF();
我得到的错误如下:
无法生成PDF文件。异常'DOMPDF_Exception',消息'未知图像类型:?image = opentbs1。'在C:\ wamp \ www \ bbms \ classes \ phpdocx \ pdf \ include \ image_cache.cls.php:188堆栈跟踪:#0 C:\ wamp \ www \ bbms \ classes \ phpdocx \ pdf \ include \ image_frame_decorator.cls .php(88):Image_Cache :: resolve_url('?image = opentbs1',NULL,'','')#1 C:\ wamp \ www \ bbms \ classes \ phpdocx \ pdf \ include \ frame_factory.cls.php (199):Image_Frame_Decorator-> __ construct(Object(Frame),Object(DOMPDF))#2 C:\ wamp \ www \ bbms \ classes \ phpdocx \ pdf \ include \ dompdf.cls.php(606):Frame_Factory: :decorate_frame(Object(Frame),Object(DOMPDF))#3 C:\ wamp \ www \ bbms \ classes \ phpdocx \ classes \ TransformDoc.inc(328):DOMPDF-> render()#4 C:\ wamp \ www \ discount_database \ test.php(23):TransformDoc-> generatePDF()#5 {main}
由于某种原因,docx文件中新图像的位置将作为“?image = opentbs1”传递。到image_cache.cls.php中的静态函数resolve_url()。
当我尝试转换不是使用OpenTBS创建的普通docx文件时,我没有收到此错误。我检查了发送到resolve_url()的有效网址是什么样子,它看起来像这样:
“的文件/ files_invoice_template.docx /媒体/字/媒体/ image1.png”
有没有办法配置openTBS来正确设置插入图像的网址/位置?
谢谢!
答案 0 :(得分:1)
我不使用PHPDOCX或从我的OpenTBS制作PDF,但看起来PHPDOCX已将关系名称硬编码为图像识别。只要查看github上的代码,看起来如果你更改了phpDocx/classes/TransformDoc.inc.php
中的第239行:
foreach ($domImgs[0] as $dats) {
$datsFiltered = explode('"', $dats);
if (preg_match('/^\?image=rId/', $datsFiltered[1])) { // <--this is line 239
$datFiltered = explode('?image=', $dats);
$idImgs[] = substr($datFiltered[1], 0, -1);
}
}
类似
if (preg_match('/^\?image=(rId|opentbs)/', $datsFiltered[1])) { // <--this is line 239
由于OpenTBS切换的所有图像都使用opentbs
作为前缀,以避免与现有元素冲突。
我不是正则表达专家,所以我们调用这个伪代码。希望它至少指出你正确的方向。