首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phpdocx generatePDF未知图像类型:?image=opentbs1

phpdocx generatePDF未知图像类型:?image=opentbs1
EN

Stack Overflow用户
提问于 2013-09-04 20:41:00
回答 1查看 710关注 0票数 1

首先,这是我在网站上的第一个问题,我只想感谢你们帮助像我这样的新人。我在这个网站上找到了这么多宝贵的信息!在我的编程过程中,它帮助了我很多。

这是我的问题。我使用OpenTBS (PHP )用动态数据填充.docx模板,并在文档中插入图像。

通过在图像的备选文本中输入以下命令来插入图像:

代码语言:javascript
复制
[onshow.logo_location;ope=changepic;tagpos=inside;adjust=100%;]

我有一个变量,设置为$logo_location,指向要插入的图像。

这一步非常有效。在正确的位置创建带有适当图像的docx文件。

当我试图使用phpdocx将这个docx文件转换为PDF时,我会得到一个错误。生成pdf的代码如下:

代码语言:javascript
复制
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(‘?C:\wamp\www\bbms\classes\phpdocx\pdf\include\image_frame_decorator.cls.php(88):=opentbs1 1’,NULL,'','') #1 C:\wamp\www\bbms\classes\phpdocx\pdf\include\frame_factory.cls.php(199):Image_Frame_Decorator->__construct(Object(Frame),对象) #2 C:\wamp\www\bbms\classes\phpdocx\pdf\include\dompdf.cls.php(606):Frame_Factory::decorate_frame(对象(帧)对象(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”。到静态函数resolve_url()的image_cache.cls.php中。

当我试图转换一个没有使用OpenTBS创建的普通docx文件时,我没有得到这个错误。我检查了发送给resolve_url()的有效url是什么样子的,它看起来如下:

"files/files_invoice_template.docx/media/word/media/image1.png“

是否有方法配置openTBS以正确设置插入图像的url /位置?

谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-04 21:36:57

我不使用PHPDOCX,也不使用我的OpenTBS,但是看起来PHPDOCX已经将关系名硬编码到他们的图像识别中了。只要查看github上的代码,就会发现如果您更改了phpDocx/classes/TransformDoc.inc.php中的第239行

代码语言:javascript
复制
    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);
        }
    }

到某种程度上

代码语言:javascript
复制
if (preg_match('/^\?image=(rId|opentbs)/', $datsFiltered[1])) { // <--this is line 239

因为所有由OpenTBS切换的图像都使用opentbs作为前缀,以避免与现有元素发生冲突。

我不是正则表达式专家,所以让我们调用这个伪代码。希望它至少能给你指明正确的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18623378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档