免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 出品

最近新项目需要处理 PDF,研究了 PDf.js 之后觉得很不错,于是写篇文章推荐给大家。

PDF.js 的功能和它的名字一样简单,是一个使用 HTML5 技术来让前端网页支持读取、解析和显示 PDF 文档的 JS 工具库。这个项目由大名鼎鼎的 Mozilla 组织开发并且更新维护着,没错,就是那个开发了火狐浏览器的 Mozilla。所以 pdf.js 也内置在 Firefox 的 19+ 版本中,也是火狐浏览器的默认 PDF 处理工具。

一般来说,要查看 PDF 文档,我们需要一个 PDF 阅读器软件,而通过 PDF.js 可以在浏览器中直接显示和处理 PDF 文档,无论是在线浏览、存档或者其他基于 PDF 的功能都可以实现。

PDF.js 项目主页

  • 功能强大,内置了很多实用的 api,几乎可以对 PDF 文件“为所欲为”;
  • 兼容性超好,不仅支持现代浏览器,对于旧版本的浏览器也有很好的支持;
  • 易于上手,官方也提供了很多代码例子。

如果只是为什么显示 PDF 文档,其实大部分情况下浏览器都支持直接打开 PDF,之前碰到要显示 PDF 的需求,都是直接在浏览器新标签打开。

在浏览器中渲染 PDF

不过就在上周,我接到了一个需求,要在网页上支持导入 PDF 文件,转化成图片保存到后端,并且还要提取 PDF 文档中的文字。于是我就开始研究 PDF.js ,了解之后发现这个工具库非常强大,完全可以满足我的需求,那些在线转换 PDF 的工具实际上都是基于 PDF.js 开发的。

我要处理的文档有一部分是发票,其实里面的文字并不是图片,而是可以选择的,这种类型的文档通过 PDF.js 甚至可以直接获取文字的内容,OCR 识别的过程都免了,实在太棒了。

要开始使用 PDF.js ,可以直接从项目下载源码,然后在页面中引入 pdf.js ,就可以按照代码例子那些来使用了。

官方文档

我是在 Vue 项目中使用,所以我选择用 npm 安装的方式:

然后在 Vue 页面中引入 PDF.js,注意这里的引入方式,需要在包名后加上 /webpack ,否则会报错,原因我也没有去深入排查。

上面这段代码就是我项目 demo 中的一部分,可以实现读取 PDF 文档中的页面和文字,代码的末尾把第一页渲染到了 canvas 中,想要转成图片,只要把 canvas 中的内容转成 PNG 图片即可,区区十来行代码,非常简单。

除了提取文章和转成图片,PDF.js 还很多强大的功能,比如可以实现页面导航,预览时加入缩放、滚动、旋转和手写等注释以及实现打印、另存为等操作。

还有些付费软件的功能是压缩 PDF 文档,PDF.js 也可以压缩处理超大型的 PDF 文档,技术原理是把文档中没有使用的结构、元素和对象删除,大大简化文档,从而起到压缩的效果。

总之,想要在项目处理 PDF,PDF.js 是首选,并且目前没有看到类似好用并且强大的 JS 库,反而很多 PDF 工具都是基于 PDF.js 二次封装的。

Mozilla 组织本身是一个非营利性组织,成立以来一直致力于推动浏览器的良好发展,PDF.js 也不例外,是一个免费开源的项目,源码基于 Apache 2.0 许可托管在 Github 上,任何人都可以免费下载来使用,用在商业项目也完全没问题。

↓↓点击查看本次分享的网站。

前端实现最佳截图方案(上)

作者:蜀中亮子

转发链接:https://mp.weixin.qq.com/s/ghXm-dySERTFsXEWw79afA

旧闻重发,由于上一次的图片有些糊,这次分为上下两篇发送,不至于阅读压力太大

平时很多时候,需要把当前页面或者页面某一部分内容保存为图片分享出去,也或者有其他的业务用途,这种在很多的营销场景和裂变的过程都会使用到,那我们要把一个页面的内容转化为图片的这个过程,就是比较需要探讨的了。

