crystal 报表在列中打印纯文本

crystal report print plain text in columns

我在 crystal 报告中有一份报告显示了从数据库中获取的地址列表,格式如下:

`<some codes regarding object to send>
<Name> <Surname>
<Address>
<zip> <City>
<other informations>`

我需要以纯文本形式将这些地址打印成 3 或 4 列(根据用户选择)。 使用 PDF 报告没有问题,但如果我设置为纯文本,它只显示一列。 你能帮助我吗? 感谢和问候

总体思路是创建两个详细信息部分。一个有 3 列,另一个有 4 列。并显示或隐藏其中之一。

一步一步:

  1. 创建一个包含列数的参数。我们称它为 {?NumberOfColumns}。正如您所说,我假设它只能是 3 或 4。

  2. 创建两个详细信息部分:A 和 B。

  3. 当 {?NumberOfColumns} = 4 时,使用分区专家抑制详细分区 A。

  4. 当 {?NumberOfColumns} = 3 时,使用部分专家抑制详细部分 B。

  5. 在 A 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/3) 中的 3 列。

  6. 在 B 部分使用部分专家。标记 "format with multiple columns"。在选项卡 "Layout" 上,将宽度设置为仅适合部分 (~page width/4) 中的 4 列。

  7. 将您的字段放入两个详细信息部分。

  8. 进行必要的微调。

我不会更改第一个答案,因为它可能对其他人有用。

这是一个非常无聊的新解决方案,如果你没有想出更好的主意的话。我会写 3 列。您将需要适应 4 列(或者只是为 4 列创建另一个 rpt)。

  1. 忘记 "format with multiple columns" 选项。只需创建一个正常的详细信息部分。

  2. 创建以下无聊的公式。我们称它为 "fieldsFiller":

    shared stringvar address1;
    shared stringvar address2;
    shared stringvar address3;
    shared stringvar name1;
    shared stringvar name2;
    shared stringvar name3;
    shared stringvar surname1;
    shared stringvar surname2;
    shared stringvar surname3;
    shared stringvar zip1;
    shared stringvar zip2;
    shared stringvar zip3;
    shared stringvar city1;
    shared stringvar city2;
    shared stringvar city3;
    //TODO do the same for the others fields you need

    if recordnumber mod 3 = 1 then (
        address1 := {YourDataSource.Address};
        name1 := {YourDataSource.Name};
        surname1 := {YourDataSource.Surname};
        zip1 := {YourDataSource.Zip};
        city1 := {YourDataSource.City};
        //TODO do the same for the others fields you need
    )
    else if recordnumber mod 3 = 2 then (
        address2 := {YourDataSource.Address};
        name2 := {YourDataSource.Name};
        surname2 := {YourDataSource.Surname};
        zip2 := {YourDataSource.Zip};
        city2 := {YourDataSource.City};
        //TODO do the same for the others fields you need
    )
    else if recordnumber mod 3 = 0 then (
        address3 := {YourDataSource.Address};
        name3 := {YourDataSource.Name};
        surname3 := {YourDataSource.Surname};
        zip3 := {YourDataSource.Zip};
        city3 := {YourDataSource.City};
        //TODO do the same for the others fields you need
    )
  1. 将 "fieldsFiller" 公式放在详细信息部分并取消它。
  2. 使用明细部分的部分专家根据以下公式抑制它:
  recordnumber mod 3 > 0
  1. 这会太无聊...为您在 "fieldsFiller" 公式中声明的每个共享变量创建一个公式。例如,使用以下内容创建一个名为 "address1" 的公式:
  shared stringvar address1;
  address1;
  1. 将公式放在详细信息部分。将它们作为字段并排放置。
name1 surname1   name2 surname2     name3 surname3
address1         address2           address3
zip1 city1       zip2 city2         zip3 city3
  1. 试一试。