Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
device-back
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
device-back
Commits
cf4dd5aa
提交
cf4dd5aa
authored
7月 20, 2021
作者:
133
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[添加] pdf 转png的util
上级
9d1e0213
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
151 行增加
和
0 行删除
+151
-0
pom.xml
dev-zxing/pom.xml
+15
-0
PDFUtils.java
...rc/main/java/com/tykj/dev/device/zxing/util/PDFUtils.java
+136
-0
没有找到文件。
dev-zxing/pom.xml
浏览文件 @
cf4dd5aa
...
...
@@ -26,6 +26,21 @@
<groupId>
com.tykj
</groupId>
<artifactId>
dev-task
</artifactId>
</dependency>
<dependency>
<groupId>
commons-logging
</groupId>
<artifactId>
commons-logging
</artifactId>
<version>
1.2
</version>
</dependency>
<dependency>
<groupId>
org.apache.pdfbox
</groupId>
<artifactId>
fontbox
</artifactId>
<version>
2.0.15
</version>
</dependency>
<dependency>
<groupId>
org.apache.pdfbox
</groupId>
<artifactId>
pdfbox
</artifactId>
<version>
2.0.15
</version>
</dependency>
</dependencies>
...
...
dev-zxing/src/main/java/com/tykj/dev/device/zxing/util/PDFUtils.java
0 → 100644
浏览文件 @
cf4dd5aa
package
com
.
tykj
.
dev
.
device
.
zxing
.
util
;
import
org.apache.pdfbox.pdmodel.PDDocument
;
import
org.apache.pdfbox.rendering.ImageType
;
import
org.apache.pdfbox.rendering.PDFRenderer
;
import
org.springframework.util.ResourceUtils
;
import
javax.imageio.ImageIO
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.UUID
;
/**
* @author zjm
* @version 1.0.0
* @ClassName PDFUtils.java
* @Description TODO
* @createTime 2021年07月20日 22:31:00
*/
public
class
PDFUtils
{
/**
* 将PDF按页数每页转换成一个jpg图片
* @param filePath
* @return
*/
public
static
String
pdfToImagePath
(
String
filePath
){
String
fileDirectory
=
filePath
.
substring
(
0
,
filePath
.
lastIndexOf
(
"."
));
//获取去除后缀的文件路径
String
imagePath
=
null
;
File
file
=
new
File
(
filePath
);
try
{
File
f
=
new
File
(
fileDirectory
);
if
(!
f
.
exists
()){
f
.
mkdir
();
}
PDDocument
doc
=
PDDocument
.
load
(
file
);
PDFRenderer
renderer
=
new
PDFRenderer
(
doc
);
int
pageCount
=
doc
.
getNumberOfPages
();
if
(
pageCount
>=
1
)
{
// for(int i=0; i<pageCount; i++){
// 方式1,第二个参数是设置缩放比(即像素)
// BufferedImage image = renderer.renderImageWithDPI(i, 296);
// 方式2,第二个参数是设置缩放比(即像素)
BufferedImage
image
=
renderer
.
renderImage
(
0
,
1
f
);
//第二个参数越大生成图片分辨率越高,转换时间也就越长
imagePath
=
ResourceUtils
.
getURL
(
"classpath:"
).
getPath
()
+
UUID
.
randomUUID
()
+
".png"
;
ImageIO
.
write
(
image
,
"PNG"
,
new
File
(
imagePath
));
// }
}
doc
.
close
();
return
imagePath
;
//关闭文件,不然该pdf文件会一直被占用。
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
imagePath
;
}
/**
* @Description pdf转成一张图片
* @created 2019年4月19日 下午1:54:13
* @param pdfFile
* @param outpath
*/
private
static
void
pdf2multiImage
(
String
pdfFile
,
String
outpath
)
{
try
{
InputStream
is
=
new
FileInputStream
(
pdfFile
);
PDDocument
pdf
=
PDDocument
.
load
(
is
);
int
actSize
=
pdf
.
getNumberOfPages
();
List
<
BufferedImage
>
piclist
=
new
ArrayList
<
BufferedImage
>();
for
(
int
i
=
0
;
i
<
actSize
;
i
++)
{
BufferedImage
image
=
new
PDFRenderer
(
pdf
).
renderImageWithDPI
(
i
,
130
,
ImageType
.
RGB
);
piclist
.
add
(
image
);
}
yPic
(
piclist
,
outpath
);
is
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
/**
* 将宽度相同的图片,竖向追加在一起 ##注意:宽度必须相同
* @param piclist 文件流数组
* @param outPath 输出路径
*/
public
static
void
yPic
(
List
<
BufferedImage
>
piclist
,
String
outPath
)
{
// 纵向处理图片
if
(
piclist
==
null
||
piclist
.
size
()
<=
0
)
{
System
.
out
.
println
(
"图片数组为空!"
);
return
;
}
try
{
int
height
=
0
,
// 总高度
width
=
0
,
// 总宽度
_height
=
0
,
// 临时的高度 , 或保存偏移高度
__height
=
0
,
// 临时的高度,主要保存每个高度
picNum
=
piclist
.
size
();
// 图片的数量
int
[]
heightArray
=
new
int
[
picNum
];
// 保存每个文件的高度
BufferedImage
buffer
=
null
;
// 保存图片流
List
<
int
[]>
imgRGB
=
new
ArrayList
<
int
[]>();
// 保存所有的图片的RGB
int
[]
_imgRGB
;
// 保存一张图片中的RGB数据
for
(
int
i
=
0
;
i
<
picNum
;
i
++)
{
buffer
=
piclist
.
get
(
i
);
heightArray
[
i
]
=
_height
=
buffer
.
getHeight
();
// 图片高度
if
(
i
==
0
)
{
width
=
buffer
.
getWidth
();
// 图片宽度
}
height
+=
_height
;
// 获取总高度
_imgRGB
=
new
int
[
width
*
_height
];
// 从图片中读取RGB
_imgRGB
=
buffer
.
getRGB
(
0
,
0
,
width
,
_height
,
_imgRGB
,
0
,
width
);
imgRGB
.
add
(
_imgRGB
);
}
_height
=
0
;
// 设置偏移高度为0
// 生成新图片
BufferedImage
imageResult
=
new
BufferedImage
(
width
,
height
,
BufferedImage
.
TYPE_INT_RGB
);
for
(
int
i
=
0
;
i
<
picNum
;
i
++)
{
__height
=
heightArray
[
i
];
if
(
i
!=
0
)
_height
+=
__height
;
// 计算偏移高度
imageResult
.
setRGB
(
0
,
_height
,
width
,
__height
,
imgRGB
.
get
(
i
),
0
,
width
);
// 写入流中
}
File
outFile
=
new
File
(
outPath
);
ImageIO
.
write
(
imageResult
,
"jpg"
,
outFile
);
// 写图片
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
public
static
void
main
(
String
[]
args
)
{
pdfToImagePath
(
"/Users/zjm/Desktop/1.pdf"
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论