未找到

未发布 Oracle企业可视化解决方案AutoVue系列产品更新至v21.0.1!
by Harriet666 keys 分享 1489993142405

Oracle发布了最新的企业可视化解决方案AutoVue系列产品v21.0.1版本。(21产品系列中的一个分支版本)。新版本包括了在不支持Java applet *的浏览器中使用AutoVue的能力,并为核心的CAD格式提供支持。

*由于浏览器的已知问题,不支持Microsoft Edge。

AutoVue系列产品包括:AutoVue 3D Professional AdvancedAutoVue Electro-Mechanical ProfessionalAutoVue EDAAutoVue OfficeAutoVue 2D Professional

未发布 Oracle再次被曝漏洞,影响33万用户
by Harriet666 keys 分享 1517562136241

来自ERPScan公司的安全专家们发现了这个编号为CVE-2018-2636的漏洞。这个漏洞来自Oracle MICROS系统内的销售点(Point-of-Sale)终端,可能被利用来从硬件内无需验证地读取敏感资料。

ERPScan发布的漏洞分析内这样写道:“CVE2018-2636标记了一个Oracle MICROS系统内的文件夹遍历时暴露出的漏洞。如果公司内部有人得到了某个关键文件夹的路径,他就能从一台终端中偷取许多关键的资料,包括服务日志以及一些包含着用户名和密码的信息,甚至可以使用这些密码去连接数据库,获得更多关于服务器端之类的信息。”

“攻击者们能够获得数据库用户名以及哈希过后的密码,将密码暴力破解然后获得数据库内部商业资料的所有权限。而且还有许多不同的利用这个漏洞的攻击方式,导致整个MICROS系统处在危险之中。”

Oracle的MICROS系统在世界范围内拥有超过330000的现金注册用户,涵盖了许多食物卖场(200000+)以及酒店(30000)。

研究者还解释道,对一个本地攻击者来说要获取到MICROS销售点终端的URL路径是很简单的。

例如,他可以找到一个商场的电子秤或者其他使用RJ45点硬件,将其连接到Raspberry PI(树莓派),然后扫描整个内部网络。另一个选项是可以通过这些暴露在因特网上的设备来定位。截止本稿完成之时,共有139个MICROS销售点系统暴露在因特网上,其中大多数位于美国及加拿大。

Oracle33

这并不是MICROS首次遭到质疑,2016年时就曾经有黑客通过客户售后支持中心入侵MICROS系统。

分析报告最后总结道:“如果你想保护你的系统免受网络攻击的危害,你必须持续地保持更新,安装所有安全补丁。在这个案例中,特指Oracle在2018年1月的更新。”

【示例教程】如何用LEADTOOLS 实现一个简单的STORE SCU存储客户端
by Harriet666 keys 分享 1519722017492
leadtools提供了封装后的dicom插件,可以非常方便的开发出dicom通讯部分的组件,本篇教程讲解如何使用相关的接口进行代码编写,实现Dicom协议中的CStore存储操作。
 
1.用vs2015创建一个winform项目,引用下面的dll,并在代码里引用
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Dicom.Scu.Common;
using Leadtools.Dicom.Scu;
using Leadtools.MedicalViewer;
using System.Net;
using System.IO;
 
2.创建下面的对象
// CStore highlevel 客户端和服务端对象
        private StoreScu _cstore;
        private DicomScp _server = new DicomScp();
 
3.初始化服务器和客户端参数,
本次用的服务器即是开发包中运行pacs服务器设置程序后,创建的L19_PACS_SCP64
private void initServer() {
            _server = new DicomScp();
            _server.AETitle = "L19_PACS_SCP64";
            _server.PeerAddress = IPAddress.Parse("10.32.1.75");
            _server.Port = 534;
            _server.Timeout = 30;
        }
private void initCstore() {
            _cstore = new StoreScu();
            _cstore.AETitle = "L19_CLIENT64";
            _cstore.HostPort = 1030;
            //存储成功后
            _cstore.AfterCStore += _cstore_AfterCStore;
        }
 
4.执行存储命令
private void 存储ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string filename ="D:\\Xa.dcm";
            _cstore.Store(_server, filename);

        }

