C#에서 검색 가능한 PDF로 결과를 저장하는 방법

IronOCR을 사용하여 C#에서 검색 가능한 PDF를 저장하세요

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR은 C# 개발자가 OCR 기술을 사용하여 스캔한 문서와 이미지를 검색 가능한 PDF로 변환할 수 있도록 지원하며, 단 몇 줄의 코드로 파일, 바이트 또는 스트림 형식으로 출력을 지원합니다.

검색 가능한 PDF는 흔히 OCR(광학 문자 인식) PDF라고도 하며, 스캔한 이미지와 기계가 읽을 수 있는 텍스트가 모두 포함된 PDF 문서 유형입니다. 이러한 PDF 파일은 스캔한 종이 문서나 이미지에 OCR(광학 문자 인식)을 수행하여 이미지 속 텍스트를 인식하고 선택 및 검색 가능한 텍스트로 변환함으로써 생성됩니다.

IronOCR은 문서에 대한 광학 문자 인식을 수행하고 결과를 검색 가능한 PDF로 내보내는 솔루션을 제공합니다. 검색 가능한 PDF를 파일, 바이트 및 스트림으로 내보내는 기능을 지원합니다. 이 기능은 스캔한 문서를 처리하거나, 종이 문서를 디지털화하거나, 더 나은 문서 관리를 위해 기존 PDF 파일을 검색 가능하게 만들 때 특히 유용합니다.

빠른 시작: 한 줄로 검색 가능한 PDF 내보내기

RenderSearchablePdf = true를 설정하고, 입력에 Read(...)를 실행하고 SaveAsSearchablePdf(...)를 호출하세요 — IronOCR로 완전히 검색 가능한 PDF를 생성하는 데 필요한 모든 것입니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronOcr 설치하기

    PM > Install-Package IronOcr
  2. 다음 코드 조각을 복사하여 실행하세요.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronOCR 사용 시작하기

    arrow pointer


OCR 결과를 검색 가능한 PDF 파일로 내보내는 방법은 무엇인가요?

IronOCR을 사용하여 결과를 검색 가능한 PDF로 내보내는 방법은 다음과 같습니다. 먼저 Configuration.RenderSearchablePdf 속성을 true로 설정해야 합니다. Read 메서드에서 OCR 결과 객체를 얻은 후, 출력 파일 경로를 지정하여 SaveAsSearchablePdf 메서드를 사용하세요. 아래 코드는 샘플 TIFF 파일을 사용하는 방법을 보여줍니다.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Enable render as searchable PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Export as searchable PDF
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
$vbLabelText   $csharpLabel

여러 페이지로 구성된 TIFF 파일 이나 복잡한 문서를 처리할 때, IronOCR은 모든 페이지를 자동으로 처리하여 검색 가능한 PDF 출력에 포함합니다. 이 라이브러리는 페이지 순서와 텍스트 오버레이 위치 지정을 자동으로 처리하여 텍스트와 이미지 간의 정확한 매핑을 보장합니다.

아래는 샘플 TIFF 파일의 스크린샷과 검색 가능한 PDF 파일이 포함된 이미지입니다. PDF 파일에서 텍스트를 선택하여 검색 가능 여부를 확인해 보세요. 선택 기능이 있다는 것은 PDF 뷰어에서 텍스트를 검색할 수 있다는 것을 의미합니다.

IronOCR은 이미지 파일 위에 텍스트를 겹쳐 표시하기 위해 특정 글꼴을 사용하는데, 이로 인해 텍스트 크기에 약간의 차이가 발생할 수 있습니다.

Page from Harry Potter book showing Chapter Eight 'The Deathday Party' with text about Harry meeting Nearly Headless Nick

여러 페이지로 구성된 문서 작업하기

IronOCR은 여러 페이지로 구성된 PDF 문서의 OCR 작업을 처리할 때 각 페이지를 순차적으로 처리하고 원본 문서 구조를 유지합니다. 다음은 여러 페이지로 구성된 스캔한 PDF 파일을 검색 가능한 PDF로 변환하는 예입니다.

using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
$vbLabelText   $csharpLabel

검색 가능한 PDF를 만들 때 필터를 적용하려면 어떻게 해야 하나요?

SaveAsSearchablePdf는 또한 두 번째 매개변수로 boolean 플래그를 받아 검색 가능한 PDF에 필터를 적용할지 여부를 선택할 수 있도록 개발자에게 유연성을 제공합니다. 이미지 최적화 필터를 사용하면 특히 저품질 스캔 이미지를 처리할 때 OCR 정확도를 크게 향상시킬 수 있습니다.

아래는 그레이스케일 필터를 적용한 후 SaveAsSearchablePdf의 두 번째 매개변수에 true를 넣어 필터가 적용된 PDF를 저장하는 예입니다.

:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;

var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load a PDF file
ocrInput.LoadPdf("invoice.pdf");

// Apply gray scale filter
ocrInput.ToGrayScale();
OcrResult result = ocr.Read(ocrInput);

// Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
$vbLabelText   $csharpLabel

최적의 결과를 얻으려면 필터 마법사를 사용하여 특정 문서 유형에 맞는 최적의 필터 조합을 자동으로 찾는 것이 좋습니다. 이 도구는 입력 내용을 분석하여 적절한 전처리 단계를 제안합니다.


검색 가능한 PDF 파일을 바이트 또는 스트림 형식으로 내보내는 방법은 무엇인가요?

검색 가능한 PDF의 출력은 각각 SaveAsSearchablePdfBytesSaveAsSearchablePdfStream 메서드를 사용하여 바이트 또는 스트림으로 처리할 수도 있습니다. 아래 코드 예제는 이러한 메서드를 활용하는 방법을 보여줍니다.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Export searchable PDF byte
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();

