-
java求如何将一个word的二进制字符串转换为pdf格式?
2020-05-11 11:07:26通过freemarker 的word xml生成了word文件,现在想在下载的时候通过把模板获得的二进制流转变成html字符串再转成然后变成pdf下载出来 -
二进制XML存储方案
2008-09-25 09:48:50二进制XML存储方案BinXML实现方法 BinXML是我个人杜撰出来的名字,不知道是否合适,也不知道是否已存在类似的解决方案。在vcer.net上我将前一段时间的这个BinXML方案贡献出来,希望能够与广大vcer分享。 当时问题的... -
【优化版】Java文件上传数据库(并保存本地)、word转pdf并进行页面预览
2018-09-27 11:54:20上一篇文件上传【点击跳转】,是将路径等文件信息存进log_file临时表,内容二进制存入数据库Test表,这种逻辑是在调用数据库表Test内容展示时,判断文件为word(转换成pdf)还是pdf(直接展示)。 上一篇链接:链接地址...上一篇文件上传,是将路径等文件信息存进log_file临时表,内容二进制存入数据库Test表,这种逻辑是在上传文件到数据库的同时,将word转成pdf,内容以二进制存test表。页面预览调用的是test表的内容。
上一篇链接:链接地址。
下面进一步优化:
具体逻辑:删除原数据表Test,路径等文件信息依旧存log_file表。文件预览时,判断文件类型,如果为word类型,进行转换pdf展示;反之直接展示文件。
word类型条件满足后,进一步判断文件是否已经转换过(判断依据是根据路径下文件名查找相同文件名的pdf文件是否存在),如果同名的pdf文件存在,表示已经转换过,直接展示;如果不存在,word转换pdf,再展示。代码如下:
public void world(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { List<LogFile> files = terminalServiceImpl.world(); //用作实例展示,在这取得是数据库第二条信息:以word文件展示。 String path = files.get(1).getFilePath(); String filename=files.get(1).getFileName(); //1.根据文件后缀获取文件类型 File wordName=new File(filename); String fileName=wordName.getName(); String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length()); logger.info("------文件后缀名------"+fileTyle); //如果文件类型为word,需要先转换成pdf if(fileTyle.equals(".doc")||fileTyle.equals(".docx")){ //1.判断文件是否已经转换pdf,文件是否存在:文件前缀+.pdf(word是否已经转换过pdf),如果存在直接展示pdf File fileOne = new File(path); String caselsh = filename.substring(0,filename.lastIndexOf(".")); logger.info("------pdf文件名字------"+caselsh+"pdf.pdf"); // File fileIf = new File(fileOne+"\\" + caselsh+".pdf"); String filePath=(fileOne+"\\" + caselsh+"pdf.pdf"); File fileIf=new File(filePath); if(!fileIf.exists()){ String pdfFilePath = OpenOfficeUtil.wordToPDF(path,filename); System.err.println(pdfFilePath); FileInputStream fileInputStream = new FileInputStream(pdfFilePath); byte[] content = new byte[fileInputStream.available()]; fileInputStream.read(content); fileInputStream.close(); ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream(); if (servletOutputStream != null && content != null){ httpServletResponse.setContentType("application/pdf"); httpServletResponse.setContentLength(content.length); httpServletResponse.setHeader("Expires","0"); httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0"); httpServletResponse.setHeader("Pragma","public"); servletOutputStream.write(content); servletOutputStream.flush(); servletOutputStream.close(); } }else{ File file3 = new File(filePath); //获取pdf文件路径,内容做展示 byte[] resultE = new byte[(int) file3.length()]; FileInputStream fis = new FileInputStream(file3); fis.read(resultE); //read file into bytes[] fis.close(); ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream(); if (servletOutputStream != null && resultE != null){ httpServletResponse.setContentType("application/pdf"); httpServletResponse.setContentLength(resultE.length); httpServletResponse.setHeader("Expires","0"); httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0"); httpServletResponse.setHeader("Pragma","public"); servletOutputStream.write(resultE); servletOutputStream.flush(); servletOutputStream.close(); } } }else{ File file = new File(path); File file2 = new File(file+"\\" + filename); //获取pdf文件路径,内容做展示 byte[] result = new byte[(int) file2.length()]; FileInputStream fis = new FileInputStream(file2); fis.read(result); //read file into bytes[] fis.close(); ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream(); if (servletOutputStream != null && result != null){ httpServletResponse.setContentType("application/pdf"); httpServletResponse.setContentLength(result.length); httpServletResponse.setHeader("Expires","0"); httpServletResponse.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0"); httpServletResponse.setHeader("Pragma","public"); servletOutputStream.write(result); servletOutputStream.flush(); servletOutputStream.close(); } } }
-
第二天java学习笔记-第一个程序和变量等
2017-06-28 00:17:26创建一个记事本,并将其后缀名改为.java 打开编译写入如下代码: public class Test{ public static void main(String[] args) { System.out.println(“Hello, world!”); } } 然后在命令行中输入javac Test....1.Hello Word程序入门
- 创建一个记事本,并将其后缀名改为.java
- 打开编译写入如下代码:
public class Test{
public static void main(String[] args) {
System.out.println(“Hello, world!”);
}
}
然后在命令行中输入javac Test.java 和 java Test2.进制的转换
- 进制转换:十进制,二进制,八进制,十六进制(0-9A-F)
十转二:除以2反向取余直到为0
(2)二转十:用二进制的每一个乘以2的n次方。
(3)十转八:除八取余
(4)八转二:三位转
(4)十六和二:四位转
3.关键字
- 如果使用关键字作为标识符,编译器能提示错误。goto 是java的保留关键字,意思是java并没有使用goto,以后是否使用未定。
4.标示符
- 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。
- 不能以数字开头,不能是关键字
- 严格区分大小写
- 标识符的可以为任意长度
4.1. 命名规范
包名
多个单词组成时所有字母小写(例:package com.itcast)
类名和接口
多个单词组成时所有单词的首字母大写(例:HelloWorld)
变量名和函数名
多个单词组成时第一个单词首字母小写,其他单词首字母大写(例:lastAccessTime、getTime)。
常量名
多个单词组成时,字母全部大写,多个单词之间使用_分隔(例:INTEGER_CACHE)5.注释
- 多行注释:/**/
- 单行注释://
- 文档注释:/* /
6.变量
- 类型 byte,short,int,long,float,double,char,boolean。
- 在java变量的初始化一般要先申明后赋值; 基本数据类型一般在栈区域,引用数据类型分为栈区域 和堆区域
-
通过js做出的aes加密与java后台加密出来的不同 求帮助我js 应该修改哪里?
2020-04-08 16:57:54java后台将二进制转换成16进制 ``` /** * 将二进制转换成16进制 * @method parseByte2HexStr * @param buf * @return * @throws * @since v1.0 */ public static String parseByte2HexStr(byte ... -
Elasticsearch 如何处理 word pdf ?(Ingest Attachment Processor Plugin)
2019-11-16 12:04:05本文主要介绍如何使用ES插件将word/pdf等文档导入ES中以及如何使用JAVA API操作写入读取信息 Ingest Attachment Processor Plugin插件允许Elasticsearch通过使用Apache文本提取库Tika提取通用格式(例如PPT,XLS...本文主要介绍如何使用ES插件将word/pdf等文档导入ES中以及如何使用JAVA API操作写入读取信息
Ingest Attachment Processor Plugin插件允许Elasticsearch通过使用Apache文本提取库Tika提取通用格式(例如PPT,XLS和PDF)的文件附件。
源字段必须是base64编码的二进制。如果不想增加在base64之间来回转换的开销,则可以使用CBOR格式而不是JSON,并将字段指定为字节数组而不是字符串表示形式。然后,处理器将跳过base64解码。
安装
可以使用插件管理器安装此插件:
sudo bin/elasticsearch-plugin install ingest-attachment
该插件必须安装在群集中的每个节点上,并且每个节点必须在安装后重新启动。
可从 https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.4.2.zip下载此插件以进行脱机安装。
删除
可以使用以下命令删除该插件:
sudo bin/elasticsearch-plugin remove ingest-attachment
在删除插件之前,必须先停止该节点。
创建一个名称为attachment的管道,后面我们在操作文档的时候,需要使用到这个名称
PUT _ingest/pipeline/attachment
{
"description" : "Extract attachment information",
"processors" : [
{
"attachment" : {
"field" : "data"
}
}
]
}PUT attachment_index/_doc/1?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}
GET attachment_index/_doc/1JAVA代码如下:
package com.start.es;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import sun.misc.BASE64Encoder;
/**
*
* @author hsn
*
* 实现DOC/PDF/TXT 导入到ES
*
*/
@SuppressWarnings("restriction")
public class Es7TestAttachment {
public static void main(String[] args) throws IOException {
RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("127.0.0.1", 9200))
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectTimeout(5000) // 连接超时(默认为1秒)
.setSocketTimeout(60000);// 套接字超时(默认为30秒)
}
})
// .setMaxRetryTimeoutMillis(60000)//调整最大重试超时时间(默认为30秒)
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder
.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build());// 线程数
}
});
RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);// String base64Contentpath = pdfToBase641("d:\\TEST.pdf");
String base64Contentpath = fileDocToBase64("E:\\新建 DOC 文档.doc");// base64Contentpath =
// "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=";Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("data", base64Contentpath);
IndexRequest request = new IndexRequest("attachment_index").setPipeline("attachment")
.id("9").source(jsonMap);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);client.close();
}
@SuppressWarnings("restriction")
public static String UrlDocToBase64(String contentpath) throws IOException {
InputStream is = null;
String url = contentpath;
URL url2 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();byte[] data = null;
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = is.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new BASE64Encoder().encode(data).replace("\n", "").replace("\r", "");
}@SuppressWarnings("restriction")
public static String fileDocToBase64(String contentpath) throws IOException {
InputStream is = null;
String url = contentpath;
File file = new File(contentpath);
is = new FileInputStream(file);byte[] data = null;
try {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = is.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new BASE64Encoder().encode(data).replace("\n", "").replace("\r", "");
}}
Attachment options
Name Required Default Description field
yes
-
The field to get the base64 encoded field from
target_field
no
attachment
The field that will hold the attachment information
indexed_chars
no
100000
The number of chars being used for extraction to prevent huge fields. Use
-1
for no limit.indexed_chars_field
no
null
Field name from which you can overwrite the number of chars being used for extraction. See
indexed_chars
.properties
no
all properties
Array of properties to select to be stored. Can be
content
,title
,name
,author
,keywords
,date
,content_type
,content_length
,language
ignore_missing
no
false
If
true
andfield
does not exist, the processor quietly exits without modifying the document如果一次要插入多篇文档,请参考:https://www.elastic.co/guide/en/elasticsearch/plugins/7.4/ingest-attachment-with-arrays.html
更多代码请参考:https://github.com/hsn999/Elasticsearch_7_springboot_demo
-
JAVA上百实例源码以及开源项目
2016-01-03 17:37:40Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,... -
java开源包1
2013-06-28 09:14:34Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包12
2013-06-28 10:14:45Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
JAVA上百实例源码以及开源项目源代码
2018-12-11 17:07:42Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系... -
Java资源包01
2016-08-31 09:16:25Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包101
2016-07-13 10:11:08Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包11
2013-06-28 10:10:38Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包2
2013-06-28 09:17:39Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包3
2013-06-28 09:20:52Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包6
2013-06-28 09:48:32Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包5
2013-06-28 09:38:46Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包10
2013-06-28 10:06:40Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包4
2013-06-28 09:26:54Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包8
2013-06-28 09:55:26Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包9
2013-06-28 09:58:55Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java开源包7
2013-06-28 09:52:16Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端... -
java范例开发大全
2013-03-08 20:06:54实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列... -
java范例开发大全源代码
2011-10-30 23:31:51实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 ... -
Java范例开发大全 (源程序)
2011-04-27 07:47:22实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九... -
java范例开发大全(pdf&源码)
2013-07-04 13:04:40实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列... -
Java范例开发大全(全书源程序)
2013-04-05 11:50:26实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17... -
一个java正则表达式工具类源代码.zip(内含Regexp.java文件)
2009-10-25 12:01:41以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 ... -
Java web开发实战1200例(第1卷).(清华出版.卢瀚.王春斌).part3
2016-06-13 12:09:04介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用技术、JSP操作Word与Excel等。全书分6篇23章,共计600个实例和600个经验技巧。每...