首先这种情况,想到的实现方案就是使用canvas来实现,我们探索一下基本实现步骤:

  1. 把需要分享或者记录的内容绘制到canvas上;
  2. 把绘制之后的canvas转换为图片;

这里需要明确的一点就是,只要把数据绘制到canvas上,这就在canvas画布上形成了被保存在内存中的像素点信息,所以可以直接调用canvas的api方法toDataURL、toBlob,把已经形成的像素信息转化为可以被访问的资源uri,同时保存在服务器当中。这就很轻松的解决了第二步(把canvas转为图片链接),下面是代码的实现:

在实现了第二步的情况之下,需要关注的就是第一步的内容,怎么把内容绘制到canvas上,我们知道canvas的绘图环境有一个方法是ctx.drawImage,可以绘制部分元素到canvas上,包含图片元素Image、svg元素、视频元素Video、canvas元素、ImageBitmap数据等,但是对于一般的其他div或者列表li元素它是不可以被绘制的。

所以,这不是直接调用绘图的api就可以办到的,我们就需要思考其他的方法。在一般的实现上,比较常见的就是使用html2canvas,那么我们先来聊聊html2canvas的使用和实现。

html2canvas使用实现使用

首先看一下html2cavas的使用方法:

调用html2canvas方法传入想要截取的dom,执行之后,返回一个Promise,接收到的canvas上,就绘制了我们想要截取的dom元素。到这一步之后,我们再调取canvas转图片的方法,就可以对其做其他的处理。

这里它的html2canvas方法还支持第二个选项传入一些用户的配置参数,比如是否启用缓存、整个绘图canvas的宽高值等。

在这个转换的过程,在html2canvas的内部,是怎么把dom元素绘制到canvas上的,这是咱们需要思考的问题!

实现

首先咱们先献上一个内部的大致流程图:

对比着内部的流程图,就可以理一下整体的思路,整体的思路就是遍历目标节点和子节点,收集样式,计算节点本身的层级关系和根据不同的优先级绘制到画布中,下面基于这个思路,咱们深入一下整个过程:

  1. 调用html2canvs函数,直接返回一个执行函数,这一步没有什么;
  2. 在执行函数的内部第一步是构建配置项defaultOptions,在合并默认配置的过程中,有一个缓存的配置,它会生成处理缓存的方法;
    • 处理缓存类,对于一个页面中的多个不同的地方渲染调用多次的情况做优化,避免同一个资源被多次加载;
    • 缓存类里面控制了所有图片的加载和处理,包括使用proxy代理和使用cors跨域资源共享这两种情况资源的处理,同时也对base64和blob这两种形式资源的处理。比如如果渲染dom里面包含一个图片的链接类型是blob,使用的方式就是如下处理,然后添加到缓存类中,下次使用就不需要再重新请求。
  1. 在上一步生成了默认配置的情况之下,传入需要绘制的目标节点element和配置到DocumentCloner里面,这个过程会克隆目标节点所在的文档节点document,同时把目标节点也克隆出来。这个过程中,只是克隆了开发者定义的对应节点样式,并不是结合浏览器渲染生成特定视图最后的样式

如上这个.box的元素节点,定义的样式只有高度,但是在浏览器渲染之下,会对它设置默认的文字样式等等

  1. 基于上一步的情况,就需要把克隆出来的目标节点所在的文档节点document进行一次浏览器的渲染,然后在收集最终目标节点的样式。于此,把克隆出来的目标节点的document装载到一个iframe里面,进行一次渲染,然后就可以获取到经过浏览器视图真实呈现的节点样式。

在这个过程中,就可以通过`window.getComputedStyle`这个API拿到要克隆的目标节点上所有的样式了(包含自定义和浏览器默认的结合最终的样式);

  1. 目标节点的样式和内容都获取到了之后,就需要把它所承载的数据信息转化为canvas可以使用的数据类型,比如某一个子节点的宽度设置为50%或者2rem,在这个过程中,就需要根据父级的宽度把它计算成为像素级别的单位。同时对于每一个节点而言需要绘制的包括了边框、背景、阴影、内容,而对于内容就包含图片、文字、视频等。这个过程就需要对目标节点的所有属性进行解析构造,分析成为可以理解的数据形式。

