Перенос слов в отчетах .rml в Openerp

Есть ли способ обернуть слова в шаблоне rml в openerp6.0. Я определил ширину столбца, чтобы получить название продукта в шаблоне заказа на продажу openerp. Но когда добавляются длинные имена без пробела, он просто пересекает столбец в шаблоне rml. отчет один. Может ли кто-нибудь предложить решение этой проблемы.


person Pravitha V    schedule 24.04.2012    source источник


Ответы (3)


Я не думаю, что это поддерживается из коробки. Я предлагаю вам добавить некоторые методы к объектам, которые вы хотите отобразить, которые будут предоставлять значения, привязанные к заданной длине столбца (осторожно, это становится очень сложно, если вы используете пропорциональный шрифт, для этого лучше придерживаться фиксированной ширины).

Модуль textwrap стандартной библиотеки Python может быть полезен при написании этих методов.

person gurney alex    schedule 24.04.2012
comment
есть ли функция переноса слов в самом rml? - person Pravitha V; 25.04.2012
comment
я просто хочу обернуть длинное слово, например: 600 символов без пробела в один столбец. Я нашел функцию break_long_words для python, как я могу реализовать ее в своих отчетах rml? - person Pravitha V; 11.05.2012

Просто заключите содержимое ячейки в тег para. Вот пример:

<!DOCTYPE document SYSTEM "rml.dtd" >
<document filename="wraps.pdf">
  <template showBoundary="0">
    <pageTemplate id="main">
      <pageGraphics />
      <frame id="first" x1="150" y1="400" width="250" height="400" />
    </pageTemplate>
  </template>
  <stylesheet>
    <blockTableStyle id="blocktablestyle4">
      <!-- show a grid: this also comes in handy for debugging your tables.-->
      <lineStyle kind="GRID" colorName="green" thickness="1" start="0,0" stop="-1,-1" />
    </blockTableStyle>
    <paraStyle name="textstyle1" fontName="Helvetica" fontSize="9" textColor="blue" />
  </stylesheet>
  <story>
    <blockTable style="blocktablestyle4" colWidths="2cm,2cm">
      <tr>
        <td>cell A</td>
        <td>This doesn't wraps.</td>
      </tr>
      <tr>
        <td>cell C</td>
        <td>
          <para style="textstyle1">to see how it works. This is yet more long text to demonstrate wrapping through "para" tag.</para>
        </td>
      </tr>
    </blockTable>
  </story>
</document>
person yucer    schedule 25.04.2012
comment
это работает с продуктомWithAVeryVeryVeryLongNameAndNoSpacesInsideWhichIsUsuallyNotSplitAsTheOriginalPosterQueriedAbout? - person gurney alex; 26.04.2012
comment
Мне жаль. Я забыл длинные имена без пробела. В любом случае это понадобится после появления такой функции, чтобы обернуть результирующую строку. - person yucer; 21.05.2012

Я предлагаю вам использовать тег parawrap следующим образом:

<parawrap>[[o.name]]</parawrap>

Этот пример используется, когда вы отображаете имя объекта.

person Blankoworld    schedule 13.05.2014
comment
Этот тег выдает ошибку. exclude_orm: (u'список index out of rangeparagraph text u‹para›parawrapLSA516.1.220.60.BR.s/parawrap‹parawrap›[[ (line.product_id.default_code and (line.product_id.default_code[0] == \ '1\' или line.product_id.default_code[0] == \'2\')) и line.product_id.name или line.product_id.default_code ]]‹/parawrap›‹/font›‹/para› вызвали исключение ', (‹type 'exceptions.IndexError'›, IndexError('индекс списка вне диапазона текста абзаца вызвал исключение',), ‹объект трассировки по адресу 0xa6589eb4›)) - person StackUP; 02.04.2015