PDF 工具

如何在 C++ 中查看 PDF 文件

發佈 2023年8月2日
分享:

PDF 檔案因其能夠在不同平台間保留格式而成為文件交換的廣泛使用格式。 在各種應用程式中,以程式方式讀取 PDF 文件的內容變得非常有價值。

在本文中,我們將學習如何使用 Xpdf 命令行工具在 C++ 中查看 PDF 文件中的文本。 Xpdf 提供了一套用於處理 PDF 文件的命令行工具和 C++ 函式庫,包括文本提取功能。 通過將 Xpdf 集成到我們的 C++ PDF 檢視器程式中,我們可以高效地查看 PDF 文件中的文本內容並以程式方式進行處理。

Xpdf - C++ 庫及命令行工具

Xpdf是一個開源軟體套件,提供一系列工具和函式庫用於處理 PDF 檔案。 它包括各種命令行工具和 C++ 庫,這些工具和庫實現了與 PDF 相關的功能,如解析、渲染、打印和文本提取。 Xpdf 的命令行工具也提供了直接從終端查看 PDF 文件的方法。

Xpdf 的其中一個關鍵組件是 pdftotext,它主要以從 PDF 文件中提取文字內容而聞名。 然而,當與其他工具如 pdftopspdfimages 結合使用時,Xpdf 允許用戶以不同方式查看 PDF 內容。 pdftotext 工具在從 PDF 中提取文本信息以進行進一步處理或分析時非常有價值,並且它提供了選擇從哪些頁面提取文本的選項。

先決條件

在開始之前,請確保您已具備以下先決條件:

  1. 您的系統上安裝了 C++ 編譯器,例如 GCC 或 Clang。 我們將使用Code::Blocks IDE為此目的。

  2. 已安裝 Xpdf 命令列工具並可從命令列存取。下载 Xpdf並安裝適合您環境的版本。 之後,將 Xpdf 的 bin 目錄設置到系統環境變數的路徑中,以便從文件系統的任何位置訪問它。

建立 PDF 檢視器專案

  1. 開啟 Code::Blocks: 在你的電腦上啟動 Code::Blocks IDE。

  2. 建立新專案: 從上方選單點擊「File」,然後從下拉選單中選擇「New」。 然後,從子菜單中點擊「專案」。

  3. 選擇專案類型: 在「從範本建立新專案」視窗中,選擇「主控台應用程式」,然後點擊「前往」。 然後選擇語言「C/C++」,然後點擊「下一步」。

  4. 輸入專案詳細資料: 在「專案標題」欄位中,為您的專案取名。(例如,“PDFViewer”). 選擇您想要儲存專案檔案的位置,然後點擊「下一步」。

  5. 選擇編譯器: 選擇您要用於項目的編譯器。 Code::Blocks 預設應該會自動偵測到您系統上可用的編譯器。 如果不是,請從列表中選擇合適的編譯器,然後點擊「完成」。

在 C++ 中查看 PDF 文本的步骤

包含必要的標頭

首先,將所需的標頭檔案新增到我們的 main.cpp 檔案中:

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstdio>
C++

設定輸入和輸出路徑

string pdfPath = "input.pdf";
string outputFilePath = "output.txt";
string pdfPath = "input.pdf";
string outputFilePath = "output.txt";
C++

main 函數中,我們宣告了兩個字串:pdfPathoutputFilePathpdfPath 存儲輸入 PDF 文件的路徑,outputFilePath 存儲提取文本將保存為純文本文件的路徑。

輸入文件如下:

如何在 C++ 中檢視 PDF 檔案:圖 1

執行 pdftotext 命令

string command = "pdftotext " + pdfPath + " " + outputFilePath;
int status = system(command.c_str());
string command = "pdftotext " + pdfPath + " " + outputFilePath;
int status = system(command.c_str());
C++

在這裡,我們使用 pdfPathoutputFilePath 變數構建了 pdftotext 命令以開啟 PDF 文件來查看其內容。 然後調用 system 函數來執行命令,並將其返回值存儲在 status 變數中。

檢查文字提取狀態

if (status == 0) 
{
    cout << "Text extraction successful." << endl;
} else 
{ 
    cout << "Text extraction failed." << endl; 
}
if (status == 0) 
{
    cout << "Text extraction successful." << endl;
} else 
{ 
    cout << "Text extraction failed." << endl; 
}
C++

我們檢查 status 變數來查看 pdftotext 命令是否成功執行。 如果 status 等於 0,表示文字提取成功,然後我們會打印成功訊息。 如果 status 不為零,則表示出錯,我們會顯示錯誤訊息。

讀取提取的文本並顯示

ifstream outputFile(outputFilePath);
if (outputFile.is_open()) { 
    string textContent;
    string line;
    while (getline(outputFile, line)) {
        textContent += line + "\n";
    }
    outputFile.close();
    cout << "Text content extracted from PDF:" << endl;
    cout << textContent << endl;
} else {
    cout << "Failed to open output file." << endl;
}
ifstream outputFile(outputFilePath);
if (outputFile.is_open()) { 
    string textContent;
    string line;
    while (getline(outputFile, line)) {
        textContent += line + "\n";
    }
    outputFile.close();
    cout << "Text content extracted from PDF:" << endl;
    cout << textContent << endl;
} else {
    cout << "Failed to open output file." << endl;
}
C++

