2017-11-28 01:57:24 PLSstree 阅读数 2558
  • 嵌入式开发知识体系与开发入门

    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 2.C语言相关知识

    11754 人正在学习 去看看 沈寒

PHP实现word(office文件)转PDF的功能并添加水印


开发目的:用PHP实现在linux服务器上在线批量转换office文件成PDF文件,常应用于文件管理较多的后台管理系统。

技术选择:
【PHP+OpenOffice+FPDI+FPDF】
首先要明确这一点,PHP是可以处理文件,但是PHP并不具备直接将office文件转换为PDF。最终实现这一功能还得借助服务器上的相关软件。例如Microsoft Office,不过此软件只能安装在windows的服务器上。所幸还有另外一款自由软件也具备相关的功能,并且还是跨平台的,这就刚好能满足绝大多数以Linux作为服务器的开发者的需求。本文也以此为基础介绍解决办法。(在以windows的服务器上还可以用PHP的COM组件去实现)

实现思路:
用PHP的系统函数,调用linux的相关命令,启用openoffice将office文件转换为PDF文档,并用FPDI和FPDF给PDF文件加上水印。


具体操作步骤

1、在linux服务器上安装openoffice 参考文章

openoffice的下载地址

  • 创建目录

[root@localhost /]# mkdir openoffice/

  • 通过filezilla或xftp将下载的openoffice文件上传上去

  • 解压

    [root@localhost /]# tar -zxvf /root/openoffice/Apache_OpenOffice_(安装包名称)

  • 进入解压生成的zh-CN文件夹并查看详情

[root@localhost /]# cd /zh-CN
[root@localhost zh-CN]# ls

会看到三个目录,licenses readmes RPMS

  • 进入到RPMS目录中并查看

