使用c# 开发 php的com组件
使用c# 开发 php的com组件 读取word内容(表单域、书签内容)
注意问题:
1、查看php版本(64、32)
2、查看系统版本
3、按照系统对应的版本注册组件
这里环境是64 .net 4.0
所以路径是:C:\Windows\Microsoft.NET \Framework64(64位Framework框架)\ net版本 \ RegAsm.exe
php传递给c# 编码问题 (死活不对,使用bstr、各种编码转换都不行,最后使用base64)
vs2017 =》需要设置 项目-属性-生成-为Com互操作
vs2017 => 应用程序-》程序集信息-》选中com
具体代码如下:
com组件是以接口形式开放给php调用的所以这块要注意
[ComVisible(true)]
[Guid("自己生成")]
public interface IMyComInterface
{
Document OpenDoc(string fileName,bool readOnly=false);
string GetFormFields(string fieldName, int section=0);
string GetTableFields(int tableIndex, int rowIndex, int colIndex, int section = 0);
string getBookmarkText(string sBookmark);
string getBookmarkText1(string sBookmark);
void strings(string text);
string GetTableFormFields(int iTable, int iRow, int iCol, int iSection = 0, object sFieldName = null);
int getSectionTableRowsNum(int section, int tableIndex);
void Closes();
int getSectionTableNum(int section);
}
[ComVisible(true)]
[Guid("自己生成")]
[ClassInterface(ClassInterfaceType.None)]
public class MyComClass : IMyComInterface
{
实现的代码
}
几个小问题 处理编码
public static string getBase64(string base64String="")
{
if (!IsBase64String(base64String)) {
return base64String;
}
byte[] data = Convert.FromBase64String(base64String);
string originalString = Encoding.UTF8.GetString(data);
return originalString;
}
public static string RemoveInvisibleCharacters(string input)
{
// 控制字符:\p{C}
// 格式字符:\p{Cf}
// 私用使用区:\p{Co}
// 不可见字符:\p{Cs}
string pattern = @"\p{C}+|\p{Cf}+|\p{Co}+|\p{Cs}+";
// 使用正则表达式移除不可见字符
return Regex.Replace(input, pattern, string.Empty);
}
//表单域提取
static string Escape(string str)
{
//Regex regex = new Regex("(\\\\)*\\\\?'");
//str = regex.Replace(str, "\\'");
str = Regex.Replace(str, @"FORMTEXT|[\x00-\x1F\x7F]", "").Trim();
return str;
}