就像黑火藥時代里突然誕生的核彈一樣,OpenAI的ChatGPT語言模型的橫空出世,是人工智慧技術發展史上的一個重要里程碑。這是一款無與倫比、超凡絕倫的模型,能夠進行自然語言推理和對話,並且具有出色的語言生成能力。 ...
還不知道PDF怎麼轉Word嗎,本文將提供完整的PDF轉Word方案,包括離線、線上或者SDK API等各種方式,總有一款滿足您的需求。
什麼是PDF轉Word?
PDF是出版和圖形領域的軟體廠商Adobe制定的電子文檔格式標準。PDF轉Word就是把PDF文檔中的文字,圖片,表格,註釋等等文檔元素相對應的轉換成Word文檔中相對應的文檔元素。
所謂PDF轉Word就是指從PDF格式文檔中提取文字、圖形和及其它內容並放入Word或者其他格式文檔中(也可以是其他文件格式,如Excel/PPT/HTML/IMAGE等),無需重新排版,支持圖文混合排版,因此你就能重覆利用你的PDF文檔內容,在Word中再編輯或者重整佈局。
PDF文檔為什麼需要轉成Word?
PDF是一種適合分享傳播的文件格式,跨平臺打開能夠保持一致性,很受用戶歡迎。但是PDF文檔很難進行編輯修改,如果您需要對PDF進行編輯,就需要將PDF轉換為WORD,轉換後用WPS或者Office就可以進行編輯修改了。
如果您對PDF的文件格式感興趣,可以看下PDF科普文章,詳細瞭解一下。
PDF轉Word的三大方法
PDF轉Word一般來說有三種方式,下麵我們就來一一介紹下吧,您可以根據需要選用不同的方式。
1. 傳統PC端軟體PDF轉Word
本方法就是下載一個PDF軟體到桌面,並安裝。安裝之後就可以離線使用了。
你可以下載Adobe Acrobat Pro試用版 ,有7天的免費試用期,Acrobat Pro一次性費用大概1800元左右
Aodbe公司是PDF標準的制定者,Acrobat Pro功能強大,除了貴沒有太多毛病
適用人群和場景:
如果您對PDF處理的準確性和性能要求很高,高頻對PDF進行各種處理,對數據安全要求頁比較高,而且不差錢,可以購買Acrobat Pro
Acrobat Pro的PDF轉Word功能比較強大,轉換的效果還原度很高,基本上可以做到99.9%的還原效果
2. 線上轉換或者小程式轉換PDF文檔
線上的PDF處理,就是在網站或者小程式上直接上傳PDF文件,線上處理完畢之後,下載到本地。
目前線上的PDF處理有免費和收費兩種,收費的一般開放一個小額的試用,比如1兆大小,10頁等,然後引導到收費。免費的一般沒有太多限制。
拿 pdf88.cn上的PDF轉Word來說,這是一個完美免費的PDF轉Word工具,只需要4步就能實現PDF線上轉換。
第一步:打開PDF工具箱 PDF轉Word
第二步:上傳PDF文件
通過選擇文件或者將PDf文件拖拽到上述區域(支持doc或者docx格式的word文件)
可以上傳1個或者多個PDF文件
第三步點擊轉換為Word按鈕
第四步下載
看到沒有,已經成功轉為為docx的word格式,裡面的文本、圖片都可以隨意編輯修改。Perfect!
線上PDF轉Word的效果如何?
目前來說,只有Adobe原生的Acrobat軟體對PDF的編輯、轉Word是最完美、損耗最少的。
但是Acrobat只適合不差錢的大公司,一般用戶都會選擇免費的PDF轉換器來進行轉換,我們來對比下各種PDF格式下轉換的效果如何(圖片、表格、註釋等)
我們來對比下不同PDF下的word轉換效果
1. 純文本+圖片類型的
上面的示例就是純文本+圖片格式的,轉換效果還是不錯的,字體大小、顏色、佈局、圖片位置等,基本無差別的
2.帶有簡單表格的PDF文檔
怎麼樣,效果還是不錯的吧,完美還原了表格,100%可編輯
3.複雜表格和混合編排的PDF
看完了純文本和表格,我們來看下更複雜點的例子
具體轉換效果對比可以查看上一篇文章
適用人群和場景:
線上PDF轉換Word需要線上使用,一般是對數據安全沒有非常強的訴求,同時非高頻的PDF處理編輯,而且對價格比較敏感,那麼PDF88的各種處理工具,能夠滿足您大部分的PDF處理訴求。
3. 技術派:三方類庫或者API實現PDF轉Word
技術派的PDF處理就是用第三方類庫或者OpenAPI,對pdf進行處理,一般是需要批量自動的處理PDF文件時,通過類庫和API就能大量的減少時間。目前PDF的處理類庫較多,我們選擇幾個有代表的來說下。
開源類庫
pdfbox Java類庫
PDFBox是一個BSD許可下的源碼開放項目,為開發人員讀取和創建PDF文檔而準備的純Java類庫。
地址在 https://pdfbox.apache.org/ 社區比較活躍,更新速度較快
代碼示例
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import java.io.*; public class PDFToWord { public static void main(String[] args) { try { //input file String pdfFile = "test.pdf"; //load pdf PDDocument doc = PDDocument.load(new File(pdfFile)); //get pdf number int pagenumber = doc.getNumberOfPages(); String fileName="word.doc"; File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } FileOutputStream fos = new FileOutputStream(fileName); Writer writer = new OutputStreamWriter(fos, "UTF-8"); PDFTextStripper stripper = new PDFTextStripper(); stripper.setSortByPosition(true); stripper.setStartPage(1); stripper.setEndPage(pagenumber); stripper.writeText(doc, writer); writer.close(); doc.close(); System.out.println("pdf轉word done!"); } catch (IOException e) { e.printStackTrace(); } } }
pdfbox 轉換效果一般,對複雜的PDF格式,還原度較差,感興趣的可以自己測試下!
iText是著名的開放源碼的站點sourceforge一個項目,是用於生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化為PDF文件。
iText的安裝非常方便,下載iText.jar文件後,只需要在系統的CLASSPATH中加入iText.jar的路徑,在程式中就可以使用iText類庫了。或者直接在mavan中引入坐標
地址 https://github.com/itext/itext7
同時itext也有收費的版本 還有一個.net的itext版本
代碼
import java.io.File; import java.io.FileOutputStream; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; import com.lowagie.text.Document; import com.lowagie.text.Paragraph; import com.lowagie.text.rtf.RtfWriter2; public class ReadPdfFile { public static void main(String[] args) { try { Document document = new Document(); File file = new File("file.doc"); if(!file.exists()) file.createNewFile(); RtfWriter2.getInstance(document, new FileOutputStream("file.doc")); System.out.println("file created"); document.open(); PdfReader reader = new PdfReader("test.jar"); int n = reader.getNumberOfPages(); System.out.println("total no of pages:::"+n); String s=""; for(int i=1;i<=n;i++) { s=PdfTextExtractor.getTextFromPage(reader, i); System.out.println("string:::"+s); System.out.println("===================="); document.add(new Paragraph(s)); document.newPage(); } document.close(); System.out.println("completed"); } catch (Exception de) {} } }
準確的說pdf.js更多的用戶前端的PDF展示和渲染,提供了pdf的讀寫api
地址 https://github.com/mozilla/pdf.js#online-demo
如果您要用來生成PDF,需要做大量的額外工作,不建議使用!
收費類庫:
說完了免費的開源類庫,下麵說說收費的PDF類庫。
開源類庫效果一般,處理複雜的圖標格式的PDF 有點力不從心,收費PDF是商業化軟體,可以處理複雜的格式文件,但一般費用比較高,用於商業化用途較多。
Aspose 是一家致力於辦公組件的提供商,數千機構都有用過aspose組件,包括微軟、IBM、普華永道、安永、杜邦、希爾頓酒店、讀者文摘、美洲銀行、波音、西門子等。Aspose目前旗下一共有41個控制項,Aspose.Total是它的總套包。
能夠用來處理PDF的是Aspose.PDF 工具包,支持java .net C++等,價格昂貴,一個授權1199美金起!
import com.aspose.pdf.DocSaveOptions; import com.aspose.pdf.Document; import com.aspose.pdf.SaveFormat; import com.aspose.pdf.examples.Utils; public class ConvertPDFToDOCOrDOCXFormat { public static void main(String[] args) { runExamples(); } public static void runExamples() { // The paths to resources and output directories. String testID = "com/aspose/pdf/examples/AsposePdf/Conversion/pdftodoc/"; String dataDir = Utils.getDataDir(testID); String outputDir = Utils.getOutDir(testID); System.out.println("============================"); System.out.println("Example savingToDoc start"); savingToDoc(dataDir, outputDir); System.out.println("Example savingToDoc end"); System.out.println("============================"); System.out.println("Example savingToDOCX start"); savingToDOCX(dataDir, outputDir); System.out.println("Example savingToDOCX end"); System.out.println("============================"); System.out.println("Example usingTheDocSaveOptionsClass start"); usingTheDocSaveOptionsClass(dataDir, outputDir); System.out.println("Example usingTheDocSaveOptionsClass end"); } public static void savingToDoc(String dataDir, String outputDir) { // Open the source PDF document Document pdfDocument = new Document(dataDir + "input2.pdf"); // Save the file into Microsoft document format pdfDocument.save(outputDir + "TableHeightIssue.doc", SaveFormat.Doc); } public static void savingToDOCX(String dataDir, String outputDir) { // Load source PDF file Document doc = new Document(dataDir + "input.pdf"); // Instantiate Doc SaveOptions instance DocSaveOptions saveOptions = new DocSaveOptions(); // Set output file format as DOCX saveOptions.setFormat(DocSaveOptions.DocFormat.DocX); // Save resultant DOCX file doc.save(outputDir + "savingToDOCX.docx", saveOptions); } public static void usingTheDocSaveOptionsClass(String dataDir, String outputDir) { // Open a document // Path of input PDF document String filePath = dataDir + "source.pdf"; // Instantiate the Document object Document document = new Document(filePath); // Create DocSaveOptions object DocSaveOptions saveOption = new DocSaveOptions(); // Set the recognition mode as Flow saveOption.setMode(DocSaveOptions.RecognitionMode.Flow); // Set the Horizontal proximity as 2.5 saveOption.setRelativeHorizontalProximity(2.5f); // Enable the value to recognize bullets during conversion process saveOption.setRecognizeBullets(true); // Save the resultant DOC file document.save(outputDir + "usingTheDocSaveOptionsClass.doc", saveOption); } }
pdf-tools是一家瑞士的pdf解決方案服務商,提供了pdf sdk的整合方案!
PDF-tools支持30天免費試用,支持java .net c++等多種語言,大家可以下載下來自己試用下!
PDFTron SDK是一個技術平臺,為任何軟體提供PDF、CAD和MS Office功能。這是構建文檔功能的一種更簡單、更快的方式,使您的開發人員更高效,用戶更快樂。和Aspose類似
代碼案例
Convert.WordOutputOptions wordOutputOptions = new Convert.WordOutputOptions(); // Optionally convert only the first page wordOutputOptions.setPages(1, 1); // Requires the Structured Output module Convert.toWord(filename, output_filename, wordOutputOptions);
foxit是一家專門從事PDF解決方案的供應商,為了實現成為PDF解決方案第一品牌的願景,Foxit滿足了三個不同細分市場的需求。
foxit的高性能庫使用最流行的開發人員語言和環境,為所有平臺的企業、移動和雲應用程式添加了強大的PDF功能。
結論:
PDF的解決方案,基本上就是上述三種,當然,每一種都有非常多的服務提供商,篇幅關係,沒有一一列出。
大家可以根據自己的需要,選擇不同的方案來使用!
如果是企業用戶,對數據安全比較敏感,不差錢,建議 用adobe官方的Acrobat Pro
如果是個人用戶,或者企業中對PDF處理不頻繁,線上的處理工具就足夠了,比如pdf88.cn提供了主流的PDF處理服務。
如果對PDF有海量自動化處理的訴求,可以用SDK或者API來滿足,小企業一般免費也差不多夠了,如果追求性能,那就去購買昂貴的商業SDK,或者使用破解版的!