保存成功后即可在服务器管理器中,或者使用客户端查询已经存储的图像。
未发布 【FAQ合集】综合性UI组件库jQWidgets的常见问题
by Harriet666 keys 分享 1510305337237
jQWidgets是一个基于jQuery JavaScript的综合性和创新性的HTML5 UI组件库,旨在帮助开发者创建专业、跨平台的Web应用程序,并最大限度的节省开发时间。jQWidgets包含30多种UI组件,是最快的JavaScript UI框架之一。
 
jQWidgets最新版下载>>>

 

1、jQWidgets基于什么技术?

jQWidgets是一个100%纯JavaScript脚本库框架,用于创建可在任何设备上运行的现代响应式网站和移动Web应用程序。它基于流行的jQuery库。套件中的所有小部件都是基于jQWidgets核心框架从头开始构建的。该套件不依赖任何jQuery UI。 

2、我可以在AngularJS或Bootstrap中使用jQWidgets吗?

可以!jQWidgets可以与AngularJS和Bootstrap很好地集成。您可以找到多个集成示例、文档主题,我们还有Angular和jQWidgets的论坛。我们团队的首要任务是确保jQWidgets与流行的JavaScript框架(如Angular和Bootstrap)进行良好的互通。我们密切关注他们的开发和更新步伐,并及时进行jQWidgets的更新。 

3、如何获得jQWidgets许可?

jQWidgets SDK是双重许可的,您可以选择商业和非商业许可。 
 
非商业许可证 
如果您想要创建高质量的响应式网站以供个人或非盈利用途使用,您可以在Creative Commons Attribution-NonCommercial 3.0许可证下免费使用jQWidgets 。非商业许可适用于以下情况: 
- 如果您正在创建不产生收入的个人网站(包括广告收入)。
- 如果你是一个注册的非营利组织、公立学校和慈善机构。
- 如果您正在测试jQWidgets是否适合您的项目,然后再投入商业许可。
 
商业许可证 
商业许可证适用于商业或政府网站和项目或企业内联网。每个许可证包括从购买之日起一年内的产品更新和免费分发。许可证更新是可选的,只需新许可证的价格的50%。要购买商业许可证,请访问我们的许可证页面。

4、什么是商业网站?

商业网站是指产生任何类型的收入或现金流量的网站。如果您销售产品、广告、提供服务或商业业务,那么您的网站是商业的。公司网站也是商业的,即使它不出售任何东西,因为它是针对一家营利性公司。 

5、如何定义一个开发人员?

直接或间接使用jQWidgets开发应用程序、网站或其他产品的每个人都被视为开发人员。 

6、我可以用jQWidgets开发人员或企业许可证创建多少个网站或项目?

这个是不限数量的,许可证是永久的,包括免版税的分发。 

7、我需要支付你的版税吗?

jQWidgets不收取版税或SaaS费用。

8、你提供有额外的升级服务吗?

是的。请联系我们的销售团队sales@jqwidgets.com了解更多信息。 

2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

 
未发布 网络通讯组件包Red Carpet Subscriptions 2017 v2发布,升级整个代码库
by Harriet666 keys 分享 1501060223518
Red Carpet Subscriptions 2017 v2包括整个产品线的升级代码库,拥有迄今为止最佳的性能、质量和可用性。还包括许多安全更新,支持最新的开发工具,新组件等。我们已将所有组件升级到2016版本。

更新重点


整个产品线的升级

  • 每个产品都已升级到新的代码库,提供更强大的安全性、更好的性能和改进的API。
  • .NET版本支持Microsoft Visual Studio 2017。
  • Delphi和C ++ Builder版本支持Embarcadero RAD Studio 10.2 Tokyo。
  • 默认的签名算法已经更新到SHA-256。

IP*Works! Encrypt安全更新

  • 组件通过了Google的Wycheproof测试。
  • 新的Rijndael组件支持NIST标准。
  • OpenPGP默认签名算法更新为SHA-256。
  • 添加了对SHA-512/256和SHA-512/224的Hash支持。

Cloud Storage Integrator的更多选项

  • 支持Google Drive API v3。
  • 新的AzureBlob组件允许你使用Azure Blob存储。