在上述範例程式碼中,我們打開 outputFile(由 pdftotext 生成的文本文件),逐行閱讀其內容,並將其存儲在 textContent 字符串中。 最後,我們關閉檔案,並在控制台上列印提取的文本內容。

移除輸出檔案

如果您不需要可編輯的輸出文本檔或想要釋放硬碟空間,可以在程式結束之前使用以下命令刪除它:

remove(outputFilePath.c_str());
remove(outputFilePath.c_str());
C++

編譯和運行程式

使用「Ctrl+F9」快捷鍵編譯程式碼。 編譯成功後,執行可執行檔將從指定的 PDF 文件中提取文本內容並在控制台顯示。 輸出如下:

如何在C++中查看PDF文件:圖2

在C#中查看PDF文件

IronPDF .NET C# 函式庫是一個強大的 .NET C# PDF 函式庫,允許用戶在其 C# 應用程式中輕鬆檢視 PDF 文件。 IronPDF 利用 Chromium 網路瀏覽器引擎,精確地渲染和顯示 PDF 內容,包括圖片、字體和複雜格式。 憑藉其用戶友好的介面和廣泛的功能,開發人員可以將IronPDF無縫整合到他們的C#專案中,使用戶能夠高效且互動地查看PDF文件。 無論是用於顯示報告、發票或任何其他 PDF 內容,IronPDF 提供了一個強大的解決方案,用於在 C# 中創建功能豐富的 PDF 查看器。

要在 Visual Studio 中安裝 IronPDF NuGet 套件,請按照以下步驟進行:

  1. 開啟 Visual Studio: 啟動 Visual Studio 或您偏好的任何其他 IDE。

  2. 創建或打開您的專案: 創建一個新的 C# 專案,或打開一個您希望安裝 IronPDF 套件的現有專案。

  3. 開啟 NuGet 套件管理器: 在 Visual Studio 中,前往「工具」>「NuGet 套件管理員」>「管理方案的 NuGet 套件」。 或者,點擊解決方案總管,然後選擇「管理解決方案的 NuGet 套件」。

  4. 搜尋 IronPDF: 在 "NuGet 封裝管理員" 視窗中,點擊 "瀏覽" 索引標籤,然後在搜尋欄中搜尋 "IronPDF"。 或者,訪問NuGet IronPDF 套件並直接下載最新版本的「IronPDF」。

  5. 選擇 IronPDF 套件: 找到「IronPDF」套件並點擊它,以將其選擇為您的專案。

  6. 安裝 IronPDF: 點擊「安裝」按鈕來安裝所選的套件。

  7. 但是,您也可以使用以下命令通過 NuGet 套件管理器控制台安裝 IronPDF:
    :ProductInstall

使用IronPDF,我們可以執行的操作包括從 PDF 文件中提取文字和圖像並在控制台中顯示以供查看。 以下程式碼有助於完成此任務:

using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;

// Extracting Image and Text content from Pdf Documents

// open a 128-bit encrypted PDF
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Get all text to put in a search index
string text = pdf.ExtractAllText();

// Get all Images
var allImages = pdf.ExtractAllImages();

// Or even find the precise text and images for each page in the document
for (var index = 0 ; index < pdf.PageCount ; index++)
{
    int pageNumber = index + 1;
    text = pdf.ExtractTextFromPage(index);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(index);
    //...
}
using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;

// Extracting Image and Text content from Pdf Documents

// open a 128-bit encrypted PDF
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Get all text to put in a search index
string text = pdf.ExtractAllText();

// Get all Images
var allImages = pdf.ExtractAllImages();

// Or even find the precise text and images for each page in the document
for (var index = 0 ; index < pdf.PageCount ; index++)
{
    int pageNumber = index + 1;
    text = pdf.ExtractTextFromPage(index);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(index);
    //...
}
Imports IronPdf
Imports IronSoftware.Drawing
Imports System.Collections.Generic

' Extracting Image and Text content from Pdf Documents

' open a 128-bit encrypted PDF
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Get all text to put in a search index
Private text As String = pdf.ExtractAllText()

' Get all Images
Private allImages = pdf.ExtractAllImages()

' Or even find the precise text and images for each page in the document
For index = 0 To pdf.PageCount - 1
	Dim pageNumber As Integer = index + 1
	text = pdf.ExtractTextFromPage(index)
	Dim images As List(Of AnyBitmap) = pdf.ExtractBitmapsFromPage(index)
	'...
Next index
VB   C#

如需有關 IronPDF 的更多詳細資訊,請造訪IronPDF 文件檔案.

結論

在本文中,我們學習了如何使用 Xpdf 命令行工具在 C++ 中提取和查看 PDF 文件的內容。 此方法使我們能夠在 C++ 應用程式中無縫處理和分析提取的文本。

IronPDF Licensing Information可免費用於開發目的,但生成的 PDF 帶有水印。 若要移除浮水印並將 IronPDF 用於商業用途,您可以購買許可證。

A免費試用許可證也可用於商業目的測試。

< 上一頁
如何在NodeJS中將PDF轉換為圖像
下一個 >
如何在C++中創建PDF檔案

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >