C++ 编写RTF文件 字体颜色问题

时间:2023-02-05 19:57:54
各位,我想在程序中预定义一些颜色,然后往rtf文件中写入数据的时候,将这些预定义的颜色作用到字体上,请问这个应该如何实现呢?有做过的可以给一个小例子吗?
谢谢!

6 个解决方案

#1


搜“RTF文件格式约定”?

#2


引用 1 楼 zhao4zhong1 的回复:
搜“RTF文件格式约定”?

我有一个1.7版本的规范.他是这么说的:
每一个定义都要用分号隔开,即使是省略的定义也是如此。如果一个颜色定义被省略,RTF阅读器会使用它的默认颜色。以下的例子定义了Word使用的默认颜色表。从一个分号直接跟在控制字\colortbl之后可以看出,第一个颜色被省略了。这种省略的定义表示颜色0是自动颜色。
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
前景色和背景色通过颜色表索引值来定义一个颜色。若要获得更多颜色设置的信息,请参阅Windows文档。
以下的例子定义了一个有颜色(被支持的颜色)的文本块。注意索引cf/cb是颜色表一个入口的索引值,这代表了一个 红/绿/蓝 的颜色组合。
{\f1\cb1\cf2 This is colored text. The background is color
1 and the foreground is color 2.}
如果使用不显示颜色的软件来翻译该文件,阅读器将忽略这个颜色表组。


我感觉无从下手.

#4


引用 3 楼 kuyucman 的回复:
http://www.pindari.com/rtf1.html

"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}"这一行如何变成代码?

#5


引用 4 楼 baijiaheizhiganmao 的回复:
Quote: 引用 3 楼 kuyucman 的回复:

http://www.pindari.com/rtf1.html

"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}"这一行如何变成代码?
]
比如我这样写:
	w.WriteStartGroup();
w.WriteKeyword(L"ctb1");
w.WriteKeyword(L";");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green0");
w.WriteKeyword(L"blue255;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green255");
w.WriteKeyword(L"blue0;");
w.WriteKeyword(L";");
w.WriteEndGroup();

//\redN 红色索引值
//\greenN 绿色索引值
//\blueN 蓝色索引值

// 输出正文

w.WriteKeyword(L"qc");    // 设置居中对齐
w.WriteKeyword(L"f0");    // 设置字体
w.WriteKeyword(L"cf2");
w.WriteKeyword(L"fs30");    // 字体大小
w.WriteText(L"这是第一段文本");


完全没有效果啊

#6


引用 1 楼 zhao4zhong1 的回复:
搜“RTF文件格式约定”?


引用 3 楼 kuyucman 的回复:
http://www.pindari.com/rtf1.html

谢谢两位,我搞定了:
// 输出颜色表
w.WriteStartGroup();
w.WriteKeyword(L"colortbl;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green0");
w.WriteKeyword(L"blue255;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green255");
w.WriteKeyword(L"blue0;");
w.WriteEndGroup();

w.WriteKeyword(L"qc");    // 设置居中对齐
w.WriteKeyword(L"f0");    // 设置字体
w.WriteKeyword(L"cf2");
w.WriteKeyword(L"fs30");    // 字体大小

#1


搜“RTF文件格式约定”?

#2


引用 1 楼 zhao4zhong1 的回复:
搜“RTF文件格式约定”?

我有一个1.7版本的规范.他是这么说的:
每一个定义都要用分号隔开,即使是省略的定义也是如此。如果一个颜色定义被省略,RTF阅读器会使用它的默认颜色。以下的例子定义了Word使用的默认颜色表。从一个分号直接跟在控制字\colortbl之后可以看出,第一个颜色被省略了。这种省略的定义表示颜色0是自动颜色。
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
前景色和背景色通过颜色表索引值来定义一个颜色。若要获得更多颜色设置的信息,请参阅Windows文档。
以下的例子定义了一个有颜色(被支持的颜色)的文本块。注意索引cf/cb是颜色表一个入口的索引值,这代表了一个 红/绿/蓝 的颜色组合。
{\f1\cb1\cf2 This is colored text. The background is color
1 and the foreground is color 2.}
如果使用不显示颜色的软件来翻译该文件,阅读器将忽略这个颜色表组。


我感觉无从下手.

#3


#4


引用 3 楼 kuyucman 的回复:
http://www.pindari.com/rtf1.html

"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}"这一行如何变成代码?

#5


引用 4 楼 baijiaheizhiganmao 的回复:
Quote: 引用 3 楼 kuyucman 的回复:

http://www.pindari.com/rtf1.html

"{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}"这一行如何变成代码?
]
比如我这样写:
	w.WriteStartGroup();
w.WriteKeyword(L"ctb1");
w.WriteKeyword(L";");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green0");
w.WriteKeyword(L"blue255;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green255");
w.WriteKeyword(L"blue0;");
w.WriteKeyword(L";");
w.WriteEndGroup();

//\redN 红色索引值
//\greenN 绿色索引值
//\blueN 蓝色索引值

// 输出正文

w.WriteKeyword(L"qc");    // 设置居中对齐
w.WriteKeyword(L"f0");    // 设置字体
w.WriteKeyword(L"cf2");
w.WriteKeyword(L"fs30");    // 字体大小
w.WriteText(L"这是第一段文本");


完全没有效果啊

#6


引用 1 楼 zhao4zhong1 的回复:
搜“RTF文件格式约定”?


引用 3 楼 kuyucman 的回复:
http://www.pindari.com/rtf1.html

谢谢两位,我搞定了:
// 输出颜色表
w.WriteStartGroup();
w.WriteKeyword(L"colortbl;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green0");
w.WriteKeyword(L"blue255;");
w.WriteKeyword(L"red0");
w.WriteKeyword(L"green255");
w.WriteKeyword(L"blue0;");
w.WriteEndGroup();

w.WriteKeyword(L"qc");    // 设置居中对齐
w.WriteKeyword(L"f0");    // 设置字体
w.WriteKeyword(L"cf2");
w.WriteKeyword(L"fs30");    // 字体大小