改进X12和EDI积分器

  • 新的X12Translator组件可轻松将X12转换为XML,反之亦然。
  • 增强API、文档解析和JSON编程功能。

使用TCP与IP*Works! SNMP

  • 新组件(SNMPTCPMgr,SNMPTCPTrapMgr和SNMPTCPAgent)允许你使用SNMP。

IP*Works! SSH的新隧道功能

  • SSHReverseTunnel组件现在具有智能重新连接的功能。

新订阅优惠:选择版本的源代码

  • 为了帮助你在任何Linux系统上进行编译,无需依赖共享对象文件,Red Carpet Subscription包含访问macOS、iOS、C ++ for Linux、PHP和Node.js版本的混淆源代码。

细节


所有产品

  • 支持Micosoft Visual Studio 2017
  • 支持Embarcadero RAD Studio 10.2 Tokyo
  • 默认签名算法更新为SHA-256

IP*Works! Encrypt

  • 新的Rijndael组件。
  • OpenPGP默认签名算法更新为SHA-256。
  • 支持SHA-512/256和SHA-512/224。

IP*Works! SNMP

  • TCP的新组件 - SNMPTCPMgr、SNMPTCPTrapMgr、SNMPTCPAgent。
  • SysUpTime属性支持64位整数集。

X12 Integrator

  • 新的X12翻译器组件 - 轻松将X12转换为XML,反之亦然。
  • API更新为标准化输入/输出选项并提供更一致的体验。
  • 用于可视化和解析文档结构的附加功能。
  • 使用RSSBus JSON模式时可以使用改进的可读值。

IP*Works! SSH

  • SSHReverseTunnel智能重连。

EDI Integrator

  • AS2事件的日志记录。
  • AS2默认签名算法更新为SHA-256。
  • 增加OFTPClient AcceptFile事件。
  • AS4默认加密算法更新为AES128-GCM。
  • OFTP LocalFile添加到Transfer和EndTransfer事件。
  • 添加了RNIF SignatureAlgorithm属性。
  • GISB默认使用内部PGP提供程序。

EDIFACT Integrator

  • API更新为标准化输入/输出选项,并提供更一致的体验。
  • 用于可视化和解析文档结构的附加功能。
  • 使用RSSBus JSON模式时可以使用改进的可读值。

IP*Works! S/MIME

  • API更新为标准化输入/输出选项,并提供更一致的体验。

IP*Works! Auth

  • 添加OneTimePassword组件。
  • ClaimsAuth现在是SAML。
  • 用于用户和组信息的Active Directory方法。
未发布 交互式地图图表组件AnyMap更新至v8.0.0,改进图表API
by Harriet666 keys 分享 1507802178604