如上图片这种数据结构和我注释一样,在它内部把每一个节点处理成为了一个container,它的上面有一个styles字段,这个字段是所有节点上的样式经过转换计算之后的数据,还有一个textNodes属性,它表示当前节点下的文本节点,如上,每一个文本的点的内容使用text来表示,位置和大小信息放置在textBounds中。对于elements字段存放的就是当前节点下除了文本节点外,其他节点转换成为的container,最后一个就是bounds字段,存放的是当前节点的位置和大小信息。可以看一下container这个类的代码:

基于这种情况,每一个container数据结构的elements属性都是子节点,整个节点就够构造成一个container tree。

  1. 在通过解析器把目标节点处理成特定的数据结构container之后,就需要结合canvas调用渲染方法了,我们在浏览器里面创建多个元素的时候,不同的元素设置不同的样式,最后展示的结果就可能不一样,比如下面代码:

这个代码的展示结果如下:

此时,如果修改了代码中.sta1元素节点的opacity属性为0.999,此时整个布局的层级就会发生大变化,结果如下:

这个是什么原因?因为canvas绘图需要根据样式计算哪些元素应该绘制在上层,哪些在下层。元素在浏览器中渲染时,根据W3C的标准,所有的节点层级布局,需要遵循层叠上下文和层叠顺序的标准。当某一些属性发生变化,层叠上下文的顺序就可能发生变化,比如上列中透明度默认为1和不为1的情况(对于如何形成一个层叠上下文此处不做深入讲解,可以自行研究)。

更加直白的理解就是一部分属性会使一些元素形成一个单独的层级,不同属性的层级有一定的排列顺序。如下就是我们对应的顺序:

  • 形成层叠上下文环境的元素的背景与边框(相当于整个文档的背景和边框)
  • 拥有负 z-index 的子层叠上下文元素 (负的越高越层叠上下文层级越低)
  • 正常流式布局,非 inline-block,无 position 定位(static除外)的子元素
  • 无 position 定位(static除外)的 float 浮动元素
  • 正常流式布局, inline-block元素,无 position 定位(static除外)的子元素(包括 display:table 和 display:inline )
  • 拥有 z-index:0 或者auto的子堆叠上下文元素
  • 拥有正 z-index: 的子堆叠上下文元素(正的越低层叠上下文层级越低)
  • 在正常的元素情况下,没有形成层叠上下文的时候,显示顺序准守以上规则,在设置了一些属性,形成了层叠上下文之后,准守谁大谁上(z-index比较)、后来居上(后写的元素后渲染在上面)

此处,在清楚了元素的渲染需要遵循这个标准的情况之下,canvas绘制节点的时候,就需要先计算出整个目标节点里子节点渲染时所展现的不同层级。先给出来内部模拟层叠上下文的数据结构StackingContext:

以上就是某一个节点对应的层叠上下文在内部所表现出来的数据结构。很多属性都会形成层叠上下文,不同的属性形成的上下文,有不同的顺序,所以需要对目标节点的子节点解析,根据不同的样式属性分配到不同的数组中归类,比如遍历子节点的container上的styles,发现opacity为0.5,此时会形成层叠上下文,然后就把它构造成为上下文的数据结构StackContext。添加到zeroOrAutoZIndexOrTransformedOrOpacity这个数组中,这样一个递归查看子节点的过程,最后会形成一个层叠上下文的树。

  1. 基于上面构造出的数据结构,就开始调用内部的绘图方法了,一下代码是渲染某一个层叠上下文的代码:

如上绘图函数中,如果子元素形成了层叠上下文,就调用renderStack,这个方法内部继续调用了renderStackContent,这就形成了对于层叠上下文整个树的递归。

如果子元素没有形成层叠上下文,而是正常元素,就直接调用renderNode或者renderNodeContent。这两个的区别是renderNodeContent只负责渲染内容,不会渲染节点的边框和背景色。

对于renderNodeContent这个方法就是渲染一个元素节点里面的内容,可能是正常元素、图片、文字、svg、canvas、视频、input、iframe。对于图片、svg、视频、canvas这几种元素,直接通过调用前文提到的api,对于input需要根据样式计算出绘图数据来模拟完成,文字就直接根据提供的样式来绘制。重点需要提一下的是iframe,如果需要绘制的元素中包含了iframe,就相当于我们需要重新绘制一个新的文档document,处理方法是在内部调用html2canvas的api,绘制整个文档。

以下为多个不同类型的元素的绘制方式:

对于文字的绘制方式

对于图片、SVG、canvas元素的绘制:

对于代码中调用renderReplacedElement方法内部的处理逻辑,就是调用canvas的drawImage方法绘制以上三种数据形式;

对于需要绘制的元素是iframe的时候,做的处理逻辑就如同重新调用整个绘制方法,重新渲染页面的过程:

对于单选或者多选框的处理情况,就是根据是否选中,来绘制对应状态的样式:

对于input输入框的情况,首先需要绘制边框,然后把内部的文字绘制到输入框中,超出部分需要剪切掉,所以需要使用到canvas的clip绘图API:

对于最后一种需要考虑的就是列表,对于li、ol这两种列表,都可以设置不同类型的list-style,所以需要区分绘制。

以上整个过程,就是html2canvas的整体内部流程,最后的操作都是不同的线条、图片、文字等等的绘制,概括起来就是遍历目标节点,收集样式信息,转化为绘制数据,并且根据一定的优先级策略递归绘制节点到canvas画布上。

实现

在捋顺了整个大流程的情况之下,咱们来看看html2canvas的一些缺点

不支持的一些场景

  1. box-shadow属性,支持的不好,因为对于canvas的阴影API没有扩散半径。所以对于样式的阴影支持不是特别好;
  2. 边框虚线的情况也不支持,这一点源码里面没有使用setLineDash,是因为大多数浏览器原本不支持这个属性,chrome也是64版本之后才支持这个属性;
  3. css中元素的zoom属性支持也不是也特别好,因为换算会出现问题;
  4. 计算问题是最大的问题!!!因为每一次计算都会有精确度的省略问题,比如父元素的宽度是100像素,子元素是父元素的30%,这个时候转化为canvas绘图单位像素的时候,就会有省略的过程,在有多次省略的情况之下,精确度就会变得不精确。并且还涉及到一些圆弧的情况,这种弧度的计算,最后模仿出来,都会有失去精确度的问题。对于正常的浏览器渲染节点,渲染的内部逻辑,直接是由浏览器处理,但是对于html2canvas的方案,需要先计算为像素单位,然后绘制到canvas上,最后canvas元素还要经过浏览器的一次处理,才能够渲染出来。这个过程不止是换算单位失去精度,渲染也会失去精度。

解决方案,详见下一篇

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

《》

作者:蜀中亮子

转发链接:https://mp.weixin.qq.com/s/ghXm-dySERTFsXEWw79afA

C语言开发手册(典藏版)高清PDF版

毋庸置疑,c语言从产生到现在的各个阶段,都是最重要和最流行的编程语言之一。熟悉和掌握c语言程序设计,已经成为程序员的一门必修课。本书言简意赅、通俗易懂,知识点覆盖全面,详细介绍了c语言的程序设计及最新的c语言编程技术。

需要的朋友关注后私信我,大量优质电子资料分享!

关注我,为你提供更多电子学习资料!

