这个问题好像真的没办法解决,如果想从根本上解决IText生成文件过大的问题怕是只能自己生成PDF了,毕竟PDF也是一种语言。压缩的话,好像也没有办法使压缩过后仍然是PDF,目前压缩比比较高的方式好像是7z,不过压缩时间比较长
‘贰’ 求Java加密与解密的艺术-梁栋书籍电子版百度云资源
《Java加密与解密的艺术》网络网盘免费资源下载:
链接: https://pan..com/s/1g6zJczJGFdX7wCkb8AxB-Q
《Java加密与解密的艺术》是2010年机械工业出版社出版的图书,作者是梁栋。本书讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用。
‘叁’ java 解析pdf表格
最近在帮公司做工具,需要读取PDF中表格的数据。网上查了,大部分PDFBox读取的代码都大致相同,一行一行从头读到尾。尝试读取PDF表格的人可能会遇到表格有空数据时,列与列就会对不齐,这样就不能很好地进行数据的处理了。网上看到一个例子,用iText坐标精确读取的例子,参考以后出现了亚洲语种字体不支持,添加了语言包iTextAsian.jar导入字体后,结果发现打印的都是空格无法处理。后找到了PDFBox坐标读取的方法,相当给力。在此过程中了解到有很多人遇到了我这样的问题。所以写下来望对现在还未解决问题还有以后遇到此问题的人提供帮助。
上代码:
package com.pdfbox.util.test;
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.util.PDFTextStripperByArea;
import java.awt.Rectangle;
import java.util.List;
public class ExtractTextByArea
{
‘肆’ 不知道密码的pdf,怎么用java程序解密。
写个程序,暴力破解密码就可以了
不过这样的程序早就有,没必要再去写一个
‘伍’ java解析pdf文件,求大神提供代码,请注意是java语言的
给你提供一个参考例子,你可以在这个例子上试试,修改修改。也是解析PDF的。
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStreamWriter;
importjava.io.Writer;
importjava.net.MalformedURLException;
importjava.net.URL;
importorg.apache.pdfbox.pdmodel.PDDocument;
importorg.apache.pdfbox.util.PDFTextStripper;
publicclassPdfReader{
publicvoidreadFdf(Stringfile)throwsException{
//是否排序
booleansort=false;
//pdf文件名
StringpdfFile=file;
//输入文本文件名称
StringtextFile=null;
//编码方式
Stringencoding="UTF-8";
//开始提取页数
intstartPage=1;
//结束提取页数
intendPage=Integer.MAX_VALUE;
//文件输入流,生成文本文件
Writeroutput=null;
//内存中存储的PDFDocument
PDDocumentdocument=null;
try{
try{
//首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件
URLurl=newURL(pdfFile);
//注意参数已不是以前版本中的URL.而是File。
document=PDDocument.load(pdfFile);
//获取PDF的文件名
StringfileName=url.getFile();
//以原来PDF的名称来命名新产生的txt文件
if(fileName.length()>4){
FileoutputFile=newFile(fileName.substring(0,fileName
.length()-4)
+".txt");
textFile=outputFile.getName();
}
}catch(MalformedURLExceptione){
//如果作为URL装载得到异常则从文件系统装载
//注意参数已不是以前版本中的URL.而是File。
document=PDDocument.load(pdfFile);
if(pdfFile.length()>4){
textFile=pdfFile.substring(0,pdfFile.length()-4)
+".txt";
}
}
//文件输入流,写入文件倒textFile
output=newOutputStreamWriter(newFileOutputStream(textFile),
encoding);
//PDFTextStripper来提取文本
PDFTextStripperstripper=null;
stripper=newPDFTextStripper();
//设置是否排序
stripper.setSortByPosition(sort);
//设置起始页
stripper.setStartPage(startPage);
//设置结束页
stripper.setEndPage(endPage);
//调用PDFTextStripper的writeText提取并输出文本
stripper.writeText(document,output);
}finally{
if(output!=null){
//关闭输出流
output.close();
}
if(document!=null){
//关闭PDFDocument
document.close();
}
}
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
PdfReaderpdfReader=newPdfReader();
try{
//取得E盘下的SpringGuide.pdf的内容
pdfReader.readFdf("d:\b.pdf");
}catch(Exceptione){
e.printStackTrace();
}
}
}
‘陆’ java解析pdf文字顺序不对
修复你的PDF软件或者调整页面顺序。
java解析pdf获取pdf中内容信息:
第一种 使用开源组织提供的开源框架 pdfboxapi ; https://pdfbox.apache.org/
特点:免费,功能强大,解析中文或许会存在乱码,默认格式有点乱,没有国产解析的那么美化。
想要按行读取:可以按照指定的模板,对pdf进行修改添加删除等操作,总之操作很骚,很强大。
1.pdfbox 需要带入依赖。
2.代码。
第二种使用国产的框架 Spire.PDF包含两种版本。
1 免费版。
https://www.e-iceblue.cn/Downloads/Free-Spire-PDF-JAVA.html
友情提示: 免费版有 10 页的页数输出限制,在输出结果文档时只能输出前10页。将 PDF 文档转换为图片、Word、HTML、XPS等格式时,仅支持转换前 10 页。如超出限制,可升级到商业版,我们仅对免费版进行不定期维护。
2 商业版本。
https://www.e-iceblue.cn/Introce/Spire-PDF-JAVA.html。
api。
http://e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html。
特点:商业版本收费,免费版本有限制,可供开发人员调试,解析格式友好,解析结果是按照行显示,对pdf 图形 ,水印 ,文本, 条形码等添加增删改操作,总之个人感觉比pdfbox顺手,但就是收费啊,谁让咱公司没钱呢。
主要功能:
只需 Free Spire.PDF for Java,无需 Adobe Acrobat。
Free Spire.PDF for Java 是一款完全独立的 PDF 类库。它的运行环境无需安装 Adobe Acrobat 或其他任何第三方组件。
多样化的PDF文档操作功能。
Free Spire.PDF for Java 支持画文本、图片、表格、条形码、形状到 PDF,提取文本和图片,创建、填充和删除 PDF 表单,添加文本/图片水印到 PDF,添加、更新和删除 PDF 书签,操作超链接、附件和注释,以及添加图片/文本印章到 PDF 等。
文档信息设置。
Free Spire.PDF for Java 支持设置 PDF 文档信息,例如文档属性设置,偏好设置(页面方向,页面大小,缩放比例等)。
高质量的文档转换功能。
Free Spire.PDF for Java 支持将 PDF 文档高质量地转换为 Word、HTML、XPS、图片、SVG 和 PDF/A 格式,以及将 XPS 文档高质量地转换为 PDF 格式。
文档安全性设置。
Free Spire.PDF for Java 支持给 PDF 文档添加和验证数字签名,加密和解密 PDF 文档,修改 PDF 文档的安全权限,以及检测签名后的 PDF 文档是否被修改。
易于集成。
开发人员可以轻易地将 Free Spire.PDF for Java 集成到 Java(J2SE和J2EE)应用程序中。
‘柒’ java 怎么把pdf转成word
可以用PDFBox
至于生成word,用POI;HTML的话,自己解析就可以了
PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。
它具有以下特性:
1.将一个PDF文档转换输出为一个文本文件。
2.可以从文本文件创建一个PDF文档。
3.加密/解密PDF文档。
4.向已有PDF文档中追加内容。
5.可以从PDF文档生成一张图片。
6.可以与Jakarta Lucene搜索引擎的整合
‘捌’ java中如何实现对文件和字符串加密. 解密
DES 密钥生成,加解密方法,,你可以看一下
//DES 密钥生成工具
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class GenKey {
private static final String DES = "DES";
public static final String SKEY_NAME = "key.des";
public static void genKey1(String path) {
// 密钥
SecretKey skey = null;
// 密钥随机数生成
SecureRandom sr = new SecureRandom();
//生成密钥文件
File file = genFile(path);
try {
// 获取密钥生成实例
KeyGenerator gen = KeyGenerator.getInstance(DES);
// 初始化密钥生成器
gen.init(sr);
// 生成密钥
skey = gen.generateKey();
// System.out.println(skey);
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
oos.writeObject(skey);
oos.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param file : 生成密钥的路径
* SecretKeyFactory 方式生成des密钥
* */
public static void genKey2(String path) {
// 密钥随机数生成
SecureRandom sr = new SecureRandom();
// byte[] bytes = {11,12,44,99,76,45,1,8};
byte[] bytes = sr.generateSeed(20);
// 密钥
SecretKey skey = null;
//生成密钥文件路径
File file = genFile(path);
try {
//创建deskeyspec对象
DESKeySpec desKeySpec = new DESKeySpec(bytes,9);
//实例化des密钥工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
//生成密钥对象
skey = keyFactory.generateSecret(desKeySpec);
//写出密钥对象
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
oos.writeObject(skey);
oos.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static File genFile(String path) {
String temp = null;
File newFile = null;
if (path.endsWith("/") || path.endsWith("\\")) {
temp = path;
} else {
temp = path + "/";
}
File pathFile = new File(temp);
if (!pathFile.exists())
pathFile.mkdirs();
newFile = new File(temp+SKEY_NAME);
return newFile;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
genKey2("E:/a/aa/");
}
}
//DES加解密方法
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.SecretKey;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*制卡文件加/解密 加密方式DES
*/
public class SecUtil {
public static final Log log = LogFactory.getLog(SecUtil.class);
/**
* 解密
*
* @param keyPath
* 密钥路径
* @param source
* 解密前文件
* @param dest
* 解密后文件
*/
public static void decrypt(String keyPath, String source, String dest) {
SecretKey key = null;
try {
ObjectInputStream keyFile = new ObjectInputStream(
// 读取加密密钥
new FileInputStream(keyPath));
key = (SecretKey) keyFile.readObject();
keyFile.close();
} catch (FileNotFoundException ey1) {
log.info("Error when read keyFile");
throw new RuntimeException(ey1);
} catch (Exception ey2) {
log.info("error when read the keyFile");
throw new RuntimeException(ey2);
}
// 用key产生Cipher
Cipher cipher = null;
try {
// 设置算法,应该与加密时的设置一样
cipher = Cipher.getInstance("DES");
// 设置解密模式
cipher.init(Cipher.DECRYPT_MODE, key);
} catch (Exception ey3) {
log.info("Error when create the cipher");
throw new RuntimeException(ey3);
}
// 取得要解密的文件并解密
File file = new File(source);
String filename = file.getName();
try {
// 输出流,请注意文件名称的获取
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(dest));
// 输入流
CipherInputStream in = new CipherInputStream(
new BufferedInputStream(new FileInputStream(file)), cipher);
int thebyte = 0;
while ((thebyte = in.read()) != -1) {
out.write(thebyte);
}
in.close();
out.close();
} catch (Exception ey5) {
log.info("Error when encrypt the file");
throw new RuntimeException(ey5);
}
}
/**
* 加密
* @param keyPath 密钥路径
* @param source 加密前文件
* @param dest 加密后文件
*/
public static void encrypt(String keyPath, String source, String dest) {
SecretKey key = null;
try {
ObjectInputStream keyFile = new ObjectInputStream(
// 读取加密密钥
new FileInputStream(keyPath));
key = (SecretKey) keyFile.readObject();
keyFile.close();
} catch (FileNotFoundException ey1) {
log.info("Error when read keyFile");
throw new RuntimeException(ey1);
} catch (Exception ey2) {
log.info("error when read the keyFile");
throw new RuntimeException(ey2);
}
// 用key产生Cipher
Cipher cipher = null;
try {
// 设置算法,应该与加密时的设置一样
cipher = Cipher.getInstance("DES");
// 设置解密模式
cipher.init(Cipher.ENCRYPT_MODE, key);
} catch (Exception ey3) {
log.info("Error when create the cipher");
throw new RuntimeException(ey3);
}
// 取得要解密的文件并解密
File file = new File(source);
String filename = file.getName();
try {
// 输出流,请注意文件名称的获取
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(dest));
// 输入流
CipherInputStream in = new CipherInputStream(
new BufferedInputStream(new FileInputStream(file)), cipher);
int thebyte = 0;
while ((thebyte = in.read()) != -1) {
out.write(thebyte);
}
in.close();
out.close();
} catch (Exception ey5) {
log.info("Error when encrypt the file");
throw new RuntimeException(ey5);
}
}
}