AnyMap的可交互式地图是AnyChart组件的一种独特的功能,能够让你可视化地理相关的数据。(重要推荐:AnyMap已加入在线订购,超值特价低至¥368起!

AnyMap v8.0.0更新:
Modular System  Robust JavaScriptHTML5 charts  AnyChart
模块化系统
模块化系统是AnyChart 8的核心。它允许您仅连接实际使用的图表类型和功能,大大减少了在网页上运行的大小。基于模块化的AnyChart与流行的捆绑工具(如Webpack,Browserify等)完全兼容。使用我们的JS Builder轻松生成自定义构建。
 
自定义JavaScript Builds
自定义JavaScript Builder专门用于组装一个仅包含需要使用的功能和图表类型的JavaScript文件。AnyChart 8.0.0版包含30个模块和 16个主题。您还可以创建含许可证密钥的文件 。
 
Node.js服务器端渲染
Node.js服务器是一个轻量级的Web服务器,提供用于生成矢量图形(PDF,SVG或PS)、位图图像(PNG,JPG或TIFF)、PDF报告和CSV和XLSX(Excel)中的数据的API。它使用JavaScript代码以及JSON和XML配置作为输入数据。服务器非常易于安装和自定义,您可以在任何主要平台上运行:Linux,Windows和macOS。它是创建通过电子邮件或社交网络共享工具发送图表的报表系统的理想选择。
 
No Data Label Feature  Robust JavaScriptHTML5 charts  AnyChart
无数据标签功能
无数据标签功能是用于通知图表查看器数据不可用的API。由于默认情况下缺少数据,或者通过“数据更新API”,“排除数据点”功能或通过交互性删除数据,则可能会丢失数据。
 
重做CSV/Excel导出
根据需求,我们重新编制了为图表准备的CSV/Excel数据的算法。现在,它考虑到图表类型的特定功能,并允许您为不同的系列使用多个数据集。
Chart Export Settings  Robust JavaScriptHTML5 charts  AnyChart
图表导出设置
现在,您可以自定义每个图表的导出设置:在Facebook上共享的链接和说明、图像导出选项等。
上下文菜单自定义API
我们大大简化了上下文菜单定制的过程。现在,上下文菜单中的每个项目都被分配了一个DI,可以访问相应的字段和设置以及添加自定义ID。我们还添加了本地化上下文菜单的选项。
一般的API改进
我们大大改进了第八代JavaScript图表库中的AnyChart JS Charts API。 界面设置、网格设置、数据映射设置现在变得很容易。为了方便和简化从
AnyChart 7到AnyChart 8的转换,我们创建了允许大多数用户以半自动模式切换到新版本的迁移工具。
未发布 MailBee.NET Objects退回邮件教程(二):POP3部分
by Harriet666 keys 分享 1503567760428
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,
简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。

MailBee.NET Objects介绍和试用点击查看>>>
 
 
本文主要介绍了SMTP服务器退回邮件的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
 
在上期的SMTP部分中,我们将退回的电子邮件发送到指定的单个电子邮件地址。
 
每封退回的电子邮件都包含失败的电子邮件地址(以及其他信息)。这个失败的地址是我们想知道的。这个任务看起来很简单 - 你需要做的是扫描退回的
邮件以确定地址的典型字段。但是有一个隐藏的危险:每个邮件服务器都有自己的邮件退回格式。虽然它们几乎具有相同的“From”和“主题”字段,但是退回地址可以在邮件的任何位置。MailEnable服务器的典型退回邮件如下所示:
From: POSTMASTER@domain.com
To: jdoe@domain.com
Subject: Message Delivery Failure

MailEnable: Message Delivery Failure.

The following recipient(s) could not be reached: 

Recipient: [SMTP: bill@domain.com] Reason: The message could not be delivered because the domain name (domain.com) does not appear 

to be registered.

函数GetInvalidEmailAddressME()检查邮件是否被退回,并从退回的邮件中提取失败的地址。由于退回邮件格式不同,此功能仅对MailEnable服务器有效。例如,如果你正在使用Communigate Pro服务器,则退回消息如下所示:
From: MAILER-DAEMON@domain.local
To: jdoe@localhost Subject:
Undeliverable mail:

Failed to deliver to ''
 
正如你所看到的,这个退回的邮件与前一个几乎相同。使用哪个服务器并不重要,退回信息总是有From,To和Subject字段,退回信息在其正文中有失败的地址。函数GetInvalidEmailAddressCP()与前一个函数几乎相同; 区别仅在于检查邮件字段并搜索失败的地址。支持尽可能多的退回电子邮件格式至关重要。这就是为什么你需要修改GetInvalidEmailAddress()函数,以适应服务器使用的退回电子邮件格式。
 
注意:在某些情况下,你可能需要扫描退回的电子邮件以获取其他信息。如果由于暂时的问题,退回的邮件到达,则不要删除电子邮件地址:邮箱超过配
额,邮件服务器关闭等。退回邮件可以分为两种类型:硬邮件和软邮件。如果是不存在的帐户或域,则会发生硬性退回。其他故障,如完整的邮箱或暂时
不可用的域,则是软性退回。你可以为数据库中的每个地址进行计算。也许下一次尝试发送邮件到具有一些软性退回的地址时将成功。
 
代码示例:
在此示例中,我们从指定的帐户中检索退回的电子邮件,然后从每个退回的电子邮件中提取失败的电子邮件地址。失败的地址传递给RemoveEmailFromDatabase子程序,该子程序必须从数据库中删除失败的地址。应用程序还会从服务器中删除退回的电子邮件,以避免下次处理。
C#:
// Create POP3 object
Pop3 pop = new Pop3();

// Enable logging to file
pop.Log.Enabled = true;
pop.Log.Filename = @"C:\log.txt";
pop.Log.Clear();

// Connect to POP3 server
pop.Connect("mail.domain.com");
pop.Login("bounce", "secret");

// Download headers and bodies of all messages.
MailMessageCollection msgs = pop.DownloadMessageHeaders(1, -1, -1);
                        
// Loop through all messages in the mailbox
foreach (MailMessage msg in msgs)
{
        string strLine = msg.BodyPlainText;
        Console.WriteLine("From: " + msg.From.Email);
                                
        // Get failed email address
        string str_invalid_email =  GetInvalidEmailAddressME(msg);

        // If str_invalid_email is non-empty then failed email 
        // address was found
        if (str_invalid_email.Length > 0)
        {
                // Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email);

                // Display invalid adress
                Console.WriteLine("Invalid email: " + str_invalid_email);                

                // Delete bounced email from server to avoid
                // processing it next time
                pop.DeleteMessage(msg.IndexOnServer);
        }
}

// Disconnect from POP3 server
pop.Disconnect();

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for MailEnable servers
static string  GetInvalidEmailAddressME(MailMessage msg)
{
        string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Delivery Failure") == -1)
{ 
                return "";
        }
        if (msg.From.ToString().IndexOf("POSTMASTER") == -1)
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("SMTP:");

        // Check if bounced message report contains "Recipient:" field
        if (i_start == -1)
        {
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for Communigate Pro servers
static string  GetInvalidEmailAddressCP(MailMessage msg)
{
string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Undeliverable mail") == -1) 
        {
                return "";
        }
        if (msg.From.ToString().IndexOf("MAILER-DAEMON") == -1) 
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("to '<");

        // Check if bounced message report contains 
        // "Failed to deliver to " field
        if (i_start == -1)
        { 
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// This function must remove (or disable) specified
// email address from mailing list
static void RemoveEmailFromDatabase(string str_invalid_email)
{
// TODO: Add your code here                        
}
 
VB.NET:
Dim pop As New Pop3

' Enable logging to file
pop.Log.Enabled = True
pop.Log.Filename = "C:\log.txt"
pop.Log.Clear()

' Connect to POP3 server
pop.Connect("mail.domain.com")
pop.Login("jdoe", "secret")

' Download headers and bodies for all messages.
Dim msgs As MailMessageCollection = pop.DownloadMessageHeaders(1, -1, -1)

' Loop through all messages in the mailbox
Dim msg As MailMessage
For Each msg In msgs
        Dim strLine As String = msg.BodyPlainText
        Console.WriteLine("From: " + msg.From.Email)

        ' Get failed email address
        Dim str_invalid_email As String = GetInvalidEmailAddressME(msg)

        ' If str_invalid_email is non-empty then failed email 
        ' address was found
        If str_invalid_email.Length > 0 Then
                'Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email)

                ' Display invalid address
                Console.WriteLine("Invalid email: " & str_invalid_email)

                ' Delete bounced email from server to avoid
                ' processing it next time
                pop.DeleteMessage(msg.IndexOnServer)
        End If
Next
Console.ReadLine()

' Disconnect from POP3 server
pop.Disconnect()

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for MailEnable servers
Function GetInvalidEmailAddressME(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Delivery Failure") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("POSTMASTER") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("SMTP:")

        ' Check if bounced message report contains "Recipient:" field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for Communigate Pro servers
Function GetInvalidEmailAddressCP(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Undeliverable mail") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("MAILER-DAEMON") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("to '<")

        ' Check if bounced message report contains 
        ' "Failed to deliver to " field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' This function must remove (or disable) specified
' email address from mailing list
Sub RemoveEmailFromDatabase(ByVal str_invalid_email As String)
        ' TODO: Add your code here                        
End Sub
未发布 【示例教程】如何用leadtools创建一个OCR驱动的计算器
by Harriet666 keys 分享 1519808939687

Leadtools 19总套包下载>>>

日常工作和业务中会有一些图片中的计算公式等需要计算,这个代码片断显示了LEADTOOLS OCR可以用来检测、识别和执行简单的数学命题,如“2 + 2”。
static void SimpleOCRCalculator(string filePath)
      {
         RasterCodecs codecs = new RasterCodecs();

         RasterImage image = codecs.Load(filePath);

         string[] calculations;
         using (IOcrEngine engine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false))
         {
            engine.Startup(null, null, null, null);
            IOcrPage page = engine.CreatePage(image, OcrImageSharingMode.None);

            page.AutoZone(null);
            page.Recognize(null);

            calculations = new string[page.Zones.Count];

            for (int i = 0; i < page.Zones.Count; i++)
            {
               calculations[i] = page.GetText(i);
            }

            engine.Shutdown();
         }

         Dictionary<string, Action<double, double>> operands = new Dictionary<string, Action<double, double>>();
         operands.Add("+", new Action<double, double>(delegate(double a, double b) { double ans = a + b; Console.WriteLine("{0} + {1} = {2}", a, b, ans); }));
         operands.Add("-", new Action<double, double>(delegate(double a, double b) { double ans = a - b; Console.WriteLine("{0} - {1} = {2}", a, b, ans); }));
         operands.Add("x", new Action<double, double>(delegate(double a, double b) { double ans = a * b; Console.WriteLine("{0} * {1} = {2}", a, b, ans); }));
         operands.Add("/", new Action<double, double>(delegate(double a, double b) { double ans = a / b; Console.WriteLine("{0} / {1} = {2}", a, b, ans); }));

         for (int i = 0; i < calculations.Length; i++)
         {
            string equation = Regex.Replace(calculations[i], @"\n|\r| ", "");
            string[] ops = new string[] { "+", "-", "x", "/" };

            for (int j = 0; j < ops.Length; j++)
            {
               int index = equation.IndexOf(ops[j]);

               if (index > 0 && index < equation.Length)
               {
                  string op1 = equation.Substring(0, index);
                  string op2 = equation.Substring(index + 1);

                  double arg1 = double.Parse(op1);
                  double arg2 = double.Parse(op2);

                  operands[ops[j]](arg1, arg2);

                  break;
               }
            }
         }

         codecs.Dispose();
         image.Dispose();
      }

 

用于测试的图像如下。

resource

未发布 【示例教程】使用Leadtools对身份证进行识别和表单模板创建
by Harriet666 keys 分享 1511426850168
使用Leadtools的表单识别功能可以对固定格式的表单很方便的进行批量识别,生活中常见的身份证、驾驶证、发票等都可以识别出准确的结果。另外通过表单匹配的功能同时也能实现对表单进行自动分类。本篇教程以身份证识别为例,介绍整个识别和创建的流程。
 
Leadtools 19总套包下载>>>
 

1、模板创建

1.1制作空白表单
通过photoshop对拍摄到的身份证进行处理,仅保留公共部分的内容和字段,对于身份证照片和个人具体信息都进行清除,结果如下图
 
1.2使用leadtools表单编辑器编辑模板
打开leadtools开发包安装目录:C:\LEADTOOLS 19\Shortcuts\Forms Recognition & Processing\.NET Class Libraries\Forms (Structured & Unstructured)\Forms Recognition & Processing\Master Forms Editor
运行其中的可执行程序,点击NEXT.,选择载入主表单数据集,载入默认路径,选择professional引擎,进入主界面
 
添加中文语言支持
 
添加身份证主表单
 
向身份证表单添加图像,选择刚才已经制作好的空白图片
 
添加完成后,可以在主界面的右侧对模板进行编辑
下图是可以在模板中添加的识别类型,本例中,我们主要使用文本和图片两个类型
 
点击相应的识别类型,在模板上拖动为需要识别的区域,如下图,然后保存即可。
 
添加后可以看到左下角的信息栏里面有添加的字段的详细信息,可以对字段的名称,位置等,进行进一步的修改,最后点击保存按钮,这样我们就完成了表单的创建。
 
创建表单过程:

 
 

2、识别表单

直接在该演示程序的菜单中点击如下按钮即可打开识别程序
单独打开识别程序的目录为:C:\LEADTOOLS 19\Shortcuts\Forms Recognition & Processing\.NET Class Libraries\Forms (Structured & Unstructured)\Forms Recognition & Processing
 
打开后的节目如下,同样先附加中文语言包
 
点击菜单按钮,选择一个身份证图片进行识别
 
识别完成后会弹出识别结果界面,可以看到身份证上所有的信息都已经被准确的识别出来了,
 
以下为识别过程
未发布 .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别
by Harriet666 keys 分享 1507866121963
前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错。但还是有一些开发者发出了疑问,.NET Core、Xamarin、.NET Standard和.NET Framework之间有哪些不同呢?本文就为大家简单描述一下这四者之间的区别。
 
.NET Core

.NET Core是免费、跨平台的,是托管框架的开源实现。它支持4种类型的应用程序:控制台、ASP.NET Core、云和通用Windows平台(UWP)。Windows Forms和Windows Presentation Foundation(WPF)并不包含在.NET Core中。

从技术上讲,.NET Core仅支持控制台应用程序。ASP.NET Core和UWP是以.NET Core为基础构建的应用程序模型。

与.NET Framework不同,.NET Core没有作为Windows组件考虑。因此,更新是以NutGet包的形式,而不是通过Windows Update。由于.NET Core运行时安装成了App-Local,而应用程序升级是通过包管理器完成的,所以应用程序可以关联特定的.NET Core版本以及单独升级。
 
.NET Standard

托管框架的每一种实现都有一套自己的基类库。基类库(BCL)包含诸如异常处理、字符串、XML、I/O、网络和集合这样的类。

.NET Standard是一项实现BCL的规范。由于.NET实现需要遵循这项规范,所以应用程序开发人员就不用担心每一种托管框架实现的BCL不同。

框架类库(FCL),如WPF、WCF、ASP.NET,不包含在BCL中,因此,也就不包含在.NET Standard中。

.NET Standard与.NET实现之间的关系就和HTML规范与浏览器之间的关系一样。后者是前者的实现。

因此,.NET Framework、Xamarin和.NET Core,每一种托管框架都实现了.NET Standard中的BCL。随着计算机工业不断推出新的硬件和操作系统,将来还会出现新的.NET托管框架。该标准让应用程序开发人员知道,他们可以依赖于一套始终如一的API。

每个.NET版本都对应一个.NET Standard版本。

API一致,将应用程序移植到不同的托管实现以及提供工具都会更简单。

.NET Standard被定义为一个单独的NuGet包,因为所有的.NET实现都必须支持它。工具变得简单了,因为对于特定的版本,它们有一套相同的API。你还可以针对多个.NET实现构建一个库项目。

你还可以构建特定平台API的.NET Standard封装器。
 
.NET Standard vs 可移植类库

可移植类库做的不是同一件事吗?

可移植类使用多个平台均都支持的通用API。因此,支持的平台越多,可用的API就越少,而且,对于特定的平台组合,很难知道到底支持哪些API。对于一个新平台,已有的PCL必须重新编译。PCL还需要微软针对每个平台创建一个新的框架实现分支。

由于.NET Standard确定了API,而不是一个实现,所以不需要重新编译应用程序。任何新发布的.NET实现都实现了必须的库。应用程序不需要重新编译就可以运行在新的硬件平台或操作系统上。从理论上讲,在调用API时可能会捕获到NotSupportedException异常,但那种情况应该很少见。
 
小结
  • .NET Standard是一项API规范,每一个特定的版本,都定义了必须实现的基类库。
  • .NET Core是一个托管框架,针对构建控制台、云、ASP.NET Core和UWP应用程序进行了优化。每一种托管实现(如Xamarin、.NET Core或.NET Framework)都必须遵循.NET Standard实现BCL。
  • .NET Framework用于构建桌面应用程序和运行在互联网信息服务器(IIS)上的ASP.NET应用程序。它是第一个托管框架。
  • Xamarin则是一个用于构建iOS、Android、macOS和桌面应用程序的框架。
【慧都十四周年庆预热开启!全场满额送七级豪礼,AppleMac笔记本电脑、iwatch、iPad等您来拿!】

活动时间:10月1日-10月31日


 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  3. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  4. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  5. Node.js 打印vite react+go项目目录树
  6. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  7. Windows与Mac通过git ssh和rsync实现文件共享互传
  8. Windows与Mac通过git ssh和scp实现文件共享互传
  9. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  10. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA