업데이트
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에서 텍스트 추출도 지원합니다(약간 과잉이긴 하지만).
루틴:
크레딧: 회원번호 10364982using 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 시작 시간)