Java pdf和jpg互轉(zhuǎn)案例
pdfbox: jpg轉(zhuǎn)pdf:
/**
* 使用pdfbox將jpg轉(zhuǎn)成pdf
* @param jpgStream jpg輸入流
* @param pdfPath pdf文件存儲(chǔ)路徑
* @throws IOException IOException
*/
public static void jpgToPdf(InputStream jpgStream, String pdfPath) throws IOException {
PDDocument pdDocument = new PDDocument();
BufferedImage image = ImageIO.read(jpgStream);
PDPage pdPage = new PDPage(new PDRectangle(image.getWidth(), image.getHeight()));
pdDocument.addPage(pdPage);
PDImageXObject pdImageXObject = LosslessFactory.createFromImage(pdDocument, image);
PDPageContentStream contentStream = new PDPageContentStream(pdDocument, pdPage);
contentStream.drawImage(pdImageXObject, 0, 0, image.getWidth(), image.getHeight());
contentStream.close();
pdDocument.save(pdfPath);
pdDocument.close();
}
pdfbox: pdf轉(zhuǎn)jpg:
static void pdfbox() throws IOException {
long start = System.currentTimeMillis();
//pdf路徑
URL url = new URL("file:///D:/1.pdf");
InputStream stream = URLUtil.getStream(url);
// 加載解析PDF文件
PDDocument doc = PDDocument.load(stream);
PDFRenderer pdfRenderer = new PDFRenderer(doc);
PDPageTree pages = doc.getPages();
int pageCount = pages.getCount();
for (int i = 0; i < pageCount; i++) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 200);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bim, "jpg", os);
byte[] datas = os.toByteArray();
// InputStream is = new ByteArrayInputStream(datas);
//jpg文件轉(zhuǎn)出路徑
FileUtil.writeBytes(datas, new File("d:/jpg/" + i + ".jpg"));
}
long end = System.currentTimeMillis();
long time = (end - start) / 1000;
System.out.println(StrUtil.format("pdf轉(zhuǎn)jpg耗時(shí): {}s", time));
}
icepdf: pdf轉(zhuǎn)jpg
Document document = new Document();
document.setUrl(new URL(pdfUrl));
int pageNum = document.getNumberOfPages();
for (int i = 0; i < pageNum; i++) {
// 目前僅支持1對(duì)1的pdf->jpg
if (i != 0) {
continue;
}
// 3、pdf -> jpg
BufferedImage bim = (BufferedImage) document.getPageImage(i,
GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX,
rotation, scale);
os = new ByteArrayOutputStream();
ImageIO.write(bim, "jpg", os);
// 4、jpg -> fdfs
byte[] datas = os.toByteArray();
InputStream is = new ByteArrayInputStream(datas);
補(bǔ)充知識(shí):Java實(shí)現(xiàn)對(duì)png圖片文件電子簽名操作
我就廢話不多說(shuō)了,大家還是直接看代碼吧~
/**
* 根據(jù)圖片像素位置添加用戶電子簽名
* @param imagePath 要操作的圖片路徑
* @param signImagePath 電子簽名圖片路徑
* @param outImagePath 合成后輸出圖片路徑
* @param width 像素位寬度
* @param height 像素位高度
*/
public static void syntheticPicture(String imagePath, String signImagePath,Integer width,Integer height, String outImagePath ) {
try {
BufferedImage big = ImageIO.read(new File(imagePath));
BufferedImage small = ImageIO.read(new File(signImagePath));
Graphics2D g = big.createGraphics();
//根據(jù)圖片像素位置粘貼帶電子簽名
g.drawImage(small, width, height, small.getWidth(), small.getHeight(), null);
g.dispose();
ImageIO.write(big, outImagePath .split("\\.")[1], new File(outImagePath ));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
以上這篇Java pdf和jpg互轉(zhuǎn)案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java 使用openoffice進(jìn)行word轉(zhuǎn)換為pdf的方法步驟
- Java使用iTextPDF生成PDF文件的實(shí)現(xiàn)方法
- Java 實(shí)現(xiàn)word模板轉(zhuǎn)為pdf
- java 后端生成pdf模板合并單元格表格的案例
- java 畫(huà)pdf用itext調(diào)整表格寬度、自定義各個(gè)列寬的方法
- java 用itext設(shè)置pdf紙張大小操作
- Java生成pdf文件或jpg圖片的案例講解
- 用Java驗(yàn)證pdf文件的電子章簽名
- 基于Java SWFTools實(shí)現(xiàn)把pdf轉(zhuǎn)成swf
- Java實(shí)現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的示例
- Java實(shí)現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼
- Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀
- Java 在PDF中添加騎縫章示例解析
- Java 在PDF中繪制形狀的兩種方法
- 教你怎么用Java通過(guò)關(guān)鍵字修改pdf
相關(guān)文章
springboot+vue制作后臺(tái)管理系統(tǒng)項(xiàng)目
本文詳細(xì)介紹了后臺(tái)管理使用springboot+vue制作,以分步驟、圖文的形式詳細(xì)講解,大家有需要的可以參考參考2021-08-08
java隨機(jī)數(shù)生成具體實(shí)現(xiàn)代碼
這篇文章主要為大家分享了java隨機(jī)數(shù)生成具體實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04
Java中面向?qū)ο蟮闹R(shí)點(diǎn)總結(jié)
Java是一門面向?qū)ο蟮恼Z(yǔ)言。對(duì)象是Java程序中的基本實(shí)體。除了對(duì)象之外Java程序同樣處理基本數(shù)據(jù)。下面這篇文章主要給大家總結(jié)了關(guān)于Java中面向?qū)ο蟮闹R(shí)點(diǎn),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02
Java線程池隊(duì)列PriorityBlockingQueue原理分析
這篇文章主要介紹了Java線程池隊(duì)列PriorityBlockingQueue原理分析,PriorityBlockingQueue隊(duì)列是?JDK1.5?的時(shí)候出來(lái)的一個(gè)阻塞隊(duì)列,但是該隊(duì)列入隊(duì)的時(shí)候是不會(huì)阻塞的,永遠(yuǎn)會(huì)加到隊(duì)尾,需要的朋友可以參考下2023-12-12
Kafka?日志存儲(chǔ)實(shí)現(xiàn)過(guò)程
這篇文章主要為大家介紹了Kafka?日志存儲(chǔ)的實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Java 17 更新后的 strictfp 關(guān)鍵字
strictfp 可能是最沒(méi)有存在感的關(guān)鍵字了,很多人寫(xiě)了多年 Java 甚至都不知道它的存在,strictfp,字面意思就是嚴(yán)格的浮點(diǎn)型。這玩意兒居然還有個(gè)關(guān)鍵字,可見(jiàn)其地位還是很高的。下面文章小編就帶大家詳細(xì)介紹其關(guān)鍵字,需要的朋友可以參考一下2021-09-09
java中的過(guò)濾器 Filter應(yīng)用小結(jié)
文章主要介紹了Java Web中的過(guò)濾器(Filter)的基本概念、生命周期、配置和應(yīng)用,過(guò)濾器可以攔截請(qǐng)求和響應(yīng),用于執(zhí)行一些預(yù)處理或后處理操作,如設(shè)置編碼、校驗(yàn)用戶身份等,感興趣的朋友一起看看吧2025-03-03

