首先,这是我在网站上的第一个问题,我只想感谢你们帮助像我这样的新人。我在这个网站上找到了这么多宝贵的信息!在我的编程过程中,它帮助了我很多。
这是我的问题。我使用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(‘?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 /位置?
谢谢你!!
发布于 2013-09-04 21:36:57
我不使用PHPDOCX,也不使用我的OpenTBS,但是看起来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作为前缀,以避免与现有元素发生冲突。
我不是正则表达式专家,所以让我们调用这个伪代码。希望它至少能给你指明正确的方向。
https://stackoverflow.com/questions/18623378
复制相似问题