phpdocx generatePDF未知图像类型:?image=打开tbs1


phpdocx generatePDF Unknown image type: ?image=opentbs1

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

这是我的问题。我使用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''bms''classes''phpdocx''pdf''include''image_cache.cls.php:188堆栈跟踪:#0 C:''wamp''www''bms''cclasses''phpdocx''pdf''einclude''image_frame_decorator.cls.php(88):image_cache::resolve_url>__construct(对象(帧),对象(DOMPDF))#2 C:''wamp''www''bbms''classes''phpdocx''pdf''include''DOMPDF.cls.php(606):Frame_Factory::decorate_Frame(对象(框架),对象(DOMPCF))#3 C:''wamp''Wwww''bpms''classes''''phpdocx''classes''TransformDoc.inc(328):DOMPDF->render()#4 C:''wamp/wwww''discount_database''test.php(23):TransformDoc->generatePDF()#5{main}

由于某种原因,docx文件中新图像的位置被作为"?image=opentbs1"传递给image_cache.cls.php中的静态函数resolve_url()。

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

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

有没有一种方法可以配置openTBS来正确设置插入图像的url/位置?

谢谢!!

我不使用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作为前缀,以避免与现有元素发生冲突。

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