백엔드 개발 C#.Net 튜토리얼 C#은 PDF를 텍스트로 변환하는 기능을 구현합니다.

C#은 PDF를 텍스트로 변환하는 기능을 구현합니다.

Nov 24, 2016 pm 01:17 PM
c#

업데이트

2014년 2월 27일: 이 기사는 원래 PDFBox를 사용하여 PDF 파일을 구문 분석하는 것에 대해서만 설명했습니다. 이제 IFilter 및 iTextSharp를 사용하기 위한 루틴을 포함하도록 확장되었습니다.

이 글과 해당 Visual Studio 프로젝트가 최신 PDFBox 버전(1.8.4)으로 업데이트되었습니다. 모든 종속성이 포함된 전체 프로젝트는 http://www.squarepdf.net/how-to-convert-pdf-to-text-in-net-sample-project/에서 다운로드할 수 있습니다(종속성을 제거하는 것은 약간 까다롭습니다).

PDF 파일을 구문 분석하는 방법

.NET의 PDF 파일에서 텍스트를 추출하는 주요 방법은 다음과 같습니다.

Microsoft의 IFilter 인터페이스 및 Adobe의 IFilter 구현. >iTextSharp

PDFBox.

불행하게도 이러한 PDF 구문 분석 솔루션 중 완벽한 것은 없습니다. 아래에서는 이러한 방법에 대해 설명합니다.

Adobe PDF IFilter

IFilter 인터페이스를 사용하여 PDF 파일을 구문 분석하려면 다음이 필요합니다.

Windows 2000 이상 버전

Adobe Acrobat 또는 Reader 7.0 이상(또는 별도의 Adobe PDF IFilter [adobe.com])

IFilter COM 래퍼 클래스 [dotlucene.net]

샘플 코드:

단점:
using IFilter;
 
// ...
 
public static string ExtractTextFromPdf(string path) {
  return DefaultParser.Extract(path); 
}
로그인 후 복사

IFilter 인터페이스를 처리하기 위해 신뢰할 수 없는 COM 상호 운용성을 사용합니다(IFilter COM과 Adobe PDF IFilter를 결합하는 것은 특히 문제가 됩니다).

대상 시스템에는 Adobe IFilter를 별도로 설치해야 합니다. 색인 생성 가능한 솔루션을 다른 사람에게 게시해야 하는 경우에는 고통스럽습니다.

iTextSharp

iTextSharp(http://sourceforge.net/projects/itextsharp/)는 Java PDF 작업 라이브러리 iText(http://itextpdf.com/) .NET 출력입니다. 주로 PDF를 읽는 것보다 편집하는 데 중점을 두고 있지만 확실히 PDF에서 텍스트 추출도 지원합니다(약간 과잉이긴 하지만).

루틴:

크레딧: 회원번호 10364982
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
 
// ...
  
public static string ExtractTextFromPdf(string path)
{
  using (PdfReader reader = new PdfReader(path))
  {
    StringBuilder text = new StringBuilder();
 
    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
    }
 
    return text.ToString();
  }
}
로그인 후 복사

단점:

라이센스 필요(AGPL 라이센스가 마음에 들지 않는 경우) )

PDFBox

PDFBox는 또 다른 Java PDF 클래스 라이브러리입니다. 또한 원본 Java Lucene과 함께 사용할 수도 있습니다(LucenePDFDocument 참조).

다행히 PDFBox에는 IKVM.NET을 사용하여 개발된 .NET 버전이 있습니다(PDFBox 다운로드 페이지를 방문하세요).

.NET에서 PDFBox를 사용하려면

IKVM.OpenJDK.Core.dll

IKVM.OpenJDK.SwingAWT.dll

pdfbox-1.8을 인용해야 합니다. 4.dll

 그리고 다음 파일을 bin 폴더에 복사합니다:

commons-logging.dll

fontbox-1.8.4.dll

IKVM .OpenJDK.Util.dll

IKVM.Runtime.dll

PDFBox를 사용하여 PDF를 구문 분석하는 것은 매우 간단합니다.

총 컴파일된 크기는 거의 18MB입니다.
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;
 
// ...
 
private static string ExtractTextFromPdf(string path)
{
  PDDocument doc = null;
  try {
    doc = PDDocument.load(path)
    PDFTextStripper stripper = new PDFTextStripper();
    return stripper.getText(doc);
  }
  finally {
    if (doc != null) {
      doc.close();
    }
  }
}
로그인 후 복사

IKVM.OpenJDK.Core.dll(4MB)

IKVM.OpenJDK.SwingAWT.dll(6MB)

pdfbox-1.8.4.dll(4MB)

commons-logging.dll(82kB)

fontbox-1.8.4.dll(180kB)

IKVM.OpenJDK.Util.dll(2MB)

IKVM.Runtime.dll(1MB)

속도는 괜찮습니다. 미국 저작권법 PDF(5.1MB) 파일을 구문 분석하는 데 13초가 걸렸습니다.

개선 제안을 해주신 bobrien100님께 감사드립니다.

단점:

IKVM.NET 종속성(18MB)

속도 ​​(특히 IKVM.NET 시작 시간)

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory C#을 사용한 Active Directory Sep 03, 2024 pm 03:33 PM

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 C#의 난수 생성기 Sep 03, 2024 pm 03:34 PM

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C#의 액세스 한정자 C#의 액세스 한정자 Sep 03, 2024 pm 03:24 PM

C#의 액세스 수정자에 대한 안내입니다. 예제 및 출력과 함께 C#의 액세스 한정자의 소개 유형에 대해 논의했습니다.

C# 데이터 그리드 보기 C# 데이터 그리드 보기 Sep 03, 2024 pm 03:32 PM

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C# 직렬화 C# 직렬화 Sep 03, 2024 pm 03:30 PM

C# 직렬화 가이드. 여기에서는 C# 직렬화 개체의 소개, 단계, 작업 및 예제를 각각 논의합니다.

C#의 패턴 C#의 패턴 Sep 03, 2024 pm 03:33 PM

C#의 패턴 가이드. 여기에서는 예제 및 코드 구현과 함께 C#의 패턴 소개 및 상위 3가지 유형에 대해 설명합니다.

C#의 소수 C#의 소수 Sep 03, 2024 pm 03:35 PM

C#의 소수 가이드. 여기서는 코드 구현과 함께 C#의 소수에 대한 소개와 예를 논의합니다.

C# 정렬세트 C# 정렬세트 Sep 03, 2024 pm 03:24 PM

C# SortedSet에 대한 안내입니다. 여기에서는 코드 구현 및 출력과 함께 C# SortedSet 및 해당 예제에 대한 간략한 개요를 논의합니다.

See all articles