[root@localhost zh-CN]# cd RPMS/

  • 执行安装命令

    [root@localhost RPMS]#rpm -ivh *.rpm

    到这一步就表示安装成功了(安装完成后安装的软件会在**/opt/**下面有一个openoffice4文件夹,得进入该文件夹下面的program才好执行相关的命令,当然这是对于新手而言)

2、启动程序需要安装JDK环境 参考文章

JDK的下载地址
注意:下载文件前先看清楚自己服务器的位数,不然下载了也无法使用!

  • 在usr目录下面建立java安装目录

    [root@localhost usr]# mkdir java

  • 将jdk-8u60-linux-x64.tar.gz拷贝到java目录下

  • 解压jdk到当前目录

[root@localhost java]# tar -zxvf jdk-8u60-linux-x64.tar.gz

  • 编辑配置文件,配置环境变量

[root@localhost java]# vim /etc/profile

	添加如下内容:JAVA_HOME根据实际目录来
	JAVA_HOME=/usr/java/jdk1.8.0_60
	CLASSPATH=$JAVA_HOME/lib/
	PATH=$PATH:$JAVA_HOME/bin
	export PATH JAVA_HOME CLASSPATH
  • 重启机器或执行命令:source /etc/profile(推荐)实在不好使时重启是最好的选择

     sudo shutdown -r now(重启)
    
  • 查看java的安装情况

     java -version(最开始就得执行一遍该命令,确保系统没有安装java)
    

    会得到如下信息:
    java version “1.8.0_60”
    Java™ SE Runtime Environment (build 1.8.0_60-b27)
    Java HotSpot™ Client VM (build 25.60-b23, mixed mode)

3、再次启动openoffice看是否好使 参考文章

  • 启动openoffice的命令

     [root@centos program]# ./soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
    

    注意:一定是在program文件夹下,注意soffice前面的相对路径

  • 查看端口号8100是否启动成功

     [root@VM_13_100_centos program]# netstat -nlp
    

这里不出意外会出现一系列的报错信息 <- _ <- 常见的错误及处理办法见下 ↓

  • 无java运行环境,以上第二点已经解决

  • 出现下面的错误

    /opt/openoffice4/program/soffice.bin: error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory

    错误原因:在/opt/openoffice4/program/下缺少libXext.so.6文件,可以去/usr/lib64 或者 /usr/lib查看有没有这个文件,如果有可以copy到program目录中,如果没有再安装

      # yum install libXext.x86_64
      
      安装完成后在那两个目录中找到并复制到program目录下,命令为:
     
     # cp -a usr/lib64/libXext.so.6 /opt/openoffice4/program/
    
  • 出现下面的错误

    /opt/openoffice4/program/soffice.bin: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory

     #yum install freetype 其余命令和上一个错误处理相同
    
  • 出现错误 no suitable windowing system found, exiting.

    错误原因:没有相关的windows窗口

     # yum groupinstall "X window System"
    

再次启动,应该是没有问题了,v(如果还是启动不了,先看是不是被防火墙限制了,记住,一定要重新启动系统!!!很重要!!!)

4、安装java的文件包管理工具jodconverter.2.2.2

在/usr目录下建立了一个wenku文件夹,当然这个是自定义的,可以放在任何位置,不过对于新手来说还是按照文档叙述来操作。避免入坑!将下载的zip文件放入wenku文件夹,用unzip命令解压。

转换文件的系统命令:

java -jar /usr/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar test.docx 1.pdf

test.doc为要转换文件的路径,1.pdf为输出文件路径

5、编写文件上传程序

然后编写文件上传程序(文件使用$_FILES接值,上传文件失败时很多原因都是服务器的文件夹权限问题),真正处理文件转换的时候得用到php的系统函数system,这里会有一个坑,默认的这种系统函数都是被禁止的,先通过phpinfo查询,然后解禁。另外如果调用系统函数失败,一方面可能是因为php的用户(www)的权限不够(很少),最关键的原因是用php的系统函数处理java指令的时候一定要用绝对路径!!!

p = "/usr/java/jdk1.7.0_80/bin/java -jar ". $jodconverter_path . ' ' . $source_dir . ' ' . $dist_dir;

exec($p, $log, $status);	

另外友情提醒一下刚上道的朋友,服务器上的文件名能不用中文就不要用中文,即使要上传中文名的文件至少也得做一下处理啊,文件编码真的坑不起的!唔~

大杉遇到过一次情况,前几位开发小哥哥直接将GBK的文件名传了上去,然后服务器是UTF-8的编码,用转换程序的时候一直提示失败,原因就是找不到文件。。。这种情况下可以在命令里面加 export LANG=en_US.UTF-8;

6、处理解决转换文件乱码的问题

对于用openoffice转换文件中文名乱码的问题可以参考这篇文章,这里就不再多做阐述了~ 主要手懒,改天有时间再加进来!

参考文章点击这里

7、用FPDI和FPDF给PDF文件加上水印

同样,手懒,改天再补充进来,有篇文章介绍的不错了。参考文章点击这里

原理:利用FPDI来加载已知的PDF文件,用FPDF对PDF文件进行加水印操作,如果处理失败,请查看相关文件夹的权限,是否具有可写权限!!!

第一篇博文,写于2017年11月28日 01:52

2008-12-09 16:29:00 lovehongyun 阅读数 8244
  • 嵌入式开发知识体系与开发入门

    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 2.C语言相关知识

    11754 人正在学习 去看看 沈寒

     最近excel在打开时出现 不能使用对象链接和嵌入 的错误(英文为:Cannot use object linking and embedding.),尝试修复、重装office、excel都未能解决,最后在网上查资料都说是因为病毒引起(被蠕虫感染),于是基本上打上了所有补丁,进行了几个小时的安全更新-_-! 以为问题可以解决了。结果发现不行。。。恶心死了!

最后在国外的一个论坛中找到了解决方案,但和他的不太一样(他的问题也出现在dcom的配置上)。在dcom的配置中,我配置了

Microsoft Excel Application——>Properties——>Identity

将选项选为The interactive user或The launching user.即可(1,2两项)

选则为This user (第3项)就会出现"不能使用对象链接和嵌入"(Cannot use object linking and embedding.)的错误

 

哎~~折腾了一下午!

2010-06-02 23:03:00 deng131 阅读数 12
  • 嵌入式开发知识体系与开发入门

    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 2.C语言相关知识

    11754 人正在学习 去看看 沈寒
SpiderMonkey作为 Javascript 脚本引擎,一般用来嵌入其他语言中。同时还有google v8.
http://www.aoeex.com/personal/2006/06/07/coding_with_spidermonkey.php

可以要让程序带有脚本控制功能,最经典的就是 Office的VBA了。
What SpiderMonkey does

The JavaScript engine compiles and executes scripts containing JavaScript statements and functions. The engine handles memory allocation for the objects needed to execute scripts, and it cleans up—garbage collects—objects it no longer needs.

编译器只是执行脚本,分配内存,回收内存垃圾。

The word JavaScript may bring to mind features such as event handlers (like onclick), DOM objects, window.open, and XMLHttpRequest. But in Mozilla, all of these features are actually provided by other components, not the SpiderMonkey engine itself. SpiderMonkey provides a few core JavaScript data types—numbers, strings, Arrays, Objects, and so on—and a few methods, such as Array.push. It also makes it easy for each application to expose some of its own objects and functions to JavaScript code. Browsers expose DOM objects. Your application will expose objects that are relevant for the kind of scripts you want to write. It is up to the application developer to decide what objects and methods are exposed to scripts.

在这里,要把Javascript 与其他组件分开来看。SpiderMonkey只是一个引擎,提供一些很少的功能。浏览器的dom ,windows,xmlhttprequest是由浏览器其他组件提供的功能。这样有利于程序暴露自已的对象。比如浏览器的DOM 。那写程序的时候就编写自己希望脚本控制的对象。但是,JavaScript是一种弱类型语言,数据类型怎么转换过去呢?

------------------------------------------------------------------------------------------------------------------------------------------

在SpiderMonkey的使用当中,最重要的要有3个元素:JSRuntime,JSContext,还要有一个全局对象 global object.

Runtimes. 通常一个程序只会存在一个runtime.所有的变量,对象,脚本还有context都只会存放在runtime里。

Contexts. 有点像线程,可以执行程序,获取变量,调用函数,但是不同的是这些并不是绑定在一起的。几乎所有的JSAPI函数都需要一个JSContext *作为第一个参数。

A JSContext, or context, is like a little machine that can do many things involving JavaScript code and objects. It can compile and execute scripts, get and set object properties, call JavaScript functions, convert JavaScript data from one type to another, create objects, and so on. Almost all JSAPI functions require a JSContext * as the first argument, just like most <stdio.h> functions require a FILE *.

There is a close association between contexts and threads. Simple, single-threaded applications can use a single context for everything. But each context can only do one thing at a time, so in a multithreaded application, only one thread at a time should use any given context. Such an application typically has one context per thread. JavaScript objects, on the other hand, are not permanently associated with the script, thread, or context that created them. They can be shared among many scripts or even many threads, as shown in the figure below.

[img]https://developer.mozilla.org/@api/deki/files/291/=Over3.gif[/img]

Global objects. Lastly, the global object contains all the classes, functions, and variables that are available for JavaScript code to use. Whenever JavaScript code does something like window.open("http://www.mozilla.org/"), it is accessing a global property, in this case window. JSAPI applications have full control over what global properties scripts can see. The application starts out by creating an object and populating it with the standard JavaScript classes, like Array and Object. Then it adds whatever custom classes, functions, and variables (like window) the application wants to provide; see Custom objects below. Each time the application runs a JS script (using, for example, JS_EvaluateScript), it provides the global object for that script to use. As the script runs, it can create global functions and variables of its own. All of these functions, classes, and variables are stored as properties of the global object.
2018-07-24 10:30:35 weixin_40602516 阅读数 1133
  • 嵌入式开发知识体系与开发入门

    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 2.C语言相关知识

    11754 人正在学习 去看看 沈寒

  CVE-2018-8174 是 Windows VBScript Engine 代码执行漏洞。

微软在4月20日早上确认此漏洞,并于5月8号发布了官方安全补丁,对该 0day 漏洞进行了修复,将其命名为 CVE-2018-8174

由于 VBScript 脚本执行引擎(vbscript.dll)存在代码执行漏洞,攻击者可以将恶意的VBScript嵌入到Office文件或者网站中,一旦用户不小心点击,远程攻击者可以获取当前用户权限执行脚本中的恶意代码。

漏洞复现:

kali:

win7:

项目地址:https://github.com/Sch01ar/CVE-2018-8174_EXP

生成带有恶意 VBscript 的 html 页面和 word 文档(具体参数可以参照下载文件中的readme,里面用法说的很具体)

在win7靶机中打开所生成的恶意html

发现kali收到了靶机的反弹shell:

freebuf上有利于MSF进行漏洞复现了,还提供了POC,还是很不错的。

链接如下:http://www.freebuf.com/vuls/173727.html

2010-03-09 12:47:00 iteye_4392 阅读数 14
  • 嵌入式开发知识体系与开发入门

    介绍什么是嵌入式技术,嵌入式技术在现实生活中的应用,嵌入式的开发过程,嵌入式学习的知识体系,步骤。 适合对象: 1.嵌入式相关专业学生 2.嵌入式学习爱好者 学习条件: 1.有计算机,电子相关基础知识 2.C语言相关知识

    11754 人正在学习 去看看 沈寒

嵌入式工程师是怎样炼成的(四)---- 奋发图强<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

记得那是2006年的第一场雪,比2005年来的稍晚了些。在2006年初,我们公司开始涉及嵌入式领域,其实就是开始涉及基于ARM的嵌入式式开发。原来一直搞单片机开发,上大学时帮助老师调点PIC的单片机程序这样的经历使我积累了点关于硬件的经验。

当时国内的嵌入式式开发还干干起步,基本上形成了两种力量,即:守旧派和时髦派。我算是在守旧派里混不下去了,不得不到时髦派里去混上一混,呵呵。

有一天,老板语重心长的对我说,:“我看你啊,单片机也搞不出什么名堂了,去学学ARM怎么样?”也许这就是老板的艺术吧,他觉的我单片机水平确实不怎么样,有不好意思直说,算了,让我改行了。其实这次改行彻底改变了的职业路线,也许当初要不是老板叫我改变,也许我现在还拿着protel8051在那里做简单的单片机开发呢。感谢cctvmtv和我经纪人,特别要感谢我的老板,哦对了要感谢的祖国培养的我,一定要感谢祖国,不然过两天领导又要说了。就知道感谢老板,要先感谢自己的祖国,呵呵玩笑话了。应该是在党的正确领导下,我“被”嵌入式了!

嵌入式说起来就三个字,其实只里面要掌握的知识太多了。作为一个有点单片机基础的人来说可能还好一点。别看我今年岁数小,其实我总结了,想要学嵌入式就是要电子专业的知识我要会,计算机专业的知识也要会。总结一下就是:看得懂电路;逛的了市场;买得起元件,去得了工厂;会写驱动,搞定应用;裁剪内核,精通系统。

面对这样的局面,我不得不拿出吃奶的力度,开始我新的学习生活。那是关于嵌入式技术的书还很少,不像现在萝卜白菜一大堆,随便一本书多说自己是经典。我先照例先找了一本号称经典的书先看着,主要讲了体系结构,那是的感觉是没看懂,但是也要使劲看,最后反正是搞明白了两件事:什么是体系结构;什么是指令系统。接下来我想起太爷爷的一句话:“实践是检验真理的唯一标准!”。这是我的老板又出场了,那是我们主要代理人家的开发板,我很有幸可以随便用到很多款开发板,这段经历让我的技术和经验得到了很大的提高,我每次在试验中尝试自己在书中看到的内容,渐渐的我对操作系统,驱动程序和应用开发有点认识。这期间我感受最深的是,嵌入式一定要动手,在实践中发现问题,然后查书或是网络解决问题。问题解决后的成就感那叫一个“爽”字了得。

现在是广告时间:刚才说到和开发板,我们自己也做了些开发板,基于2440arm9,又需要的可以联系我哦,我们共同成长!给我留言即可!

广告过后更精彩!

想和我成为好友,查看下面的来连接:

http://student.csdn.net/invite.php?u=111047&c=758a60d66d3a92d1

JSP笔记

阅读数 3

没有更多推荐了,返回首页