c语言开发手册(典藏版)》分4篇,共29章,分别介绍了c语言基础、c语言进阶、c语言的接口技术和现代c语言的扩展。首先,介绍了c语言及其开发环境,并全面介绍了c语言的基本语法知识;接着,详细讲解了c语言的一些高级程序应用;然后,介绍了c语言与其他主流编程语言的接口;最后,讲解了现代c语言的一些扩展应用和高级技术。《c语言开发手册(典藏版)》结构安排紧凑、讲解详细、实例丰富。c语言程序设计的初学者通过本书可以快速掌握c语言程序设计方法。同时,本书对现代c语言程序的接口和高级技术进行了全面讲解,对具有一定开发经验的设计人员也有非常好的参考价值。本书可以作为c语言初学者的入门教材,也可作为c语言程序员的参考手册,还可作为大中专院校学生及电脑培训班的参考书。目录:第1篇 c语言基础篇第1章 c语言概述 2c语言是现代应用最为广泛的编程语言,深受广大程序员的喜爱。本章将简要介绍c语言的产生发展、c语言的特点、标准及c语言流程等内容。并通过一个完整的例子演示c程序开发过程中的项目创建、源代码编写、编译及调试的全过程。同时,将分析c语言程序构成特点。

第2章 典型的c语言开发环境 25c语言的成功及大范围的应用也造就了丰富的c语言编译器。对于用户来说,学习c语言要紧密结合c编译器或者c集成开发环境来进行。程序员要想快速高效地开发c程序,必须首先熟悉c语言开发环境的使用。本章将介绍几种主流的c语言开发环境。

第3章 c语言数据类型 47应用程序一般在计算机的内存中运行,对各种数据进行操作。c语言中的数据具有不同的类型,用于不同对象的表示。数据是c语言基本的操作对象。本章将首先介绍内存中程序和数据的存储,然后将介绍c语言中各种数据类型及其特点。

第4章 运算符和表达式 87第3章介绍了c语言中的基本数据类型,这些是c语言最基本的操作对象。而在第4章中,读者将了解到最基本的操作方法,即运算符和表达式。在c语言中,通过运算符将常量、变量等操作对象组成表达式,而后,由表达式进一步构成c语句。可以说,运算符和表达式是c语言中最基本的操作方法。

第5章 c语句及流程控制结构 110第4章介绍了c语言中的运算符和表达式,这些是构成c语句的基本单元。c语句,即c语言中的操作命令,用于使计算机完成特定的功能。一条完整的语句必须以“;”结束。c语言的源程序是由一系列的语句组成的,这些语句可以完成变量声明、赋值和控制输入/输出等操作。由于计算机能识别的是机器指令,因此,编译系统将一条语句转换成若干条机器指令来执行。c语言中的语句包括说明语句、表达式语句、循环语句、条件语句、开关语句、复合语句、空语句和返回语句等,下面分别进行介绍。

第6章 格式化输入/输出 129使用计算机程序解决问题时,需要由用户输入数据,通过程序进行运算后,再输出结果。由此过程可以看到,程序中输入/输出占有相当重要的地位。在c语言中,所有的数据输入/输出都是由库函数完成的,因此都是函数语句。在前面各章的实例中,曾使用过printf()函数和scanf()函数进行数据的输出和输入。本章将详细介绍这两个函数的使用,同时,还将介绍其他一些用于输入和输出的函数。

第7章 数组 157在前面章节中介绍了c语言的基本数据类型,包括整型、字符型和实型。以这些基本数据类型为基础,c语言还提供几种构造数据类型。构造类型数据是由基本类型数据按一定规则组成的,数组就是其中一种构造数据类型。在程序中用循环结构可以很方便地处理数组。本章将详细介绍c语言中数组的使用。

第8章 函数 187使用c语言编程,就肯定会使用到函数。c语言允许用户使用一些编译环境自带的库函数,例如使用printf()函数输出变量的值,使用scanf()函数接收用户的输入等。合理使用库函数可以大大简化程序设计过程。同时,为了有利于程序的模块化,促进程序资源的共享。c语言也支持用户使用自定义函数。本章将详细介绍函数的概念、调用、作用域等相关知识。