// Export searchable PDF stream
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
$vbLabelText   $csharpLabel

이러한 출력 옵션은 파일 시스템 접근이 제한될 수 있는 클라우드 스토리지 서비스, 데이터베이스 또는 웹 애플리케이션과 통합할 때 특히 유용합니다. 다음은 실제 적용 사례를 보여주는 확장된 예입니다.

using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
$vbLabelText   $csharpLabel

성능 고려 사항

대량의 문서를 처리할 때는 처리량 향상을 위해 멀티스레드 OCR 작업을 구현하는 것을 고려하십시오. IronOCR은 동시 처리를 지원하므로 여러 문서를 동시에 처리할 수 있습니다.

using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
$vbLabelText   $csharpLabel

고급 구성 옵션

보다 고급 시나리오의 경우, 상세한 Tesseract 구성을 활용하여 특정 문서 유형 또는 언어에 맞게 OCR 엔진을 세밀하게 조정할 수 있습니다.

var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
$vbLabelText   $csharpLabel

요약

IronOCR을 사용하면 검색 가능한 PDF를 쉽고 유연하게 만들 수 있습니다. 단일 이미지, 여러 페이지로 구성된 문서 또는 일괄 처리 등 어떤 작업을 수행해야 하든, 이 라이브러리는 다양한 형식으로 검색 가능한 PDF를 생성하는 강력한 방법을 제공합니다. 파일, 바이트 또는 스트림으로 내보낼 수 있는 기능 덕분에 데스크톱 애플리케이션부터 클라우드 기반 서비스에 이르기까지 모든 애플리케이션 아키텍처에 적용할 수 있습니다.

보다 고급 OCR 시나리오의 경우, 포괄적인 코드 예제를 살펴보거나 API 문서를 참조하여 자세한 메서드 시그니처 및 옵션을 확인하십시오.

자주 묻는 질문

C#에서 스캔한 이미지를 검색 가능한 PDF로 만드는 방법은 무엇인가요?

IronOCR을 사용하면 스캔한 이미지에서 검색 가능한 PDF를 간편하게 생성할 수 있습니다. 설정에서 RenderSearchablePdf를 true로 설정하고, 입력 이미지에서 Read() 메서드를 호출한 다음, 원하는 출력 경로와 함께 SaveAsSearchablePdf() 메서드를 호출하기만 하면 됩니다. IronOCR은 이미지에 OCR을 적용하여 원본 이미지 위에 선택 및 검색 가능한 텍스트가 오버레이된 PDF를 생성합니다.

검색 가능한 PDF로 변환할 수 있는 파일 형식은 무엇인가요?

IronOCR은 JPG, PNG, TIFF를 비롯한 다양한 이미지 형식과 기존 PDF 문서를 검색 가능한 PDF로 변환할 수 있습니다. 이 라이브러리는 단일 페이지 이미지와 TIFF 파일과 같은 여러 페이지 문서를 모두 지원하며, 모든 페이지를 자동으로 처리하고 출력 검색 가능 PDF에서 페이지 순서를 올바르게 유지합니다.

검색 가능한 PDF 파일을 일반 파일 대신 바이트 배열이나 스트림으로 내보낼 수 있나요?

네, IronOCR은 검색 가능한 PDF 파일을 다양한 형식으로 내보낼 수 있도록 지원합니다. SaveAsSearchablePdf() 함수를 사용하여 파일에 직접 저장하는 것 외에도, OCR 결과를 바이트 배열이나 스트림으로 내보낼 수 있어 임시 파일을 생성하지 않고도 웹 애플리케이션, 클라우드 스토리지 또는 데이터베이스 시스템과 쉽게 통합할 수 있습니다.

검색 가능한 PDF를 생성하는 데 필요한 최소 코드는 무엇입니까?

IronOCR을 사용하여 검색 가능한 PDF를 생성하는 것은 단 한 줄의 코드로 가능합니다. `new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf")`. 이는 IronOCR의 간소화된 API 설계를 보여줍니다.

검색 가능한 PDF에서 텍스트 오버레이는 어떻게 작동하나요?

IronOCR은 인식된 텍스트를 PDF 원본 이미지 위에 보이지 않는 오버레이 형태로 자동 배치합니다. 이를 통해 정확한 텍스트-이미지 매핑이 가능해지며, 사용자는 원본 문서의 시각적 형태를 유지하면서 텍스트를 선택하고 검색할 수 있습니다. 이 라이브러리는 특수 글꼴과 위치 지정 알고리즘을 사용하여 이러한 기능을 구현합니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

검토자:
제프 프리츠
제프리 T. 프리츠
.NET 커뮤니티 팀의 수석 프로그램 관리자
제프는 .NET 및 Visual Studio 팀의 수석 프로그램 관리자이기도 합니다. 그는 .NET Conf 가상 컨퍼런스 시리즈의 총괄 프로듀서이며, 개발자를 위한 라이브 스트림 'Fritz and Friends'를 주 2회 진행하며 시청자들과 함께 기술에 대해 이야기하고 코드를 작성합니다. 제프는 Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit 등 주요 Microsoft 개발자 행사를 위한 워크숍, 프레젠테이션 및 콘텐츠 기획을 담당합니다.
시작할 준비 되셨나요?
Nuget 다운로드 5,525,971 | 버전: 2026.3 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronOcr
샘플을 실행하세요 이미지가 검색 가능한 텍스트로 바뀌는 것을 확인해 보세요.