c 解析word开源库 c word 开源
发布日期:2020-10-15摘要:java解析word文档有哪些方法java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不...
java解析word文档有哪些方法
java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。
经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。
rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。
----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。
----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。
1、采用字节的形式读取rtf模板内容2、将可变的内容字符串转为rtf编码3、替换原文中的可变部分,形成新的rtf文档主要程序如下:public String bin2hex(String bin) {char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = bin.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\"");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString(); }public String readByteRtf(InputStream ins, String path){ String sourcecontent =""; try{ ins = newFileInputStream(path); byte[] b= new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); } return sourcecontent ;}以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。
源代码部分详见附件。
运行源代码前提:c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。
package com;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;public class OperatorRTF {public String strToRtf(String content){char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = content.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\"");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString();}public String replaceRTF(String content,String replacecontent,intflag){String rc = strToRtf(replacecontent);String target = "";if(flag==0){target = content.replace("$timetop$",rc);}if(flag==1){target = content.replace("$info$",rc);}if(flag==2){target = content.replace("$idea$",rc);}if(flag==3){target = content.replace("$advice$",rc);}if(flag==4){target = content.replace("$infosend$",rc);}return target;}public String getSavePath() {String path = "C:\\YQ";File fDirecotry = new File(path);if (!fDirecotry.exists()) {fDirecotry.mkdirs();}return path;}public String ToSBC(String input){char[] c =input.toCharArray();for (int i =0; i < c.length; i++){if (c[i] == 32){c[i] = (char) 12288;continue;}if (c[i] < 127){c[i] = (char) (c[i] + 65248);}}return newString(c);}public void rgModel(String username, String content) {// TODO Auto-generated method stubDate current=new Date();SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");String targetname = sdf.format(current).substring(11,13) + "时";targetname += sdf.format(current).substring(14,16) + "分";targetname += sdf.format(current).substring(17,19) + "秒";targetname += "_" + username +"_记录.rtf";String strpath = getSavePath();String sourname = strpath+"\\"+"模板.rtf";String sourcecontent = "";InputStream ins = null;try{ins = new FileInputStream(sourname);byte[] b = new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new Strin...
什么叫开源的c语言库
s[0].s = 0;s[1]、PER是类型名.a + s[1].b = 1 + 5 = 62,当然也可以作为函数的返回值类型,故联合体aa的长度为6。
3,char c[6]。
4,所以结构体st占用的字节数为4 + 20 + 8 = 32个字节,即变量W占用332个字节空间。
int num;占用4个字节(因系统的不同而不同),就像char int double float 一样可以声明变量及同类型指针,其声明的变量可以作为函数的哑元或实元.a = 4;s[0].s = 0;所以t = s[0];s[0].b = 5;s[0],那么变量Z占用6个字节1、s[0],&t->y);占6个字节.c = 6;占用4个字节(因系统的不同而不同),float w[5];占用5*4 = 20个字节,double ave.a = 1;占用8个字节(因系统的不同而不同).c = 3、float x、可以这样引用data的成员t->x = 3.6,scanf("%f",s[0].b = 2;s[0]...
计算机图形学 开源的库有哪些,主要用于二维
高质量图形图表库 MathGL,C++图像处理库 ExactImage,begtostudy-imagelib,2D 图形引擎 Quad-Ren,Symbian图像处理扩展库 NokiaCV,开源图形库 CxImage;3D 图形开发库 Visualization Library,BMP图像处理库 bmplib,向量图形库 Picasso,摄像头图像捕捉 QuickCapture,绘图引擎 RRDtool,计算机视觉库 OpenCV,图像处理类库 CImg,2D图形库 AGG,Google 图形处理引擎 skia,SoftArt,OpenGL图形接口 glew,Google三维API O3D多了去了,C语言的JPEG操作库 OpenJPEG,2D/,太多了,Apache图像处理模块 mod_gfx,LibRaw,大图像处理工具 VIPS,OCR识别 OCRopus,C 图像操作库 Jhead,图形处理包 DevIL,OpenGL应用工具包 GLUT,3移动设备上的OpenGL OpenGL ES,C++向量图生成库 CreEPS,医学影像转换工具 XMedCon,计算机图形渲染库 Voreen,图形处理器开发环境 CUDA,C++视觉库 VXL,Magick++,Equalizer,Python图像处理 Mahotas,图形布局引擎 GLE,OpenCSG,图像处理和分析 Leptonica,QTeXEngine……,GLFW人脸识别 faceservice.cgi,libpng,图像识别类库 Tesseract OCR,开源图形API OpenGL,C++ PNG类库 PNGwriter,OpenGL的C++封装 D"Enfent EngineNVIDIA Scene Graph,C语言的EXIF库 libexif,Exiv2,Symbian绘图库 Cairo for Symbian OS,数据可视化库 Tulip,三维图形渲染引擎 OGRE,开源图形库 FreeImage,JPEG 图像压缩库 LibJPEG,图像处理库 GD,libQGLViewer,OpenGL工具包 Freeglut...
开源的c Hashtable库有哪些
1.静态链接库 打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选。
在这个空项目中,添加一个.h文件和一个.cpp文件。
名字我们起为static.h和static.cppstatic.h文件:[cpp] view plaincopy#ifndef LIB_H #define LIB_H extern "C" int sum(int a,int b); #endifstatic.cpp文件:[cpp] view plaincopy#include "static.h" int sum(int a,int b) { return a+b; }编译这个项目之后,会在debug文件夹下生成static.lib文件,这个就是我们需要的静态链接库。
下面说明如何调用静态链接库。
首先需要新建一个空项目,起名为test。
将之前static项目下的static.h和static.lib这个2个文件复制到test项目的目录下,并在工程中加入static.h文件。
新建一个test.cpp文件如下:[cpp] view plaincopy#include #include #include "static.h" #pragma comment(lib,"static.lib") int main() { printf("%d\n",sum(1,2)); system("pause"); return 0; }编译运行可得结果:3#pragma comment(lib,"static.lib"),这一句是显式的导入静态链接库。
除此之外,还有其他的方法,比如通过设置路径等等,这里不做介绍。
2.动态链接库和创建静态链接库一样,需要创建一个空的win32项目,选择dll选项。
创建dynamic.cpp和dynamic.h文件dynamic.h文件:[cpp] view plaincopy#ifndef DYNAMIC #define DYNAMIC extern "C" __declspec(dllexport)int sum(int a, int b); #endif DYNAMIC dynamic.cpp文件:[cpp] view plaincopy#include "dynamic.h" int sum(int a, int b) { return a+b; }编译这个项目,会在debug文件夹下生成dynamic.dll文件。
下面介绍如何调用动态链接库,这里讲的是显式的调用。
在刚才的test项目下,把static.lib和static.h文件删除,把dynamic.h和dynamic.dll复制到该目录下,并在项目中添加dynamic.h文件,修改test.cpp文件为:[cpp] view plaincopy#include #include #include #include "dynamic.h" int main() { HINSTANCE hDll=NULL; typedef int(*PSUM)(int a,int b); PSUM pSum; hDll = LoadLibrary(L"dynamic.dll"); pSum = (PSUM)GetProcAddress(hDll,"sum"); printf("%d\n",pSum(1,2)); system("pause"); FreeLibrary(hDll); return 0; }编译运行结果为:3特别提示:1.extern "C"中的C是大写,不是小写2.如果从VS2010中直接运行程序,lib和dll需要放到test项目的目录下;如果想双击项目test下的debug文件中的exe文件直接运行的话,需把lib和dll放入debug文件夹下。
高三化学题,求c项解析
所以他们这样解释就不合适. 我认为硝酸和块的粉的都能制取CO2,楼上打什么说的就是对的.(如果反应C是错误的. 因为CaCl2不能与CO2反应. 因为硫酸钙微溶. 可是硝酸钙是能容的.也许是硫酸写成了硝酸. 如果是这样,就相当于弱酸制取强酸) D正确因为ABC都有明显错误我认为这道题出的有问题
-
给我们打电话
7*24小时服务热线:1399999999
全国客服热线:400-0000-000 -
百度地图
福建省三明市 -
给我们发邮件
E-mail:[email protected]
在线沟通