日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Spire.pdf-使用学习记录

發(fā)布時(shí)間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spire.pdf-使用学习记录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

spire.pdf 使用學(xué)習(xí)記錄

    • 背景
    • 簡(jiǎn)介
    • 相似產(chǎn)品及特點(diǎn)
    • 官網(wǎng)地址
    • 功能實(shí)現(xiàn)
      • 切割pdf
        • 按每頁(yè)切割
        • 按指定頁(yè)切割
      • 將pdf轉(zhuǎn)成txt
      • 識(shí)別pdf中的篇章節(jié)生成對(duì)應(yīng)文本
      • 去除水印
      • 獲取書簽
      • 獲取每頁(yè)中圖片
      • 項(xiàng)目地址

背景

通過(guò)打印機(jī)將一本紙質(zhì)書轉(zhuǎn)為pdf的格式,以下所有操作都是在這個(gè)基礎(chǔ)上操作,最終目的生成n篇txt文件,每個(gè)txt名字規(guī)則是:起始頁(yè)_篇&章&節(jié) 內(nèi)容:是對(duì)應(yīng)切割的內(nèi)容;

簡(jiǎn)介

這是一款基于OCR框架的解析工具,擁有比價(jià)完整的Java 類庫(kù),及完善的API文檔,不但具備pdf的讀寫,還支持文本和圖片的提取,水印的添加,書簽的增刪改,表格的操作,同時(shí)還支持,將pdf轉(zhuǎn)化成word、HTML、XPS、SVG、等多種方式;當(dāng)然目前這類工具市面上有很多,不過(guò)通過(guò)比較最后選擇了spire.pdf ;目前這款項(xiàng)目共有兩個(gè)版本,一個(gè)是免費(fèi)版本一個(gè)是付費(fèi)版本,免費(fèi)版本如果只是處理簡(jiǎn)單的pdf是沒問題的,但是如果涉及到輸出為pdf則會(huì)只顯示前10頁(yè),第十一頁(yè)則是預(yù)定的購(gòu)買頁(yè)介紹,不過(guò)介于spire.pdf的完善性我最后還是選擇了他,至于10頁(yè)的問題,后面會(huì)拿出我的處理辦法,如果你是其他語(yǔ)言如.NET、Android、也可以使用這款產(chǎn)品;

相似產(chǎn)品及特點(diǎn)

  • PDFBox
  • itext
  • 百度
  • Tesseract 只能用于識(shí)別圖片,如果需要先將pdf轉(zhuǎn)為圖片

官網(wǎng)地址

https://www.e-iceblue.cn/Introduce/Free-Spire-PDF-JAVA.html

功能實(shí)現(xiàn)

前往官網(wǎng)下載jar包或者直接在maven上通過(guò)坐標(biāo)也可實(shí)現(xiàn),不過(guò)maven上的肯定沒有網(wǎng)頁(yè)下載的新;

<!-- 事先配置maven倉(cāng)庫(kù)路徑--> <repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories><!--maven中 spire.pdf鏡像依賴--> <dependencies><dependency><groupId> e-iceblue </groupId><artifactId>spire.pdf.free</artifactId><version>3.11.6</version></dependency> </dependencies>

切割pdf

按每頁(yè)切割

/***每一頁(yè)生成一個(gè)pdf文檔*/public static void splitPdfOneByOne(){PdfDocument pdf = new PdfDocument();int count = pdf.getPages().getCount();System.out.println(count);pdf.loadFromFile("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\book.pdf");pdf.split("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\output\\surgery_{0}.pdf",0);pdf.close();}

按指定頁(yè)切割

