【问题标题】:phpdocx generatePDF Unknown image type: ?image=opentbs1phpdocx generatePDF 未知图像类型:?image=opentbs1
【发布时间】:2013-09-08 12:33:56
【问题描述】:

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

所以这是我的问题。我已经使用 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/位置?

谢谢!!

【问题讨论】:

  • 快速浏览一下我会使用from= 参数的文档,看看是否是问题所在
  • 是的,我同意@Dragon,我刚刚看了看,似乎没有指定 from= 参数,这可能是您遇到问题的路径
  • 感谢您的快速回答!我会尝试使用 from 参数。
  • 我认为这不是您的问题,如下所述。如果您实际查看 OpenTBS 生成的代码,您会发现没有奇怪的路径或缺少声明,只是 PHPDOCX 没有预料到的不同命名约定。

标签: php pdf-generation opentbs phpdocx


【解决方案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 作为前缀以避免与现有元素冲突。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2019-01-11
    • 2017-03-16
    • 1970-01-01
    • 2013-02-16
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多