PDF轉Word完全指南:3大方法滿足各種場景!

来源:https://www.cnblogs.com/pdf88/archive/2022/12/08/16963503.html
-Advertisement-
Play Games

就像黑火藥時代里突然誕生的核彈一樣,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轉Word

第二步:上傳PDF文件

通過選擇文件或者將PDf文件拖拽到上述區域(支持doc或者docx格式的word文件)

可以上傳1個或者多個PDF文件

PDF轉Word

第三步點擊轉換為Word按鈕

PDF轉Word

第四步下載

PDF轉Word

看到沒有,已經成功轉為為docx的word格式,裡面的文本、圖片都可以隨意編輯修改。Perfect!

PDF轉Word

線上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 Java類庫

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 JavaScript類庫

準確的說pdf.js更多的用戶前端的PDF展示和渲染,提供了pdf的讀寫api

地址 https://github.com/mozilla/pdf.js#online-demo

如果您要用來生成PDF,需要做大量的額外工作,不建議使用!

收費類庫:

說完了免費的開源類庫,下麵說說收費的PDF類庫。

開源類庫效果一般,處理複雜的圖標格式的PDF 有點力不從心,收費PDF是商業化軟體,可以處理複雜的格式文件,但一般費用比較高,用於商業化用途較多。

aspose

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-tools是一家瑞士的pdf解決方案服務商,提供了pdf sdk的整合方案!

PDF-tools支持30天免費試用,支持java .net c++等多種語言,大家可以下載下來自己試用下!

pdftron

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

foxit是一家專門從事PDF解決方案的供應商,為了實現成為PDF解決方案第一品牌的願景,Foxit滿足了三個不同細分市場的需求。

foxit的高性能庫使用最流行的開發人員語言和環境,為所有平臺的企業、移動和雲應用程式添加了強大的PDF功能。

結論:

PDF的解決方案,基本上就是上述三種,當然,每一種都有非常多的服務提供商,篇幅關係,沒有一一列出。

大家可以根據自己的需要,選擇不同的方案來使用!

如果是企業用戶,對數據安全比較敏感,不差錢,建議 用adobe官方的Acrobat Pro

如果是個人用戶,或者企業中對PDF處理不頻繁,線上的處理工具就足夠了,比如pdf88.cn提供了主流的PDF處理服務。

如果對PDF有海量自動化處理的訴求,可以用SDK或者API來滿足,小企業一般免費也差不多夠了,如果追求性能,那就去購買昂貴的商業SDK,或者使用破解版的!


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

-Advertisement-
Play Games
更多相關文章
  • bind1st和bind2nd只能用於二元函數對象 c++11 bind綁定器 返回的結果還是個函數對象 std::bind函數定義在頭文件functional中,是一個函數模板,它就像一個函數適配器,接受一個可調用對象(callable object),生成一個新的可調用對象來“適應”原對象的參數 ...
  • 1. time模塊 import time *一*#時間戳--》結構化時間--》格式化的字元串時間 res1=time.localtime(654126574) print(res1 ) #res1 time.struct_time(tm_year=1990, tm_mon=9, tm_mday=2 ...
  • 原文:【開源庫推薦】 #4 Poi-辦公文檔處理庫 - Stars-One的雜貨小窩 github倉庫apache/poi Apache POI是Apache軟體基金會的開放源碼函式庫,POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。.NET的開發人員則可以利用 ...
  • 1. 過期 key 處理 Redis 之所以性能強,最主要的原因就是基於記憶體存儲。然而單節點的 Redis 其記憶體大小不宜過大,會影響持久化或主從同步性能。 我們可以通過修改配置文件來設置 Redis 的最大記憶體: maxmemory 1gb 當記憶體使用達到上限時,就無法存儲更多數據了。為瞭解決這個 ...
  • laravel-route-notes laravel框架擴展,原生註解生成路由 優點是直接生成路由文件,不在運行中解析路由,提升效率 使用環境 [PHP] >= 8.0 [Laravel] >= 9.0 如何安裝 直接使用composer進行安裝: composer require --dev l ...
  • JZ36 二叉搜索樹與雙向鏈表 描述 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表 註意: 1.要求不能創建任何新的結點,只能調整樹中結點指針的指向。當轉化完成以後,樹中節點的左指針需要指向前驅,樹中節點的右指針需要指向後繼 2.返回鏈表中的第一個節點的指針 3.函數返回的TreeNo ...
  • 類模版std::function是一種通用、多態的函數封裝。std::function的實例可以對任何可以調用的目標實體進行存儲、複製、和調用操作,這些目標實體包括普通函數、Lambda表達式、函數指針、以及其它函數對象等。std::function對象是對C++中現有的可調用實體的一種類型安全的包 ...
  • Listener記憶體馬 0x01Lintener機制分析 Java Web 開發中的監聽器(Listener)就是 Application、Session 和 Request 三大對象創建、銷毀或者往其中添加、修改、刪除屬性時自動執行代碼的功能組件。 Listener 三個域對象 ServletCo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...