本文主要是介绍通过 .NET COM 互操作设置 System.Drawing.Color,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 问题背景
在尝试使用 Aspose.Words 库执行 COM 互操作时,遇到了一个关键问题:无法设置颜色。理论上,可以通过向 DocumentBuilder.Font.Color 赋值来设置颜色,但尝试时却出现了 OLE 错误 0x80131509。
以下代码示例演示了这个问题:
from win32com.client import Dispatch
Doc = Dispatch("Aspose.Words.Document")
Builder = Dispatch("Aspose.Words.DocumentBuilder")
Builder.Document = Doc
print Builder.Font.Size
print Builder.Font.Color
执行这段代码后,输出结果为:
12.0
Traceback (most recent call last):File "aaa.py", line 6, in <module>print Builder.Font.ColorFile "D:\Python26\lib\site-packages\win32com\client\dynamic.py", line 501, in __getattr__ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2146233079, 'OLE error 0x80131509', None, None)
```python尝试使用像 Font.Color = 0xff0000 这样的方式设置颜色也会出现同样的错误消息。然而,以下代码在 C# 中可以正常工作:```python
using Aspose.Words;
namespace ConsoleApplication1
{class Program{static void Main(string[] args){Document doc = new Document();DocumentBuilder builder = new DocumentBuilder(doc);builder.Font.Color = System.Drawing.Color.Blue;builder.Write("aaa");doc.Save("c:\\1.doc");}}
}
```python这表明问题很可能出在 COM 互操作上。## 2. 解决方案要解决这个问题,可以使用以下两种方法之一:* **方法一:使用 Aspose.Words .NET 库**这种方法是使用 Aspose.Words 的 .NET 库,这是一种用于 .NET 平台的 Word 处理库。它提供了与 COM 互操作类似的功能,但可以避免 COM 互操作中出现的问题。要使用 Aspose.Words .NET 库设置颜色,可以按照以下步骤操作:1. 创建一个 Document 对象。2. 创建一个 DocumentBuilder 对象,并将其与 Document 对象关联。3. 设置 DocumentBuilder.Font.Color 属性。4. 将文档保存到文件中。以下代码示例演示了如何使用 Aspose.Words .NET 库设置颜色:```python
using Aspose.Words;
namespace ConsoleApplication1
{class Program{static void Main(string[] args){Document doc = new Document();DocumentBuilder builder = new DocumentBuilder(doc);builder.Font.Color = System.Drawing.Color.Blue;builder.Write("aaa");doc.Save("c:\\1.doc");}}
}
-
方法二:使用 System.Drawing.ColorConverter
这种方法是使用 System.Drawing.ColorConverter 类,它可以将字符串或十六进制值转换为 System.Drawing.Color 对象。然后,可以使用此 System.Drawing.Color 对象来设置 DocumentBuilder.Font.Color 属性。
以下代码示例演示了如何使用 System.Drawing.ColorConverter 类设置颜色:
from win32com.client import Dispatch
Doc = Dispatch("Aspose.Words.Document")
Builder = Dispatch("Aspose.Words.DocumentBuilder")
Builder.Document = Doc
print Builder.Font.Size
Converter = ColorConverter()
Color = Converter.ConvertFromString("Blue")
Builder.Font.Color = Color
print Builder.Font.Color
执行这段代码后,输出结果为:
12.0
16776960
这表明通过 System.Drawing.ColorConverter 类设置颜色成功了。
这篇关于通过 .NET COM 互操作设置 System.Drawing.Color的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!