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

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

    12416 人正在学习 去看看 沈寒

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

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

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

    12416 人正在学习 去看看 沈寒
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.
2015-04-23 16:02:33 yx1105842102 阅读数 2000
  • 嵌入式开发知识体系与开发入门

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

    12416 人正在学习 去看看 沈寒

一、          基本介绍

在线预览的总体思路:实验室承接了一个网站开发项目,甲方提出需要一个文档在线预览需求。经过讨论,由于swf类型的文档是直接能在浏览器中查看的,初步设想是利用openoffice将word类型转变为pdf文件,然后利用swftools工具将pdf转为swf类型。

WordPress:一个以php开发的博客类型网站构架,功能比较全面。

OpenOffice:一套跨平台的办公室软件套件,在实现在线预览功能中,我们主要使用其中的一个com组件来进行转换。

SWFTools:一个多类型转换工具,我们利用这个将pdf转变为swf。

 

二、          安装及应用代码

OpenOffice和SWFTools的安装比较简单,按照软件提示步骤走就行。

安装完毕后,在wp-admin/includes/file.php(具体哪个文件根据你自己的项目开发来定)里添加如下两个函数:

function word2pdf($doc_url,$output_url){ 

$osm = newCOM("com.sun.star.ServiceManager")

                  ordie ("Please be sure that OpenOffice.org is installed.\n"); 

                  $args= array(MakePropertyValue("Hidden",true,$osm)); 

                  $oDesktop= $osm->createInstance("com.sun.star.frame.Desktop"); 

                  $oWriterDoc= $oDesktop->loadComponentFromURL($doc_url,"_blank", 0,$args); 

                  $export_args=array(MakePropertyValue("FilterName","writer_pdf_Export",$osm)); 

                  $oWriterDoc->storeToURL($output_url,$export_args); 

                  $oWriterDoc->close(true); 

function pdf2swf($pdf_url, $swf_url){

                  $re='';

                  $command= '"E:\swftools\pdf2swf.exe" -t "'.$pdf_url.'" -sflashversion=9 -o "'.$swf_url.'"';

         exec($command,$re,$re);}

然后在你项目的对应位置调用这两个函数进行转换即可,一般也是在file.php文件中的wp_handle_upload函数内进行调用,放在上传成功后进行处理。在这里需要注意填写正确的路径。

 

三、          问题解决

(1)权限分配问题

问题往往不会这么简单就能解决,一般在安装openoffice中会遇到一个权限分配的问题。刚开始,我们在安装了openoffice后发现调用其组件com.sun.star.ServiceManager往往会失败,问了很久度娘,才发现问题的解决方案:

打开系统“组件服务”-》计算机-》我的电脑-》DCOM配置-》OpenOfficeService Manager (Ver 1.0),鼠标右键打开,更改安全设置,在“安全”里将所有权限都更改为“自定义”,这里包括“启动和激活权限”、“访问权限”、“配置权限”都更改为“自定义”,这里虽然看起来“配置权限”似乎不需要改。然后点击“编辑”-》“添加”-》“高级”-》“立即查找”,找到Everyone成员,添加后,赋予其全部权限。这样将“启动和激活权限”、“访问权限”、“配置权限”都添加了Everyone用户后,再点击“标识”,选择交互式用户,重启下电脑即可解决问题。

 

(2)在Windows Server 2008或Windows7下将openoffice注册到服务里

如果没有把openoffice注册为自动启动的服务的话,每一次重启系统可能都需要手动输入命令soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 来添加到服务里。网上以前的资料都是利用windows server 2003 resource kit来进行,但是对于WindowsServer 2008或Windows7这个小工具并不兼容。最终解决办法仍然是利用了windows server 2003 resource kit,不过只是利用了其中的一个叫srvany.exe的小程序。解决方法:

1.  下载windowsserver 2003 resource kit,由于版本兼容问题,此版本不能使用,需要的是其中一个文件。点击安装,将srvany.exe复制到服务器的某个位置。

2.  控制台cmd输入:sc create"openofficeserver" binPath= "\"C:\Program Files\OpenOffice.org 4\program\soffice.exe\" -headless-accept=\"socket,host=127.0.0.1,port=8100;urp;\"-nofirststartwizard" DisplayName= "OpenOffice 3.4.1 Server"start= auto        

3.  打开注册表regedit,找到

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\openofficeserver

1.      复制ImagePath的值到txt文档,然后将ImagePath修改为srvany.exe所在的位置的值,如"c:\somepathto\srvany.exe"。

2.      新建一个项(key),命名为Parameters。这个类似于一个文件夹。在Parameters里新建一个字符串值Application,值为刚刚拷贝到txt文档里的原来的ImagePath值。

3.      在服务里找OpenOffice 3.4.1 Server服务,启动,如果能成功启动表示设置成功。

最后成果图:


2012-07-02 14:53:00 chenqiechun3408 阅读数 37
  • 嵌入式开发知识体系与开发入门

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

    12416 人正在学习 去看看 沈寒

讲流程图嵌入Office的方法,以word为例:

1 绘制流程图,并保存到文件

2 在word中用文件的形式插入对象(刚保存的流程图文件)

3 可以看到流程图图示信息

4 如果还需要编辑,选中图并且右键,编辑或者打开图

5 修改完图片后不要保存(保存只会另存新文件),关闭当前编辑窗口

6 此时退回到word界面,即可看到改动后的流程图


替代Visio的免费软件(非开源)—— EDraw Mind Map。这款国产免费软件,终结了流程图软件“好用则价高,免费则难用”的局面。它体积小巧、功能丰富、作为免费软件,完全可以满足普通用户绘制流程图的需求。

Edraw MindMap 安装文件仅7.8MB
安装后多大呢?表面看,共占用空间55MB。但实际上,很多是示例、素材和帮助,真正运行所需的exe和dll,不超过 8MB。比起它丰富的功能来,算是很小巧了。

而其功能,则非常丰富。善用佳软认为,如下5方面的特性,使它成为了出色的软件。
- 易用的标准绘图、格式化工具
- 预装了丰富的素材库
- 良好的集成性,可插入office及其他OLE对象
- 多标签、多页面的组织形式
- 输出为通用的网页、pdf、exe格式

 

 

整理思维,创作灵感,提高生产力, 完全免费

亿图思维导图软件是一款免费思维导图创作软件,包括样式丰富的智能符号,链接向导和经典实例。

使用它您将极大地提高设计速度,更好的专注于思考, 容易去构建思维导图,大脑风暴,工程时间线,灵感设计,项目分析。

我们相信,不仅您将受益该软件带来的便利,您身边的人也会受益!


软件特色

  1. 智能链接向导,无需手动繁琐的连接符号

  2. 大量高质量的符号,形状,模板库

  3. 纸张尺寸自由扩展并带页支持

  4. 支持符号超链接

  5. 多种主题,样式让您可以随时一键更改整个设计

  6. 简单复制粘贴就可以一次插入多个主题。

  7. 集成了Office,PDF,让导出分享更加容易。

  8. 所见即所得的打印

  9. 免费软件,无插件

  10. 和亿图图示专家采用统一操作方式和内核,升级有保障

升级政策


免费还是免费。

转载于:https://my.oschina.net/alphajay/blog/64597

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

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

    12416 人正在学习 去看看 沈寒

嵌入式工程师是怎样炼成的(四)---- 奋发图强<?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笔记

阅读数 7

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