第9章 指针 223指针是c语言中广泛使用的一种数据类型。利用指针可以操作各种基本的数据类型,以及数组等复合数据结构,甚至使用指针还可以访问函数。正确理解和使用指针对于成功进行c语言程序设计是至关重要的。指针是c语言最显著的特征,同时又是c语言最危险的特征。例如,在使用指针的程序中,常常因为用错指针导致程序出错,而这类错误却很难发现。更严重的是,对未初始化的指针进行操作可能会导致系统崩溃。

第10章 结构 277在实际的程序设计中,经常需要处理具有不同数据类型的一组数据。例如,在学生成绩统计表中,应该包含如下几项:姓名(字符型)、学号(整型或字符型)、年龄(整型)、性别(字符型)和成绩(整型或浮点型)。由于数组中各元素的类型和长度都必须一致,因此不能用一个数组存放这一组数据。在这种情况下,c语言中可以使用“结构”,这是一种构造数据类型,相当于其他高级语言中的记录类型。

第11章 联合、枚举和位域 299在c语言中,除了数组和指针外,还定义了联合和枚举两种聚合数据类型,并且可以进行类型说明和定义位域,这些是特殊形式的数据类型。下面分别进行讲解。

第12章 预处理 325c语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于c语言编译器,而不是c语言的组成部分。通过预处理命令可扩展c语言程序设计的环境。预处理命令通常在程序编译时进行一些符号处理,其并不执行具体的硬件操作。c语言中的预处理命令主要有宏定义指令、文件包含指令和条件编译指令,还有其他一些调试时使用的指令。本章将介绍预处理程序各命令的使用方法。

第13章 存储管理 345在大多数情况下,存储管理都是操作系统的功能。一般的程序设计语言不提供对内存的管理。而c语言提供了管理内存的相关函数,可实现内存的动态存储管理。这是c语言功能强大的一个表现,本章将介绍c语言的内存组织方式和动态存储管理。第2篇 c语言进阶篇

第14章 字符及字符串操作 358在实际的程序设计中,经常需要处理文本数据。在c语言中,文本数据按字符串格式保存。对于字符串,前面已经介绍过如何用字符数组保存字符串、用字符指针指向一个字符串常量、字符串的输入与输出函数等。在c语言的库函数中提供了丰富的处理字符及字符串的函数,本章将介绍这些函数的用法。

第15章 文件操作 404在前面各章的实例程序中,每次执行程序时,需要用户从键盘上输入数据,并将程序运行结果输出到屏幕上。在实际的应用中,可能需要将计算机的处理结果打印输出或保存到一个文件中,以供其他用户查看。当程序需要处理大量数据时,可能还需要从一个文件中读取这些数据。c语言提供了丰富的文件操作函数。本章将介绍操作文件的常用函数。

第16章 典型库函数应用 442前面曾经介绍过c语言中的字符及字符串处理函数。在实际应用中,其实还有很多其他方面的应用。例如数学运算或绘图程序中需要用到大量的数学函数,而另一些程序中可能需要处理日期和时间类的数据等。在c语言中,还提供了一些库函数用于数学和时间处理等。本章将介绍c语言程序设计中,这些典型的库函数应用。

第17章 模块化程序设计方法 464c语言提供支持模块化软件开发的功能,如c语言的程序整体由一个或多个函数组成,每个函数都具有各自独立的功能。这些函数还可分布在不同的源文件中,在需要时包含到c主程序中即可。c语言还允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。本章首先简单介绍模块化设计的概念,接着介绍c程序模块的结构,最后详细介绍c语言中不同存储类别变量的使用。

第18章 典型算法应用 487算法是对特定问题求解步骤的描述。对于同一个问题,可能用不同算法来求解,程序员可根据算法的可读性、效率等进行取舍。针对不同的数据保存方式,也会有不同的算法。本章将重点介绍c语言程序设计中的常用算法,也会穿插着简单介绍常用数据和数据结构的内容。

第19章 图形绘制 519到目前为止,本书所有的操作都是针对文本模式进行的。从本章开始将带领读者进入一个新的模式——图形模式,主要介绍图形显示的相关技术,包括各种图形的绘制及图形的编辑。本章介绍的是dos界面下的图形编译,将使用djgpp开发环境编写相关程序。

