1

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

所以这是我的问题。我已经使用 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 文件。带有消息“未知图像类型:?image=opentbs1.”的异常“DOMPDF_Exception” 在 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::装饰框架(对象(框架),对象(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() 的有效 url 是什么样子的,它看起来像这样:

“文件/files_invoice_template.docx/media/word/media/image1.png”

有没有办法配置 openTBS 以正确设置插入图像的 url / 位置?

谢谢!!

4

1 回答 1

1

我不使用 PHPDOCX 或从我的 OpenTBS 东西制作 PDF,但看起来 PHPDOCX 已将关系名称硬编码到他们的图像识别中。只看 github 上的代码,看起来如果你将第 239 行更改为phpDocx/classes/TransformDoc.inc.php

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

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

于 2013-09-04T21:36:57.703 回答