有些字划掉并不是删除线而是右斜线,在ReportMachine报表的实现

  最近项目中,因为有个字是删除的意思,但不像Word排版给设置删除线样式就可以达到的,而是要求从左上角划一直线穿过这个字到右下角。最开始想到用造字的办法,可是造字不仅麻烦,而且要为不同字体造字,并且,如果机器系统不一样,字体之间还有差异,最关键的是,造出来的字,输出为pdf打开来看时,pdf并不能显示这个造的字出来。在报表中,这个字,有可能是从数据库中出来的,输入与输出在不同机器间共享,表达就会有很大的损失,造成错漏。所以造字是行不通的办法。

  报表是采用ReportMachine 6.5,这是网上流传很广的源码版。通过分析发现,可以针对出现这个字的情况下,进行特殊处理。找到RM_Class.pas文件, TRMCustomMemoView.ShowMemo就是输出处理,找到文本绘制的处理 _DrawOneStr,修改代码:

 1 procedure _DrawOneStr;
 2 var
 3   i: Integer;
 4   lWidth: Integer;
 5   str1,str2 : string; /// add 2014/9/19
 6 begin
 7 {/// 在有补字上画一个右斜线 }
 8   str1 := aStr;
 9   while true do
10   begin
11     str2 := ‘(补‘;
12     i := Pos(str2, str1);
13     if i = 0 then begin str2 := ‘(补‘; i := Pos(str2, str1); end;
14     if i = 0 then begin str2 := ‘补)‘;  i := Pos(str2, str1); end;
15     if i = 0 then begin str2 := ‘补)‘; i := Pos(str2, str1); end;
16     if i = 0 then break;
17     if str2 = ‘(补‘ then
18     begin
19       str2 := copy(str1,1,i);  // 补前的字符
20       str1 := str2 + ‘@@‘ + copy(str1,i+3,Length(str1)); // 将找到的"补"字用两个@替换
21     end
22     else if str2 = ‘(补‘ then
23     begin
24       str2 := copy(str1,1,i+1);
25       str1 := str2 + ‘@@‘ + copy(str1,i+4,Length(str1)); // 将找到的"补"字用两个@替换
26     end
27     else if str2 = ‘补)‘ then
28     begin
29       str2 := copy(str1,1,i-1);
30       str1 := Str2 + ‘@@‘ + copy(str1,i+2,Length(str1)); // 将找到的"补"字用两个@替换
31     end
32     else if str2 = ‘补)‘ then
33     begin
34       str2 := copy(str1,1,i-1);
35       str1 := str2 + ‘@@‘ + copy(str1,i+2,Length(str1)); // 将找到的"补"字用两个@替换
36     end;
37
38     lStrLen := Length(str2);
39     GetTextExtentPoint32A(Canvas.Handle, PAnsiChar(str2), lStrLen, lSize);
40     Canvas.MoveTo(aCurx + lSize.cx + (lCurLineHeight div 6), lCury);
41     Canvas.LineTo(aCurx + lSize.cx + lCurLineHeight - (lCurLineHeight div 6), lCury + lSize.cy);
42   end;
43 {\\\ end add 2014/9/19}
44   lStrLen := Length(aStr);
45   GetTextExtentPoint32W(Canvas.Handle, PWideChar(aStr), lStrLen, lSize);
46   ......
47 end;

通过增加上面的代码,导出pdf后的效果非常好。凡是用括号(无论全角还是半角)括起来的“补”字,均有右斜线划去。

时间: 2024-10-12 17:28:44

有些字划掉并不是删除线而是右斜线,在ReportMachine报表的实现的相关文章

The usage of Markdown---文字强调:加粗/斜体/文本高亮/删除线/下划线/按键效果

更新时间:2019.09.14 1. 序言 有时候,我们需要对某些文字进行强调,例如粗体和斜体.而Markdown通常可以使用星号*或者下划线_进行文字强调. 2. 加粗 如果想要达到加粗的效果,可以使用一组**和__包围着你想加粗的内容,例如**加粗**或者__加粗__--->效果:加粗或者 加粗 ps:在博客园中如果使用__加粗__,而前面紧跟着文字时并不会生效,需要加一个空格才行.但如果前面是符号,则能够正常显示. 例:我想__加粗__(前面没有加空格),我想(没有加空格)加粗,我想 加粗

使用NSMutableAttributedString添加下划线、删除线、阴影、填充、不同字体颜色等

在iOS开发中,有时会遇到需要添加下划线,或者设置字符串中某几个字的颜色的情况,最常见的栗子就是注册页面,如图所示: 几乎所有注册页面中都会出现这么一句话 "点击下一步表示您已同意<用户服务协议>",而且可以看到,"<用户服务协议>"几个字是橙色的,并且它们下面还有下划线.这是怎么实现的呢? 有的同学可能会说:"不同颜色就设置两个label,让左边的label显示前半句并设置为黑色,让右边的label显示后半句并设置为橙色就行了.&

android TextView设置删除线,超链接,颜色和字体等说介绍

要给 TextView 加上特殊效果,方式主要有几种: 第一种,自动应用效果,使用 android:autolink 属性,如: Java代码   <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text1" android:layout_width="match_parent" android:layout_heig

【iOS知识学习】_iOS Label添加删除线

在做优惠价格的时候需要用到删除线,但是网上的删除线千篇一律,都是大抄小抄,其实苹果的NSAttributedString就可以实现这一点啦. 代码如下: NSString *oldPrice = @"¥ 12345"; NSUInteger length = [oldPrice length]; NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];

菜品原价为0,说明菜品没有原价.菜品原价大于0,则显示菜品原价.并以删除线删去.每个菜品都是直接取的数据库字段.

菜品原价为0,说明菜品没有原价.菜品原价大于0,则显示菜品原价.并以删除线删去.每个菜品都是直接取的数据库字段. 1 <script type="text/javascript"> 2 function deletelinedisplay() { 3 var str_s = document.getElementById("DataList1").getElementsByTagName("s").length; 4 for (var

iOS_绘制带删除线的Label

效果图例如以下: 一个带删除线的文本标签,继承自UILabel 自绘代码过程例如以下: 1,重写控件的drawRect方法 2,首先得到上下文对象 3,设置颜色,并指定是填充(Fill)模式还是笔刷(Stroke)模式 4,在上下文中指定删除线的起点(含x,y) 5,依据标签文字的字体,确定文字的长度(即将被画的线条的长度) 6,指定删除线的终点(含x,y) 7,渲染到上下文,完毕路径的绘制

iOS &#183; UILabel加删除线

创建自定义子类DeleteLineLabel,继承自UILabel,然后在自定义子类DeleteLineLabel中 方法一(上下文): 1 - (void)drawRect:(CGRect)rect { 2 [super drawRect:rect]; 3 4 CGContextRef ref = UIGraphicsGetCurrentContext(); 5 6 //绘制起点 7 CGContextMoveToPoint(ref, 0, rect.size.height * 0.5); 8

css之文本缩进 | 文本对齐 | 上划线 | 下划线 | 删除线 | 首字母大写 | 全部变大写 | 全部变小写

1.文本缩进: 举例: 如果是整个段落缩进: 要实现下面的效果: -40px 2.文本对齐: 举例: 3.文本装饰: 举例: 删除线: 4.文本变形: 举例: 全部变大写: 全部变小写:

Excel 增加删除线

Excel 增加删除线 操作如下: 2.  选中删除线即 增加删除线, 去掉删除线即删除删除线, 颜色可以定义成红色之类.