package com.wangcc.wangccocrdemo001.ocr;import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import com.spire.pdf.graphics.PdfMargins; import com.wangcc.wangccocrdemo001.util.FileUtil;import java.awt.geom.Point2D; import java.io.File;/*** 拆分文檔* 拆成每頁(yè)一個(gè)* 拆成每九頁(yè)一個(gè)(免費(fèi)版最多只能處理九頁(yè))* @author wangcc* @createTime 2021年08月31日 23:25:00*/ public class SubPDF {/*** 每九頁(yè)生成一個(gè)pdf**/public static void splitPdfMoreByOne(){String fileName = "C:\\Users\\wangchenchen\\Desktop\\boot-structure\\book.pdf";String outPath = "C:\\Users\\wangchenchen\\Desktop\\boot-structure\\outFile\\outPDFByMore";PdfDocument pdf = new PdfDocument();pdf.loadFromFile(fileName);int totalCount = pdf.getPages().getCount();PdfPageBase pageBase;PdfDocument document = new PdfDocument();int count = 1;for(int i = 41; i< 822;i++){System.out.println(i+"/"+822);pageBase = document.getPages().add(pdf.getPages().get(i).getSize(),new PdfMargins(0));pdf.getPages().get(i).createTemplate().draw(pageBase, new Point2D.Float(0,0));if(count % 9 == 0){String path = "\\splitPdf-"+i+".pdf";document.saveToFile(outPath+path);document = new PdfDocument();}count++;}if(document.getPages().getCount() >0){String path = "\\splitPdf-999999.pdf";document.saveToFile(outPath+path);}}/*** @Description //* @return void**/public static void splitPdfByNumber(Integer begin, Integer end,String filePath,String pdfOutPath){if(begin.equals("") || end.equals("") || filePath.equals("") || pdfOutPath.equals("")){System.out.println("傳入?yún)?shù)有空.......");return;}if(begin >= end){System.out.println("截止頁(yè)數(shù)不能小于或等于開始頁(yè)數(shù).......");return;}if(end-begin > 9){System.out.println("操作頁(yè)數(shù)最多為9頁(yè)");return;}File file = new File(pdfOutPath);if (file.exists()){FileUtil fileUtil = new FileUtil();fileUtil.DeleteFolder(pdfOutPath);}PdfDocument pdf = new PdfDocument();pdf.loadFromFile(filePath);int totalCount = pdf.getPages().getCount();PdfPageBase pageBase;PdfDocument document = new PdfDocument();for(int i = begin; i< end;i++){System.out.println(i+"/"+end);pageBase = document.getPages().add(pdf.getPages().get(i).getSize(),new PdfMargins(0));pdf.getPages().get(i).createTemplate().draw(pageBase, new Point2D.Float(0,0));String path = "\\surgery_"+i+".pdf";document.saveToFile(pdfOutPath+path);document = new PdfDocument();}} }

將pdf轉(zhuǎn)成txt