第20章 鼠标控制 540在前面的程序设计中,需要进行人机交互的时候都是采用键盘输入的。除键盘之外,鼠标是计算机中用得最多的输入设置。特别是windows操作系统的普及,使鼠标成为了计算机一个必备的输入设备。本章将介绍在c语言中控制鼠标的方法。第3篇 c语言接口篇

第21章 c语言与汇编的接口 556c语言的强大在于其和现代很多主流的编程语言都可以进行嵌套编程,各种编程语言都提供了和c语言的接口。从本章开始,将介绍目前主流的编程语言与c语言的接口方式及程序设计

。第22章 c语言与labview的接口 575虚拟仪器软件设计是目前比较流行的程序设计方法,其以图形化语言labview为主。通过labview可以方便、快捷地创建各种控制及数据采集系统。但在遇到labview不易实现的功能时,可通过在labview中调用c实现。本章介绍在labview中调用c的方法和配置cin节点的原则,并通过例子详细说明实现labview和c混合编程的过程。

第23章 c语言与matlab的接口 588matlab作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在各个领域发挥着越来越重要的作用。虽然matlab是一个完整的、功能齐全的编程环境,但在某些情况下,与外部环境的数据和程序的交互是非常必须而且有益的。而c语言是目前应用最广的编程语言,其功能丰富,使用灵活方便,目标程序效率高,既有高级语言的优点,又有低级语言的特点。本章将介绍c语言与matlab的接口。

第24章 c语言与javascript的接口 623javascript(简称js)在浏览器中的应用几乎是尽人皆知的。实际上,javascript技术也可以使用在非浏览器应用程序当中,从而让应用程序具有自动的脚本功能。本章将介绍一种功能非常强大的javascript-c引擎,通过其可以使c程序能够解释执行javascript脚本。

第25章 c语言硬件端口操作 643c语言既有高级语言的特点,又有低级语言的特点,这主要体现在c语言可以对硬件端口进行操作。在turbo c中可以直接对并行接口进行操作,在其他开发环境中可以通过嵌入汇编语言或者使用相应的库文件实现并行接口操作。本章以计算机并行接口的操作为例,向读者展示c语言的硬件端口操作能力。第4篇 c语言扩展篇

第26章 linux下的c语言开发 654linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点及其超越windows的安全性和稳定性。linux的大部分代码都是用c语言开发的,在linux操作系统中进行程序开发时首选程序设计语言为c语言。本章将简单介绍linux,以及在linux中使用c语言编写程序的方法。

第27章 单片机的c语言开发 686c语言是目前最为流行的编程语言,它的成功也延续到了其他领域。单片机便是一个重要的例子。在传统的单片机程序设计中,一般采用汇编语言实现。而后来,单片机的开发全面借鉴了c语言,从而进入了c语言开发单片机的时代。本章将介绍单片机的c语言开发及其与标准c语言的一些区别。

第28章 嵌入式系统c语言开发 706嵌入式系统(embeded system)是目前最为流行的一门技术。嵌入式系统不仅和一般的pc机上的应用系统不同,就是针对不同的具体应用而设计的嵌入式系统之间差别也很大。这就导致嵌入式系统的开发与pc机不同。目前使用最多的便是基于linux的嵌入式系统。本章将介绍嵌入式linux系统下的c语言开发工具和开发流程。

第29章 基于c语言的高性能并行gpu编程 744普通的c语言程序运行在cpu上,都是顺序执行的语句。目前,并行计算是高性能计算的一个方面。如何将c语言的简单易学、功能强大的特点与并行计算结合起来是一个研究方向。现在,普通用户可以通过显卡gpu运行c程序实现并行计算,提供程序的计算性能。本章将介绍如何使用c语言和nvidia的gpu进行并行编程。

需要的朋友关注后私信我,大量优质电子资料分享!

关注我,为你提供更多电子学习资料!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。