在RTF模板条件或循环语句

问题描述 投票:2回答:1

我已预定义rtf模板文件RTF_Template.rtf如下:

{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
\widowctrl\hyphauto

{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 FirstName LastName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b UEI:} 103910\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Sex:\u160?}Female\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b DOB:} 10/31/1980\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Email:} [email protected] \par}

我正在以这种形式类似变化:

rtf_template = Rails.root.join('doc', 'rtf_templates', 'RTF_Template.rtf')
content = File.read(rtf_template)
content.gsub!('FirstName LastName', @student.full_name)
content.gsub!('UEI', StudentIdentifier.primary_identifier.first&.name)
content.gsub!('103910', @student.primary_identifier&.value)
content.gsub!('Female', @student.gender)
content.gsub!('10/31/1980', @student.date_of_birth.strftime('%m-%d-%Y'))
content.gsub!('[email protected]', @student.email)

问题:

目前,我只表示第一qazxsw POI是网上主之一:qazxsw POI

对线相同的标识符和设置值:StudentIdentifier

用户可以具有针对每个标识符的多个标识符和值。我可以使用循环content.gsub!('UEI', StudentIdentifier.primary_identifier.first&.name)然后在content.gsub!('103910', @student.primary_identifier&.value) @student.identifiers.each do |p_id|和值标识符名称访问那些所有标识符

我想表现出相同的模板在同一个地方的所有标识符(姓名,性别之前)。

ruby-on-rails rtf
1个回答
0
投票

您的代码只需要替换一个占位符的RTF代码行的序列。

模板:

{\ RTF1 \ ANSI \ deff0 {\ fonttbl {\ F0 \ fswiss黑体;} {\ F1信使;}} {\ colortbl; \ red255 \ green0 \ blue0; \ red0 \ green0 \ blue255;} \ widowctrl \ hyphauto

p_id[0]

然后级联您的标识符的名称/值对包括周围的RTF代码,例如

p_id[1]

最后替换占位符

{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 FirstName LastName\par}
identifier_list
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Sex:\u160?}Female\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b DOB:} 10/31/1980\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Email:} [email protected] \par}

(注:我在轨道上的程序员没有注释,所以我只能放弃这个想法,而不是实际的代码)

© www.soinside.com 2019 - 2024. All rights reserved.