【问题标题】:PHP/OpenTBS/DocX nested arrays / subblockPHP/OpenTBS/DocX 嵌套数组/子块
【发布时间】:2018-05-17 12:20:08
【问题描述】:

实际测试 opentbs 以根据我网站上的模板生成 docx。我在整合图像时遇到了问题。 我成功地在一个循环中添加了图像,但我的问题是将这些图像集成到一个嵌套循环中。

我有一个 days 对象数组,其中有一个图像路径数组(每天都有额外的数据)

我的数据架构是这样的:

// Initialisation du Parser
$TBS = new clsTinyButStrong;
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);

// Chargement du fichier Modèle
$TBS->LoadTemplate(realpath(dirname(__FILE__)).'/tbs/rendu-v2.docx', OPENTBS_ALREADY_UTF8);

$steps = array(
  stdClass {
    day: 'day 1',
    name: 'My 1st step',
    images: array(
      'pathToMyFirstImage',
      'pathToMySecondImage'
    )
  },
  stdClass {
    day: 'day 2 & 3',
    name: 'My 2st step',
    images: [
      'pathToMyThirdImage',
      'pathToMyFourthImage'
    ]
  }
);

$TBS->MergeBlock( 'steps2', $steps);
$TBS->Show(OPENTBS_DOWNLOAD);

我的话模板:

[steps2;block=begin]
  JOUR [steps2.day;sub1=images] : [steps2.name]
  [steps2.date]

  [steps2.description]

  [steps2_sub1; block=begin]
    [X] (picture with [steps2_sub1.val;ope=changepic;tagpos=inside] as text sustitution)
  [steps2_sub1; block=end]
[steps2; block=end]```

实际上,在输出文件中,我的子块显示为 this 而不是解释。

我查看了这个解决方案 OpenTBS - How to use a double loop,但结尾部分有点奇怪,并且仅使用 [steps2_sub1;block=end] 也不起作用。

OpenTBS 文档没有给出带有块的子块的完整示例。

有人看到我误解了什么吗?

编辑:我的子块不起作用并显示为“代码”而不是解释。

谢谢,

马修

【问题讨论】:

  • 您的实际问题是什么?
  • 你好,大声笑,对,我不清楚,我不能让我的子块工作,它仍然把我的子块放在我的 docx 中,因为它是在代码中而不是它应该被解释

标签: php docx opentbs


【解决方案1】:

我可以在您的 sn-p 中看到 2 个错误。

1) TBS 区分大小写。

所以sn-p:

[STEPS2.DAY;SUB1=IMAGES]

应替换为:

[steps2.day;sub1=images]

2) 参数 'sub1' 是一个块参数,所以它应该只定义在具有参数 'block' 的字段中。否则将被忽略。

所以sn-p:

[steps2;block=begin]
[steps2.day;sub1=images]

应替换为:

[steps2;block=begin;sub1=images]
[steps2.day]

【讨论】:

  • 感谢您帮助我,对于第一个错误,它不是一个,而是大写的字体。
  • 在第二个中,如果我这样做,我会在步骤 2 上出现块定义错误:块定义中的 TinyButStrong 错误 [steps2...]:至少找不到与 begin 对应的标签。检查开始标签、结束标签和嵌入​​级别。我的word模板是这样的:postimg.cc/image/7twrvecln
  • 我已经测试了我提交的截图,它对我有用。也许您的某些标签已在内部拆分,您必须在不格式化的情况下剪切和粘贴才能使它们干净。或者您可以使用包中提供的 Ms Word 的 TBS 插件。我还建议避免将block=begin 与 DOCX 或其他文档一起使用。用block=tbs:p 之类的东西定义块不太敏感。
  • 感谢您花时间解决我的问题。看来 TBS 对空间敏感:我的开始块中 sub1 的分号前有一个空格(MS Word 以 FR 语言自动添加)。
【解决方案2】:

TBS 似乎对空格敏感:我的开始块中 sub1 的分号前有一个空格(MS Word 以 FR 语言自动添加)。

接下来是工作代码:

[steps2;block=begin;sub1=images]
[STEPS2.DAY] : [STEPS2.NAME]
[steps2.date]

[steps2.description;strconv=no]

[X] <- Image with "[steps2_sub1.val;ope=changepic;tagpos=inside;block=tbs:p]" as Text Replacement

[steps2;block=end]

谢谢大家

顺便问一下,如何管理各种显示图片的方式? 我将有 0 到 4 张这样显示的图片:

|    My Page     |
|                |
| Case 1 image   |
[   100% Width   ]
|                |
| Case 2 images  |
[  50%  ][  50%  ]
|                |
| Case 3 images  |
[  50%  ][  50%  ]
[      100%      ]
|                |
| Case 4 images  |
[  50%  ][  50%  ]
[  50%  ][  50%  ]

有没有可能实现这样的目标?

【讨论】:

  • 我通过使用 4 个带有 when 条件的块来管理它(我知道这不是推荐的,但这是管理多个项目的“div”的唯一方法)并将我的图片数组转换为具有静态名称的图片在对象中(img1,img2,...)。根据条件,我放置 2 列或 1 列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多