package com.wangcc.wangccocrdemo001.ocr;import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase;import java.io.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 讀取所有拆分文件生成txt文件* @author wangcc* @createTime 2021年08月31日 23:51:00*/ public class ReadAllSplitFile {public static String fileName = "C:\\Users\\wangchenchen\\Desktop\\boot-structure\\outFile\\outPDFByMore\\";public static String outPath = "C:\\Users\\wangchenchen\\Desktop\\boot-structure\\outFile\\readPdfFile.txt";public static void main(String[] args) {List<File> fileList = readAllFile();List<String> pdfFileNameList = new ArrayList<>();for (File file:fileList) {pdfFileNameList.add(file.getName());}Collections.sort(pdfFileNameList, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {int n1 = extractNumber(o1);int n2 = extractNumber(o2);return n1 - n2;}});File file = new File(outPath);if(file.exists()){file.delete();}for (String s:pdfFileNameList) {try {readFile(s);} catch (IOException e) {e.printStackTrace();}}}public static List<File> readAllFile(){String filePath = "C:\\Users\\wangchenchen\\Desktop\\boot-structure\\outFile\\outPDFByMore";ArrayList<File> fileList = new ArrayList<>();File file = new File(filePath);File[] files = file.listFiles();if(Objects.isNull(files)){return null;}for (File f:files) {if(f.isFile()){fileList.add(f);}}return fileList;}/*** @Param orderStr 排序:asc,des,不區(qū)分大小寫**/public static List<File> sortFileByName(List<File> fileList, final String orderStr){if(!orderStr.equalsIgnoreCase("asc") && !orderStr.equalsIgnoreCase("desc")){return fileList;}File[] files = fileList.toArray(new File[0]);Arrays.sort(files, new Comparator<File>() {@Overridepublic int compare(File o1, File o2) {int n1 = extractNumber(o1.getName());int n2 = extractNumber(o2.getName());if(orderStr == null || orderStr.length() < 1 || orderStr.equalsIgnoreCase("asc")){return n1 - n2;}else {//降序return n2 - n1;}}});return new ArrayList<File>(Arrays.asList(files));}public static int extractNumber(String name){int i;try {String s = name.replaceAll("[^\\d]", "");i = Integer.parseInt(s);}catch (Exception e){i = 0;}return i;}public static void readFile(String path) throws IOException {PdfDocument pdf = new PdfDocument();pdf.loadFromFile(fileName+path);PdfPageBase page;StringBuilder sb = new StringBuilder();Pattern pattern = Pattern.compile("(^(\\s*)第)(.{1,9})[章節(jié)卷集部篇回](\\s{1,10})(.{1,20})(\\s{1,10})");Pattern pattern1 = Pattern.compile("(\\s{0,10})([0-9][0-9]?[0-9]?[0-9]?)");//遍歷PDF頁(yè)面,獲取每個(gè)頁(yè)面的文本并添加到StringBuilder對(duì)象for(int i = 0;i < pdf.getPages().getCount();i++) {//System.out.println("循環(huán)遍歷pdf頁(yè)數(shù):當(dāng)前" + i + "頁(yè)/" + pdf.getPages().getCount() + "頁(yè)");page = pdf.getPages().get(i);int count = 0;String extractText = null;BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(page.extractText(true).getBytes())));while ((extractText = br.readLine())!= null){Matcher matcher = pattern.matcher(extractText);Matcher matcher1 = pattern1.matcher(extractText);/*末尾包含數(shù)字的*/if (count != 0 || matcher.find()){//System.out.println(extractText);if(!extractText.equals("") && !matcher1.find()){String s = extractText.replaceAll("\\s{5,9}", " ");sb.append(s+"\n");}}count++;}br.close();}FileWriter writer;try {//將StringBuilder對(duì)象中的文本寫入到文本文件writer = new FileWriter(outPath,true);System.out.println(sb.toString());writer.write(sb.toString());writer.flush();writer.close();sb.delete(0,sb.length());} catch (IOException e) {e.printStackTrace();}pdf.close();} }

識(shí)別pdf中的篇章節(jié)生成對(duì)應(yīng)文本

去除水印

package com.wangcc.wangccocrdemo001.ocr;import com.spire.pdf.PdfDocument;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;/*** 去除水印(未必都有用,主要是看水印的類型)* 水印有兩種* 1.文字,放在對(duì)應(yīng)的位置* 2.大圖片,png 背景透明* 一些特殊的水印原則上是去不掉的* @author wangcc* @createTime 2021年08月31日 23:46:00*/ public class ClearWaterMark {public static void main(String[] args) throws IOException {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\out\\splitPdf-18.pdf");BufferedImage bufferedImage = null;for (int i = 0; i<pdf.getPages().getCount();i++){bufferedImage = pdf.saveAsImage(i);bufferedImage.getSubimage(bufferedImage.getMinX(),15,bufferedImage.getWidth(),bufferedImage.getHeight()-15);File saveFile = new File("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\outImg\\" + i + ".png");if(!saveFile.exists()){saveFile.mkdirs();}ImageIO.write(bufferedImage,"PNG",saveFile);bufferedImage.flush();}} }

獲取書簽

package com.wangcc.wangccocrdemo001.ocr;import com.spire.pdf.PdfDocument; import com.spire.pdf.bookmarks.PdfBookmark; import com.spire.pdf.bookmarks.PdfBookmarkCollection;import java.io.FileWriter; import java.io.IOException;/*** 獲取書簽* @author wangcc* @createTime 2021年08月31日 23:47:00*/ public class getBookMake {public static void main(String[] args) {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\out\\splitPdf-18.pdf");PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();StringBuilder stringBuilder = new StringBuilder();/*獲取書簽*/GetBookMakeTitle(bookmarkCollection,stringBuilder);FileWriter writer;try {writer = new FileWriter("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\讀取的書簽.txt");writer.write(stringBuilder.toString());writer.flush();} catch (IOException e) {e.printStackTrace();}pdf.dispose();}public static void GetBookMakeTitle(PdfBookmarkCollection bookmarkCollection,StringBuilder stringBuilder){if(bookmarkCollection.getCount() > 0){for (int i = 0; i < bookmarkCollection.getCount(); i++){PdfBookmark bookmark = bookmarkCollection.get(i);stringBuilder.append(bookmark.getTitle());GetBookMakeTitle(bookmark,stringBuilder);}}} }

獲取每頁(yè)中圖片

package com.wangcc.wangccocrdemo001.ocr;import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Objects;/*** 提取每頁(yè)pdf中的圖片* @author wangcc* @createTime 2021年08月31日 23:41:00*/ public class ExtractImg {public static void main(String[] args) throws Exception{//加載測(cè)試文檔InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\demo.pdf")));PdfDocument pdf = new PdfDocument();//pdf.loadFromFile("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\demo.pdf");pdf.loadFromStream(inputStream);//定義一個(gè)int型變量int index = 0;//遍歷PDF每一頁(yè)for (int i= 0;i< pdf.getPages().getCount(); i ++){System.out.println(i+"/"+pdf.getPages().getCount());//獲取PDF頁(yè)面PdfPageBase page = pdf.getPages().get(i);//使用extractImages方法獲取頁(yè)面上圖片for (BufferedImage image : page.extractImages()) {if(Objects.nonNull(image)){//指定輸出圖片名稱File output = new File( String.format("C:\\Users\\wangchenchen\\Desktop\\boot-structure\\Img\\Image_%d.pdf", index++));//將圖片保存為PNG格式文件ImageIO.write(image, "PNG", output);}}}} }

項(xiàng)目地址

spire.pdf 下載

總結(jié)

以上是生活随笔為你收集整理的Spire.pdf-使用学习记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美精品 日韩 | 久久精精品久久久久噜噜 | 波多野结衣潜藏淫欲 | 九草在线视频 | 色成人免费网站 | 少妇一级淫片免费放2 | 蜜桃臀aⅴ精品一区二区三区 | 激情欧美亚洲 | 福利免费观看 | 国产在线区 | 日本激情视频在线观看 | 久久亚洲电影 | 亚洲欧美在线成人 | 婷婷开心激情网 | 玖玖在线播放 | 麻豆啪啪 | 最新网址av | 国产乱人 | 一区二区三区四区av | 成人特级片 | 黄色av三级| 麻豆传媒在线视频 | 国产又粗又长又黄 | 男女做爰猛烈吃奶啪啪喷水网站 | 国产一区二区三区免费播放 | 亚洲日本国产精品 | 美女av网址 | 成年人在线观看视频免费 | 69视频在线观看免费 | 99久久精品国产色欲 | 欧美国产第一页 | 特一级黄色大片 | 日韩激情在线 | 无码人妻aⅴ一区二区三区玉蒲团 | 蜜臀久久 | 蜜桃视频一区二区三区在线观看 | 黄色短视频在线播放 | 最近中文字幕在线观看视频 | 亚洲图片在线视频 | 在线成人免费电影 | 性色免费视频 | 日本欧美韩国国产精品 | 成人a区 | 亚洲久爱 | 五月天一区二区三区 | 亚洲国产精品99久久久久久久久 | 欧美草草 | 成人18视频在线观看 | 亚洲视频中文 | 另类少妇人与禽zozz0性伦 | 久久影院午夜理论片无码 | 亚洲蜜臀av乱码久久精品蜜桃 | 91碰碰| 日韩久久影院 | 色哟哟国产精品色哟哟 | 黄一区二区三区 | 国产午夜免费 | 猛1被调教成公厕尿便失禁网站 | 欧美精品久久久久久久自慰 | 欧美日韩3p| 国产一区久久久 | av资源共享| 亚洲自拍网站 | 成人av资源站 | 欧美人体视频 | 中文字幕在线乱 | 国产卡一卡二卡三 | 久草视频这里只有精品 | 永久免费精品视频 | 91黄瓜视频 | 欧美福利视频一区二区 | 日韩精品麻豆 | 国产理论片在线观看 | 国产婷婷色一区二区三区在线 | 国产又大又黑又粗免费视频 | 国产美女免费网站 | 日韩av男人天堂 | 国产999久久久 | 人妻精品久久久久中文字幕 | 在线免费视频一区 | 三上悠亚ssⅰn939无码播放 | 久久久久久久99 | 中文字幕有码在线视频 | 国产视频123区 | 69国产成人精品二区 | 日韩男女啪啪 | 欧美精品www | 中文国产字幕 | 亚洲av无码一区二区三区在线播放 | 日啪| 91资源在线播放 | 91成人免费在线视频 | 色妻影院 | 免费伊人 | 辟里啪啦国语版免费观看 | 欧美成人看片黄a免费看 | 国产精品一区二区久久毛片 | 日韩一区二区三区视频在线观看 | 亚洲欧洲天堂 |