pdf轉中文txt

来源:https://www.cnblogs.com/xnguo/archive/2019/04/13/10703157.html
-Advertisement-
Play Games

最近項目需要實現根據關鍵字搜索pdf內容,實現思路就是提取pdf文本,然後進行索引。 工具上選擇: IText 4.16之後採用agpl License,不能用作商用,而且轉換中文會有亂碼問題, pdfsharp 採用MIT License,許可權上沒有問題,但是轉換中文也會有亂碼, 最後決定採用xp ...


最近項目需要實現根據關鍵字搜索pdf內容,實現思路就是提取pdf文本,然後進行索引。

工具上選擇:

IText 4.16之後採用agpl License,不能用作商用,而且轉換中文會有亂碼問題,

pdfsharp 採用MIT License,許可權上沒有問題,但是轉換中文也會有亂碼,

最後決定採用xpdf.

官網地址:https://www.xpdfreader.com/download.html

需要下載對應的xpdf包,本人採用的windows x64 版本

此外還要下載中文字元集包:簡體中文字元集

包准備工作如下:

  1. 在合適目錄創建xpdf文件夾
  2. 將下載的包解壓並將bin64文件夾下的pdftotext.exe 拷貝到xpdf文件夾下
  3. 解壓中文字元集後進入文件夾繼續解壓xpdf-chinese-simplified.tar,在解壓後的xpdf-chinese-simplified文件夾拷貝到xpdf下
  4. 在xpdf文件夾下創建xpdf的字元載入文件xpdfrc
  5. 打開xpdf文件夾下的子文件chinese-simplified里的add-to-xpdfrc,將裡面內容copy到xpdfrc

將xpdf文件夾copy到項目合適位置實現功能,這裡只演示單個文件的轉換工作,本人是將xpdf訪問asp.mvc啟動工程的根目錄下進行測試的(文件路徑有空格一定要加雙引號)

 1   public ActionResult Search(string keyword)
 2         {
 3             var rooPath = Server.MapPath("~/");
 4             ProcessStartInfo startInfo = new ProcessStartInfo
 5             {
 6                 UseShellExecute = false,
 7                 WindowStyle = ProcessWindowStyle.Normal,
 8                 RedirectStandardInput = true,
 9                 RedirectStandardOutput = true,
10                 RedirectStandardError = true,
11                 CreateNoWindow = false,
12                 WorkingDirectory = string.Format("{0}xpdf", rooPath),
13                 //FileName = string.Format("{0}xpdf\\pdftotext.exe", rooPath)
14                 FileName ="cmd.exe"
15             };
16             //pdftotext.exe  -layout -enc GBK  你不知道的JavaScript(下捲).pdf
17             var arguments = string.Format("/C pdftotext.exe -layout -enc GBK \"{1}\" \"{2}\"", rooPath, rooPath + @"xpdf\1.pdf", rooPath + @"xpdf\JavaScript.txt");
18             //var arguments = string.Format(@"{0}1.pdf", rooPath);
19             startInfo.Arguments = arguments;
20             var ss = string.Empty;
21 
22             using (Process process = Process.Start(startInfo))
23             {
24                
25                 process.OutputDataReceived += new DataReceivedEventHandler((object sender, DataReceivedEventArgs e) =>
26                 {
27                     ss += e.Data;
28                 });
29                 process.BeginOutputReadLine();
30                 using (var error = process.StandardError)
31                 {
32                     ss += error.ReadToEnd();
33                 }
34                 //等待退出 
35                 process.WaitForExit();
36             }
37 
38             return Json(ss, JsonRequestBehavior.AllowGet);
39         }

error 可能會有報字體的錯誤,但不影響轉換,可以忽略:

Syntax Error: Unknown character collection 'DYNA-HK1'
Syntax Error: Unknown character collection 'DYNA-HK1'

下麵再附上工程目錄:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [TOC] 2、安裝(略) 預設情況下,elasticsearch 使用埠 9200 來訪問它的 REST API。如果有必要,該埠也可以配置 3、探索集群 3.1 The REST API 既然我們已經啟動並且運行了我們的節點(和集群),下一步是去瞭解如何與它通信。幸運的是,elasticse ...
  • [TOC] Elasticsearch 是一個高度可擴展且開源的全文檢索和分析引擎。它可以讓您快速、近實時地存儲、檢索以及分析海量數據。它通常用作那些具有複雜搜索功能和需求的應用的底層引擎或者技術。 下麵是 Elasticsearch 一些簡單的使用案例 : 你經營一家網上商店,允許你的客戶搜索你銷 ...
  • 原創不易,如需轉載,請註明出處 "https://www.cnblogs.com/baixianlong/p/10703558.html" ,否則將追究法律責任!!! Set(基於Map來實現的,不細說) HashSet(不重覆、無序、非線程安全的集合) 底層實現,源碼如下: public clas ...
  • 1、前言 因為公司項目中用的RabbitMq來做消息處理,自己以前沒有接觸過,所以想自學一下。然額,光安裝就花了6、7個小時才搞定,中間還換過一個版本,綜合國內外博客才最終將所有安裝中遇到的問題解決掉,最終將RabbitMq給運行起來,實屬不易啊。說實話,學習一個新的技術,在安裝軟體時就受阻,對自信 ...
  • 前幾篇準備寫完feign的源碼,這篇直接給出Feign的最佳實踐,考慮到目前網上還沒有一個比較好的實踐解釋,對於新使用spring cloud的同學會對微服務之間的依賴產生一些迷惑,也會走一些彎路。這裡給出目前本人在公司推薦的最佳實踐,供各位參考。 1,服務提供方在Facade層定義好介面信息,包括 ...
  • 繼承: 好處:1、提高代碼復用性; 2、讓類之間產生關係,給多態提供了前提; 父類、子類 Java中支持單繼承,不直接支持多繼承,但對C++的多繼承進行了改良 單繼承:一個子類只能有一個直接復類 多繼承:一個子類可以有多個直接父類(Java中不允許,進行了改良)會產生不確定性,不直接支持,因為父類中 ...
  • 配置環境:python 3.6 python編輯器:pycharm 整理成代碼如下: ...
  • 一、AQS概念 1、隊列同步器是用來構建鎖或者其他同步組件的基礎框架,使用一個int型變數代表同步狀態,通過內置的隊列來完成線程的排隊工作。 2、下麵是JDK8文檔中對於AQS的部分介紹 總結來說就是: ①子類通過繼承AQS並實現其抽象方法來管理同步狀態,對於同步狀態的更改通過提供的getState ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...