# IronOCR ile C# İçinde Aranabilir PDF'ler Kaydedin
IronOCR, C# geliştiricilerine, taranmış belgeleri ve görselleri [OCR teknolojisi](https://ironsoftware.com/csharp/ocr/features/) kullanarak aranabilir PDF'lere dönüştürmelerine olanak tanır, dosya, bayt veya akış olarak çıkış destekler, birkaç satır kod ile.
Aranabilir PDF, genellikle bir OCR (Optik Karakter Tanıma) PDF'si olarak adlandırılan, hem taranmış görseller hem de makine tarafından okunabilir metin içeren bir PDF belgesi türüdür. Bu PDF'ler, taranmış kağıt belgeler veya görseller üzerinde OCR işlemi gerçekleştirerek, görsellerdeki metni tanıyıp seçilebilir ve aranabilir metne dönüştürerek oluşturulur.
`SaveAsSearchablePdf`, `ReadPhoto`, `ReadScreenShot` ve `ReadDocumentAdvanced`'dan elde edilen sonuçlar üzerinde de mevcuttur ve fotoğraftan ve ileri düzey belge OCR iş akışlarından aranabilir PDF oluşturulmasına olanak tanır. Bu özellik, kağıt arşivleri dijitalleştirmek veya daha iyi belge yönetimi sağlamak için eski PDF'leri aranabilir hale getirmek adına özellikle kullanışlıdır.
*as-heading:2(Hızlı Başlangıç: Bir Satırda Aranabilir PDF Dışa Aktarma)*
`RenderSearchablePdf = true` ayarlayın, girdiniz üzerinde `Read(...)` çalıştırın ve `SaveAsSearchablePdf(...)` çağırın. IronOCR ile tamamen aranabilir bir PDF oluşturmak için tek yapmanız gereken bu.
```cs
:title=Quickly Make a PDF Searchable with IronOCR
new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
```
<div class="hsg-featured-snippet">
<h3>Asgari İş Akışı (5 adım)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Sonuçları aranabilir PDF olarak kaydetmek için bir C# kütüphanesi indirin</a></li>
<li>Görseli ve PDF belgesini OCR için hazırlayın</li>
<li><strong>RenderSearchablePdf</strong> özelliğini <code>true</code> olarak ayarlayın</li>
<li>Aranabilir bir PDF dosyası çıkışı için <code>SaveAsSearchablePdf</code> yöntemini kullanın</li>
<li>Aranabilir PDF'yi bayt ve akış olarak dışa aktarın</li>
</ol>
</div>
<br class="clear" />
## OCR Sonuçlarını Aranabilir PDF Olarak Nasıl Dışa Aktarırım?
IronOCR kullanarak sonucu aranabilir bir PDF olarak dışa aktarmak için `Configuration.RenderSearchablePdf` özelliğini `true` olarak ayarlayın, OCR sonuç nesnesini `Read` metodundan elde edin ve çıktı dosya yolu ile `SaveAsSearchablePdf` çağırın.
### Giriş
Bir Harry Potter romanından, TIFF dosyası olarak taranan ve `OcrImageInput` üzerinden yüklenen tek bir sayfa. Sayfa, aranabilir PDF metin katmanı için gerçekçi bir girdi olan yoğun basılı metin içeriyor.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="max-width: 380px; margin: 0 auto;">
<img src="/static-assets/ocr/how-to/searchable-pdf/potter.webp" alt="Harry'in Neredeyse Kafasız Nick ile tanıştığı ▲Ölüm Günü Partisi▲ başlıklı Kısım Sekiz ile birlikte Harry Potter kitabından bir sayfa" class="img-responsive add-shadow" />
</div>
</div>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">potter.tiff: Görünmeyen bir metin katmanına sahip aranabilir PDF üretmek için OCR girdi olarak kullanılan taranmış roman sayfası.</p>
```csharp
using IronOcr;
// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();
// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;
// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
```
### Çıktı
<iframe loading="lazy" src="/static-assets/ocr/how-to/searchable-pdf/searchablePdf.pdf" width="100%" height="400px"></iframe>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">searchablePdf.pdf: Aranabilir PDF çıktısı. OCR metin katmanını doğrulamak için herhangi bir kelimeyi seçin ya da arayın.</p>
Oluşan PDF, tanınan her kelimenin üzerine yerleştirilmiş görünmez bir metin katmanı ile orijinal taranan sayfa görüntüsünü gömer. Metin katmanının bulunduğunu doğrulamak için izleyicide herhangi bir kelimeyi seçin veya arayın.
IronOCR, örtüşme için özel bir yazı tipi kullanır, bu da metin boyutunun orijinaline göre biraz farklılık göstermesine neden olabilir.
[Çok sayfalı TIFF dosyaları](https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-multipage-tiff/) veya karmaşık belgelerle çalışırken, IronOCR tüm sayfaları otomatik olarak işler ve bunları çıktıya dahil eder. Kütüphane, sayfa sıralamasını ve metin örtüşme konumlandırmasını otomatik olarak işler, böylece doğru metin-görüntü eşlemesi sağlar.
### Fotoğraflardan veya Gelişmiş Belge Taramalarından Aranabilir PDF'leri Nasıl Oluştururum?
Aranabilir PDF dışa aktarımı, `ReadPhoto`, `ReadScreenShot` veya `ReadDocumentAdvanced` kullanılırken de mevcuttur. Bu yöntemlerin her biri, `SaveAsSearchablePdf` destekleyen bir sonuç türü döndürür.
Bu yöntemleri çağırırken isteğe bağlı olarak bir `ModelType` geçebilirsiniz. Varsayılan `Normal`'dir, oysa `Enhanced` daha iyi doğruluk sağlar, ancak hızdan ödün verir.
#### Giriş
Duvara boyanmış bir metni olan bir duvar resmi fotoğrafı, `LoadImage` yoluyla yüklendi. Sahne, gerçek dünyadaki bir ortamda gömülü birçok kelime içeriyor ve bu, `ReadPhoto` ve `Enhanced` modeli için pratik bir test yapıyor.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="max-width: 450px; margin: 0 auto;">
<img src="/static-assets/ocr/how-to/searchable-pdf/photo-input.webp" alt="InPut için ReadPhoto OCR olarak kullanılan metni içeren fotoğraf." class="img-responsive add-shadow" />
</div>
</div>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">photo.png: ReadPhoto üzerinden Enhanced modeliyle yüklenmiş duvar duvarı fotoğrafı ve aranabilir PDF üretmek için kullanıldı.</p>
```csharp
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");
// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);
// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
```
#### Çıktı
<iframe loading="lazy" src="/static-assets/ocr/how-to/searchable-pdf/searchable-photo.pdf" width="100%" height="400px"></iframe>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">searchable-photo.pdf: ReadPhoto'dan elde edilen aranabilir PDF çıktısı. Metin katmanı, herhangi bir PDF izleyicisi aracılığıyla tam metin aramasını destekler.</p>
Elde edilen aranabilir PDF, tanınan kelimeler üzerinde görünmez bir metin katmanı içerir. PDF izleyicisinde 'Milk' araması, orijinal fotoğraftaki boyalı metinden doğrudan çıkarılan 3 eşleşme döndürür.
Aynı yaklaşım, bir `OcrDocAdvancedResult` döndüren `ReadDocumentAdvanced` ile çalışır:
#### Giriş
Tarama yoluyla yüklenen bir fatura, `LoadImage`. Satıcı adı, satır öğeleri ve toplamlar gibi yapılandırılmış alanlar içerir; `ReadDocumentAdvanced` ile `Enhanced` modeli tanır ve aranabilir bir metin katmanı olarak gömer.
<div class="content-img-align-center">
<div class="center-image-wrapper" style="max-width: 400px; margin: 0 auto;">
<img src="/static-assets/ocr/how-to/searchable-pdf/invoice-input.webp" alt="Giriş için ReadDocumentAdvanced OCR olarak kullanılan fatura belgesi." class="img-responsive add-shadow" />
</div>
</div>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">invoice.png: OcrInput'a yüklenmiş ve Enhanced model ile ReadDocumentAdvanced'e geçirilmiş taranmış fatura.</p>
```csharp
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
```
#### Çıktı
<iframe loading="lazy" src="/static-assets/ocr/how-to/searchable-pdf/searchable-doc.pdf" width="100%" height="400px"></iframe>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">searchable-doc.pdf: ReadDocumentAdvanced'den elde edilen aranabilir PDF çıktısı. Fatura alanları seçilebilir ve aranabilir.</p>
`SaveAsSearchablePdf`, `ReadPassport` veya `ReadLicensePlate` sonuçları için desteklenmez ve bir `ExtensionAdvancedScanException` atar.
### Çok Sayfalı Belgelerle Çalışma
Çok sayfalı belgeler üzerindeki PDF OCR işlemleriyle çalışırken, IronOCR her sayfayı ardışık olarak işler ve orijinal belge yapısını korur.
#### Giriş
Hartwell Capital Management'ten, `OcrPdfInput` ile yüklenen 11 sayfalık yıllık rapor. 1-10 (indeksler 0-9) sayfaları `PageIndices` aralığı kullanılarak seçilir ve tek bir `Read` çağrısında işlenir.
<iframe loading="lazy" src="/static-assets/ocr/how-to/searchable-pdf/multi-page-scan.pdf" width="100%" height="400px"></iframe>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">multi-page-scan.pdf: Çok sayfalı aranabilir PDF dönüştürme için giriş olarak kullanılan 11 sayfalık Hartwell Capital Management yıllık raporu.</p>
```csharp
using IronOcr;
// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();
// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));
// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);
// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
```
#### Çıktı
<iframe loading="lazy" src="/static-assets/ocr/how-to/searchable-pdf/searchable-multi-page.pdf" width="100%" height="400px"></iframe>
<p style="text-align: center; font-style: italic; color: #555; font-size: 13px; margin-top: 6px;">searchable-multi-page.pdf: 10 sayfalık aranabilir PDF çıktısı. Her sayfa, tam metin araması için görünmez bir metin katmanına sahiptir.</p>
Elde edilen PDF, orijinal raporun (sayfalar 1-10) 10 sayfasını içerir ve her biri çıkarılan içeriği seçilebilir ve herhangi bir PDF izleyicisinde aranabilir yapan görünmez bir metin katmanına sahiptir.
### Aranabilir PDF Oluştururken Filtreleri Nasıl Uygularım?
`SaveAsSearchablePdf` ikinci parametre, gömülü çıkışa görüntü filtrelerinin uygulanıp uygulanmayacağını kontrol eden bir boole kabul eder. [Görüntü optimizasyon filtrelerini](https://ironsoftware.com/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/) kullanmak, özellikle [düşük kaliteli taramalar](https://ironsoftware.com/csharp/ocr/examples/ocr-low-quality-scans-tesseract/) ile çalışırken OCR doğruluğunu önemli ölçüde artırabilir.
Aşağıdaki örnek, gri tonlama filtresini uygular ve filtrelenmiş resmi gömülü aranabilir PDF çıktısına eklemek için ikinci argüman olarak `true` geçirir.
```cs
using IronOcr;
// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();
// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");
// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);
// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
```
En iyi sonuçlar için, belgenizin türü için en iyi filtre kombinasyonunu otomatik olarak belirlemek için [Filtre Sihirbazını](https://ironsoftware.com/csharp/ocr/examples/filter-wizard/) kullanmayı düşünün. Bu araç, girişinizi analiz eder ve uygun ön işleme adımlarını önerir.
### Aranabilir PDF'lerde Yanlış Karakterleri Nasıl Düzeltirim?
Metin PDF'de görsel olarak doğru görünüyorsa ancak arama yaparken veya kopyalarken bozuk karakterler gösteriyorsa, sorun, aranabilir metin katmanında varsayılan olarak kullanılan yazı tipinden kaynaklanmaktadır. Varsayılan olarak, `SaveAsSearchablePdf` tüm Unicode karakterlerini tam olarak desteklemeyen Times New Roman kullanır. Bu, aksanlı veya ASCII dışı karakterlerle dillere etki eder.
Bunu düzeltmek için üçüncü parametre olarak Unicode uyumlu bir yazı tipi dosyası sağlayın:
```csharp
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
```
Ayrıca dördüncü bir parametre olarak özel bir yazı tipi adı belirtebilirsiniz:
```csharp
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
```
`OcrResult`, `OcrPhotoResult` ve `OcrDocAdvancedResult` dahil olmak üzere tüm sonuç türleri için geçerlidir, bu nedenle hangi okuma yöntemi sonucunuzu üretmiş olursa olsun düzeltme çalışır.
Bu, başlangıçta Times New Roman fontu ile dizilmiş belgeler için Liberation Serif önerilir çünkü orijinal boşlukları ve düzeni metrik olarak korur. Genel amaçlı çok dilli kullanım için, Noto Sans veya DejaVu Sans iyi alternatiflerdir.
Bir dosya yoluna yazmanın mümkün olmadığı senaryolar için, IronOCR aranabilir PDF'yi bir bayt dizisi veya akış olarak geri döndürmeyi de destekler.
<hr />
## Aranabilir PDF'leri Bayt veya Akış Olarak Nasıl Dışa Aktarırım?
Aranabilir PDF çıktısı, `SaveAsSearchablePdfBytes` ve `SaveAsSearchablePdfStream` yöntemleri kullanılarak byte veya akış olarak da işlenebilir. Aşağıdaki kod örneği, bu yöntemlerin nasıl kullanılacağını gösterir.
```csharp
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();
// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
```
Bu çıktı seçenekleri, dosya sistemi erişiminin sınırlı olabileceği bulut depolama hizmetleri, veritabanları veya web uygulamalarıyla entegre olurken özellikle kullanışlıdır. Aşağıdaki örnek pratik uygulamaları gösterir:
```csharp
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
}
}
```
### Performans Hususları
Büyük belge hacimlerini işlerken, geçirgenliği artırmak için çok iş parçacıklı [OCR işlemleri](https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-multithreading-for-speed/) uygulamayı düşünün. IronOCR, eşzamanlı işlemeyi destekler ve böylece birden fazla belgeyi aynı anda yapabilmenizi sağlar:
```csharp
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");
}
}
```
### Gelişmiş Yapılandırma Seçenekleri
Daha gelişmiş senaryolar için, belirli belge türleri veya diller için OCR motorunu ince ayar yapmak amacıyla [ayrıntılı Tesseract yapılandırmasını](https://ironsoftware.com/csharp/ocr/examples/csharp-configure-setup-tesseract/) kullanabilirsiniz:
```csharp
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
};
```
Bu yapılandırma seçenekleri, üç çıkış yöntemi için de eşit olarak geçerlidir: `SaveAsSearchablePdf`, `SaveAsSearchablePdfBytes` ve `SaveAsSearchablePdfStream`. Aşağıdaki Özette, uygun çıktı formatlarıyla aranabilir PDF yöntemlerinin tam seti toplanmaktadır.
## Özet
IronOCR ile aranabilir PDF'ler oluşturmak basit ve esnektir. Tekil görüntüleri, çok sayfalı belgeleri, `ReadPhoto` yoluyla fotoğrafları veya `ReadDocumentAdvanced` yoluyla ileri düzey belge taramalarını işlemek isteyip istemediğinizden bağımsız olarak, kütüphane çeşitli formatlarda aranabilir PDF'ler oluşturmak için sağlam yöntemler sağlar. Doğruluk için standart ve geliştirilmiş ML modelleri arasında seçim yapmak üzere `ModelType` parametresini kullanın. Dosyalar, baytlar veya akışlar olarak dışa aktarma yeteneği, masaüstü uygulamalardan bulut tabanlı hizmetlere kadar tüm uygulama mimarilerine uyum sağlar.
Daha gelişmiş OCR senaryoları için, [kapsamlı kod örneklerini](https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-5/) keşfedin veya ayrıntılı metod imzaları ve seçenekler için API belgelerine başvurun.
IronOCR, C# geliştiricilerine, taranmış belgeleri ve görselleri OCR teknolojisi kullanarak aranabilir PDF'lere dönüştürmelerine olanak tanır, dosya, bayt veya akış olarak çıkış destekler, birkaç satır kod ile.
Aranabilir PDF, genellikle bir OCR (Optik Karakter Tanıma) PDF'si olarak adlandırılan, hem taranmış görseller hem de makine tarafından okunabilir metin içeren bir PDF belgesi türüdür. Bu PDF'ler, taranmış kağıt belgeler veya görseller üzerinde OCR işlemi gerçekleştirerek, görsellerdeki metni tanıyıp seçilebilir ve aranabilir metne dönüştürerek oluşturulur.
SaveAsSearchablePdf, ReadPhoto, ReadScreenShot ve ReadDocumentAdvanced'dan elde edilen sonuçlar üzerinde de mevcuttur ve fotoğraftan ve ileri düzey belge OCR iş akışlarından aranabilir PDF oluşturulmasına olanak tanır. Bu özellik, kağıt arşivleri dijitalleştirmek veya daha iyi belge yönetimi sağlamak için eski PDF'leri aranabilir hale getirmek adına özellikle kullanışlıdır.
Hızlı Başlangıç: Bir Satırda Aranabilir PDF Dışa Aktarma
RenderSearchablePdf = true ayarlayın, girdiniz üzerinde Read(...) çalıştırın ve SaveAsSearchablePdf(...) çağırın. IronOCR ile tamamen aranabilir bir PDF oluşturmak için tek yapmanız gereken bu.
RenderSearchablePdf özelliğini true olarak ayarlayın
Aranabilir bir PDF dosyası çıkışı için SaveAsSearchablePdf yöntemini kullanın
Aranabilir PDF'yi bayt ve akış olarak dışa aktarın
OCR Sonuçlarını Aranabilir PDF Olarak Nasıl Dışa Aktarırım?
IronOCR kullanarak sonucu aranabilir bir PDF olarak dışa aktarmak için Configuration.RenderSearchablePdf özelliğini true olarak ayarlayın, OCR sonuç nesnesini Read metodundan elde edin ve çıktı dosya yolu ile SaveAsSearchablePdf çağırın.
Giriş
Bir Harry Potter romanından, TIFF dosyası olarak taranan ve OcrImageInput üzerinden yüklenen tek bir sayfa. Sayfa, aranabilir PDF metin katmanı için gerçekçi bir girdi olan yoğun basılı metin içeriyor.
potter.tiff: Görünmeyen bir metin katmanına sahip aranabilir PDF üretmek için OCR girdi olarak kullanılan taranmış roman sayfası.
using IronOcr;// Create the OCR engine: defaults to English with balanced speed and accuracyIronTesseract ocrTesseract = new IronTesseract();// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDFocrTesseract.Configuration.RenderSearchablePdf = true;// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automaticallyusing var imageInput = new OcrImageInput("Potter.tiff");// Run OCR; returns a result containing the recognized text and spatial layout dataOcrResult ocrResult = ocrTesseract.Read(imageInput);// Write the output: the original scanned image is preserved with an invisible text layer on topocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
using IronOcr;
// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();
// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;
// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
ImportsIronOcr' Create the OCR engine: defaults to English with balanced speed and accuracyDim ocrTesseract As New IronTesseract()' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDFocrTesseract.Configuration.RenderSearchablePdf = True' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automaticallyUsing imageInput As New OcrImageInput("Potter.tiff") ' Run OCR; returns a result containing the recognized text and spatial layout data Dim ocrResult AsOcrResult = ocrTesseract.Read(imageInput) ' Write the output: the original scanned image is preserved with an invisible text layer on top ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")EndUsing
Imports IronOcr
' Create the OCR engine: defaults to English with balanced speed and accuracy
Dim ocrTesseract As New IronTesseract()
' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = True
' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
Using imageInput As New OcrImageInput("Potter.tiff")
' Run OCR; returns a result containing the recognized text and spatial layout data
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
End Using
Çıktı
searchablePdf.pdf: Aranabilir PDF çıktısı. OCR metin katmanını doğrulamak için herhangi bir kelimeyi seçin ya da arayın.
Oluşan PDF, tanınan her kelimenin üzerine yerleştirilmiş görünmez bir metin katmanı ile orijinal taranan sayfa görüntüsünü gömer. Metin katmanının bulunduğunu doğrulamak için izleyicide herhangi bir kelimeyi seçin veya arayın.
IronOCR, örtüşme için özel bir yazı tipi kullanır, bu da metin boyutunun orijinaline göre biraz farklılık göstermesine neden olabilir.
Çok sayfalı TIFF dosyaları veya karmaşık belgelerle çalışırken, IronOCR tüm sayfaları otomatik olarak işler ve bunları çıktıya dahil eder. Kütüphane, sayfa sıralamasını ve metin örtüşme konumlandırmasını otomatik olarak işler, böylece doğru metin-görüntü eşlemesi sağlar.
Fotoğraflardan veya Gelişmiş Belge Taramalarından Aranabilir PDF'leri Nasıl Oluştururum?
Aranabilir PDF dışa aktarımı, ReadPhoto, ReadScreenShot veya ReadDocumentAdvanced kullanılırken de mevcuttur. Bu yöntemlerin her biri, SaveAsSearchablePdf destekleyen bir sonuç türü döndürür.
Bu yöntemleri çağırırken isteğe bağlı olarak bir ModelType geçebilirsiniz. Varsayılan Normal'dir, oysa Enhanced daha iyi doğruluk sağlar, ancak hızdan ödün verir.
Giriş
Duvara boyanmış bir metni olan bir duvar resmi fotoğrafı, LoadImage yoluyla yüklendi. Sahne, gerçek dünyadaki bir ortamda gömülü birçok kelime içeriyor ve bu, ReadPhoto ve Enhanced modeli için pratik bir test yapıyor.
photo.png: ReadPhoto üzerinden Enhanced modeliyle yüklenmiş duvar duvarı fotoğrafı ve aranabilir PDF üretmek için kullanıldı.
using IronOcr;var ocr = new IronTesseract();using var input = new OcrInput();input.LoadImage("photo.png");// ReadPhoto with Enhanced modelOcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);Console.WriteLine(photoResult.Text);// Save as searchable PDFbyte[] pdfBytes = photoResult.SaveAsSearchablePdfBytes();File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");
// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);
// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
C#
Çıktı
searchable-photo.pdf: ReadPhoto'dan elde edilen aranabilir PDF çıktısı. Metin katmanı, herhangi bir PDF izleyicisi aracılığıyla tam metin aramasını destekler.
Elde edilen aranabilir PDF, tanınan kelimeler üzerinde görünmez bir metin katmanı içerir. PDF izleyicisinde 'Milk' araması, orijinal fotoğraftaki boyalı metinden doğrudan çıkarılan 3 eşleşme döndürür.
Aynı yaklaşım, bir OcrDocAdvancedResult döndüren ReadDocumentAdvanced ile çalışır:
Giriş
Tarama yoluyla yüklenen bir fatura, LoadImage. Satıcı adı, satır öğeleri ve toplamlar gibi yapılandırılmış alanlar içerir; ReadDocumentAdvanced ile Enhanced modeli tanır ve aranabilir bir metin katmanı olarak gömer.
invoice.png: OcrInput'a yüklenmiş ve Enhanced model ile ReadDocumentAdvanced'e geçirilmiş taranmış fatura.
using IronOcr;var ocr = new IronTesseract();using var input = new OcrInput();input.LoadImage("invoice.png");// ReadDocumentAdvanced with Enhanced modelOcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);byte[] docPdfBytes = docResult.SaveAsSearchablePdfBytes();File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
C#
Çıktı
searchable-doc.pdf: ReadDocumentAdvanced'den elde edilen aranabilir PDF çıktısı. Fatura alanları seçilebilir ve aranabilir.
SaveAsSearchablePdf, ReadPassport veya ReadLicensePlate sonuçları için desteklenmez ve bir ExtensionAdvancedScanException atar.
Çok Sayfalı Belgelerle Çalışma
Çok sayfalı belgeler üzerindeki PDF OCR işlemleriyle çalışırken, IronOCR her sayfayı ardışık olarak işler ve orijinal belge yapısını korur.
Giriş
Hartwell Capital Management'ten, OcrPdfInput ile yüklenen 11 sayfalık yıllık rapor. 1-10 (indeksler 0-9) sayfaları PageIndices aralığı kullanılarak seçilir ve tek bir Read çağrısında işlenir.
multi-page-scan.pdf: Çok sayfalı aranabilir PDF dönüştürme için giriş olarak kullanılan 11 sayfalık Hartwell Capital Management yıllık raporu.
using IronOcr;// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directlyvar ocrTesseract = new IronTesseract();// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarilyusing var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));// Run OCR across all selected pages in orderOcrResult result = ocrTesseract.Read(pdfInput);// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the outputresult.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
using IronOcr;
// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();
// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));
// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);
// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
ImportsIronOcr' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directlyDim ocrTesseract As New IronTesseract()' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarilyUsing pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10)) ' Run OCR across all selected pages in order Dim result AsOcrResult = ocrTesseract.Read(pdfInput) ' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)EndUsing
Imports IronOcr
' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
Dim ocrTesseract As New IronTesseract()
' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10))
' Run OCR across all selected pages in order
Dim result As OcrResult = ocrTesseract.Read(pdfInput)
' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)
End Using
Çıktı
searchable-multi-page.pdf: 10 sayfalık aranabilir PDF çıktısı. Her sayfa, tam metin araması için görünmez bir metin katmanına sahiptir.
Elde edilen PDF, orijinal raporun (sayfalar 1-10) 10 sayfasını içerir ve her biri çıkarılan içeriği seçilebilir ve herhangi bir PDF izleyicisinde aranabilir yapan görünmez bir metin katmanına sahiptir.
Aranabilir PDF Oluştururken Filtreleri Nasıl Uygularım?
SaveAsSearchablePdf ikinci parametre, gömülü çıkışa görüntü filtrelerinin uygulanıp uygulanmayacağını kontrol eden bir boole kabul eder. Görüntü optimizasyon filtrelerini kullanmak, özellikle düşük kaliteli taramalar ile çalışırken OCR doğruluğunu önemli ölçüde artırabilir.
Aşağıdaki örnek, gri tonlama filtresini uygular ve filtrelenmiş resmi gömülü aranabilir PDF çıktısına eklemek için ikinci argüman olarak true geçirir.
using IronOcr;// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed herevar ocr = new IronTesseract();var ocrInput = new OcrInput();// Load the scanned PDF as the OCR sourceocrInput.LoadPdf("invoice.pdf");// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documentsocrInput.ToGrayScale();// Run OCR on the preprocessed inputOcrResult result = ocr.Read(ocrInput);// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scanresult.SaveAsSearchablePdf("outputGrayscale.pdf", true);
using IronOcr;
// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();
// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");
// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);
// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
ImportsIronOcr' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed hereDim ocr As New IronTesseract()Dim ocrInput As New OcrInput()' Load the scanned PDF as the OCR sourceocrInput.LoadPdf("invoice.pdf")' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documentsocrInput.ToGrayScale()' Run OCR on the preprocessed inputDim result AsOcrResult = ocr.Read(ocrInput)' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scanresult.SaveAsSearchablePdf("outputGrayscale.pdf", True)
Imports IronOcr
' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()
' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")
' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)
' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
En iyi sonuçlar için, belgenizin türü için en iyi filtre kombinasyonunu otomatik olarak belirlemek için Filtre Sihirbazını kullanmayı düşünün. Bu araç, girişinizi analiz eder ve uygun ön işleme adımlarını önerir.
Aranabilir PDF'lerde Yanlış Karakterleri Nasıl Düzeltirim?
Metin PDF'de görsel olarak doğru görünüyorsa ancak arama yaparken veya kopyalarken bozuk karakterler gösteriyorsa, sorun, aranabilir metin katmanında varsayılan olarak kullanılan yazı tipinden kaynaklanmaktadır. Varsayılan olarak, SaveAsSearchablePdf tüm Unicode karakterlerini tam olarak desteklemeyen Times New Roman kullanır. Bu, aksanlı veya ASCII dışı karakterlerle dillere etki eder.
Bunu düzeltmek için üçüncü parametre olarak Unicode uyumlu bir yazı tipi dosyası sağlayın:
OcrResult, OcrPhotoResult ve OcrDocAdvancedResult dahil olmak üzere tüm sonuç türleri için geçerlidir, bu nedenle hangi okuma yöntemi sonucunuzu üretmiş olursa olsun düzeltme çalışır.
Bu, başlangıçta Times New Roman fontu ile dizilmiş belgeler için Liberation Serif önerilir çünkü orijinal boşlukları ve düzeni metrik olarak korur. Genel amaçlı çok dilli kullanım için, Noto Sans veya DejaVu Sans iyi alternatiflerdir.
Bir dosya yoluna yazmanın mümkün olmadığı senaryolar için, IronOCR aranabilir PDF'yi bir bayt dizisi veya akış olarak geri döndürmeyi de destekler.
Aranabilir PDF'leri Bayt veya Akış Olarak Nasıl Dışa Aktarırım?
Aranabilir PDF çıktısı, SaveAsSearchablePdfBytes ve SaveAsSearchablePdfStream yöntemleri kullanılarak byte veya akış olarak da işlenebilir. Aşağıdaki kod örneği, bu yöntemlerin nasıl kullanılacağını gösterir.
// Return as a byte array: suited for storing in a database or sending in an HTTP response bodybyte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full fileStream pdfStream = ocrResult.SaveAsSearchablePdfStream();
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();
// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Return as a byte array: suited for storing in a database or sending in an HTTP response bodyDim pdfByte AsByte() = ocrResult.SaveAsSearchablePdfBytes()' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full fileDim pdfStream AsStream = ocrResult.SaveAsSearchablePdfStream()
' Return as a byte array: suited for storing in a database or sending in an HTTP response body
Dim pdfByte As Byte() = ocrResult.SaveAsSearchablePdfBytes()
' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
Bu çıktı seçenekleri, dosya sistemi erişiminin sınırlı olabileceği bulut depolama hizmetleri, veritabanları veya web uygulamalarıyla entegre olurken özellikle kullanışlıdır. Aşağıdaki örnek pratik uygulamaları gösterir:
using IronOcr;using System.IO;public class SearchablePdfExporter{ public async TaskProcessAndUploadPdf(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. awaitUploadToCloudStorage(pdfStream, "searchable-output.pdf"); } // Option 3: Return as web response // return File(pdfBytes, "application/pdf", "searchable.pdf"); } private async TaskUploadToCloudStorage(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
}
}
ImportsIronOcrImportsSystem.IOPublic Class SearchablePdfExporter PublicAsync Function ProcessAndUploadPdf(inputPath AsString) AsTask Dim ocr As New IronTesseractWith { .Configuration = { .RenderSearchablePdf = True } } ' Process the inputUsing input As New OcrImageInput(inputPath) Dim result = ocr.Read(input) ' Option 1: Save to database as byte array Dim pdfBytes AsByte() = result.SaveAsSearchablePdfBytes() ' Store pdfBytes in database BLOB field ' Option 2: Upload to cloud storage using streamUsing pdfStream AsStream = result.SaveAsSearchablePdfStream() ' Upload stream to Azure Blob Storage, AWS S3, etc.AwaitUploadToCloudStorage(pdfStream, "searchable-output.pdf")EndUsing ' Option 3: Return as web response ' Return File(pdfBytes, "application/pdf", "searchable.pdf")EndUsing End Function PrivateAsync Function UploadToCloudStorage(stream AsStream, fileName AsString) AsTask ' Cloud upload implementation End FunctionEnd Class
Imports IronOcr
Imports System.IO
Public Class SearchablePdfExporter
Public Async Function ProcessAndUploadPdf(inputPath As String) As Task
Dim ocr As New IronTesseract With {
.Configuration = { .RenderSearchablePdf = True }
}
' Process the input
Using input As New OcrImageInput(inputPath)
Dim result = ocr.Read(input)
' Option 1: Save to database as byte array
Dim pdfBytes As Byte() = result.SaveAsSearchablePdfBytes()
' Store pdfBytes in database BLOB field
' Option 2: Upload to cloud storage using stream
Using pdfStream As Stream = result.SaveAsSearchablePdfStream()
' Upload stream to Azure Blob Storage, AWS S3, etc.
Await UploadToCloudStorage(pdfStream, "searchable-output.pdf")
End Using
' Option 3: Return as web response
' Return File(pdfBytes, "application/pdf", "searchable.pdf")
End Using
End Function
Private Async Function UploadToCloudStorage(stream As Stream, fileName As String) As Task
' Cloud upload implementation
End Function
End Class
Performans Hususları
Büyük belge hacimlerini işlerken, geçirgenliği artırmak için çok iş parçacıklı OCR işlemleri uygulamayı düşünün. IronOCR, eşzamanlı işlemeyi destekler ve böylece birden fazla belgeyi aynı anda yapabilmenizi sağlar:
using IronOcr;using System.Threading.Tasks;using System.Collections.Concurrent;public class BatchPdfProcessor{ private readonly IronTesseract _ocr; publicBatchPdfProcessor() { _ocr = new IronTesseract {Configuration = {RenderSearchablePdf = true, // Configure for optimal performanceLanguage = OcrLanguage.English } }; } public async TaskProcessBatchAsync(string[] filePaths) { var results = new ConcurrentBag<(string source, string output)>(); awaitParallel.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");
}
}
ImportsIronOcrImportsSystem.Threading.TasksImportsSystem.Collections.ConcurrentPublic Class BatchPdfProcessor PrivateReadOnly _ocr AsIronTesseract Public Sub New() _ocr = New IronTesseractWith { .Configuration = { .RenderSearchablePdf = True, ' Configure for optimal performance .Language = OcrLanguage.English } } End Sub PublicAsync Function ProcessBatchAsync(filePaths AsString()) AsTask Dim results As New ConcurrentBag(Of (source AsString, output AsString))()AwaitTask.Run(Sub()Parallel.ForEach(filePaths, Sub(filePath)Using input As New OcrImageInput(filePath) Dim result = _ocr.Read(input) Dim outputPath AsString = Path.ChangeExtension(filePath, ".searchable.pdf") result.SaveAsSearchablePdf(outputPath) results.Add((filePath, outputPath))EndUsing End Sub) End Function)Console.WriteLine($"Processed {results.Count} files") End FunctionEnd Class
Imports IronOcr
Imports System.Threading.Tasks
Imports System.Collections.Concurrent
Public Class BatchPdfProcessor
Private ReadOnly _ocr As IronTesseract
Public Sub New()
_ocr = New IronTesseract With {
.Configuration = {
.RenderSearchablePdf = True,
' Configure for optimal performance
.Language = OcrLanguage.English
}
}
End Sub
Public Async Function ProcessBatchAsync(filePaths As String()) As Task
Dim results As New ConcurrentBag(Of (source As String, output As String))()
Await Task.Run(Sub()
Parallel.ForEach(filePaths,
Sub(filePath)
Using input As New OcrImageInput(filePath)
Dim result = _ocr.Read(input)
Dim outputPath As String = Path.ChangeExtension(filePath, ".searchable.pdf")
result.SaveAsSearchablePdf(outputPath)
results.Add((filePath, outputPath))
End Using
End Sub)
End Function)
Console.WriteLine($"Processed {results.Count} files")
End Function
End Class
Gelişmiş Yapılandırma Seçenekleri
Daha gelişmiş senaryolar için, belirli belge türleri veya diller için OCR motorunu ince ayar yapmak amacıyla ayrıntılı Tesseract yapılandırmasını kullanabilirsiniz:
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
};
ImportsIronOcrDim advancedOcr As New IronTesseractWith { .Configuration = New TesseractConfigurationWith { .RenderSearchablePdf = True, .TesseractVariables = New Dictionary(OfString, Object) From { {"preserve_interword_spaces", 1}, {"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"} }, .PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn }, .Language = OcrLanguage.EnglishBest}
Imports IronOcr
Dim advancedOcr As New IronTesseract With {
.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True,
.TesseractVariables = New Dictionary(Of String, Object) From {
{"preserve_interword_spaces", 1},
{"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}
},
.PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
},
.Language = OcrLanguage.EnglishBest
}
Bu yapılandırma seçenekleri, üç çıkış yöntemi için de eşit olarak geçerlidir: SaveAsSearchablePdf, SaveAsSearchablePdfBytes ve SaveAsSearchablePdfStream. Aşağıdaki Özette, uygun çıktı formatlarıyla aranabilir PDF yöntemlerinin tam seti toplanmaktadır.
Özet
IronOCR ile aranabilir PDF'ler oluşturmak basit ve esnektir. Tekil görüntüleri, çok sayfalı belgeleri, ReadPhoto yoluyla fotoğrafları veya ReadDocumentAdvanced yoluyla ileri düzey belge taramalarını işlemek isteyip istemediğinizden bağımsız olarak, kütüphane çeşitli formatlarda aranabilir PDF'ler oluşturmak için sağlam yöntemler sağlar. Doğruluk için standart ve geliştirilmiş ML modelleri arasında seçim yapmak üzere ModelType parametresini kullanın. Dosyalar, baytlar veya akışlar olarak dışa aktarma yeteneği, masaüstü uygulamalardan bulut tabanlı hizmetlere kadar tüm uygulama mimarilerine uyum sağlar.
Daha gelişmiş OCR senaryoları için, kapsamlı kod örneklerini keşfedin veya ayrıntılı metod imzaları ve seçenekler için API belgelerine başvurun.
Sıkça Sorulan Sorular
Taranmış görüntülerden C# ile nasıl aranabilir bir PDF oluşturabilirim?
IronOCR kullanarak taranmış görüntülerden aranabilir PDF'ler oluşturmak basittir. Yapılandırmada RenderSearchablePdf'i true olarak ayarlayın, giriş görüntünüzde Read() yöntemini kullanın ve istediğiniz çıktı yolu ile SaveAsSearchablePdf() çağrısı yapın. IronOCR, görüntü üzerinde OCR yaparak orijinal görüntü üzerine seçilebilir, aranabilir metin içeren bir PDF oluşturacaktır.
Hangi dosya formatları aranabilir PDF'lere dönüştürülebilir?
IronOCR, JPG, PNG, TIFF ve mevcut PDF belgeleri dahil çeşitli görüntü formatlarını aranabilir PDF'lere dönüştürebilir. Kütüphane, tek sayfalık görüntüler ve çok sayfalı belgeler (örneğin TIFF dosyaları) gibi belgeleri otomatik olarak işler ve çıkan aranabilir PDF'de doğru sayfa sıralamasını korur.
Aranabilir PDF'leri dosyalar yerine bayt dizileri veya akışlar olarak dışa aktarabilir miyim?
Evet, IronOCR, aranabilir PDF'leri birden fazla formatta dışa aktarmayı destekler. SaveAsSearchablePdf() yöntemiyle doğrudan bir dosyaya kaydetmenin yanı sıra, OCR sonuçlarını bayt dizileri veya akışlar olarak da dışa aktarabilirsiniz; bu sayede geçici dosyalar oluşturmadan web uygulamaları, bulut depolama veya veritabanı sistemleriyle entegrasyon kolaylaşır.
Aranabilir bir PDF oluşturmak için gereken en az kod nedir?
IronOCR ile aranabilir bir PDF oluşturmak sadece bir satır kod ile yapılabilir: new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput('file.jpg')).SaveAsSearchablePdf('searchable.pdf'). Bu, IronOCR'nin yalın API tasarımını göstermektedir.
Aranabilir PDF'lerde görünmez metin katmanı nasıl çalışır?
IronOCR, tanınan metni, PDF'deki orijinal görüntünün üzerine görünmez bir katman olarak konumlandırmayı otomatik olarak ele alır. Bu, kullanıcıların metni seçmesi ve araması için doğru metin-görüntü eşlemeyi sağlar ve orijinal belgenin görsel görünümünü korur. Kütüphane, bu süreçte özel yazı tipleri ve konumlandırma algoritmaları kullanır.
Fotoğraflardan veya ekran görüntülerinden aranabilir PDF'ler oluşturabilir miyim?
Evet, SaveAsSearchablePdfReadPhoto, ReadScreenShot ve ReadDocumentAdvanced sonuçları için desteklenir. Her yöntem, aranabilir PDF dışa aktarmasını destekleyen bir sonuç türü döndürür, bu sayede gerçek dünya fotoğrafları, ekran görüntüleri veya karmaşık belge taramalarını aranabilir PDF'lere dönüştürmek kolaylaşır.
ModelType parametresi ne işe yarar?
ModelType parametresi, OCR için hangi önceden eğitilmiş ML modelinin kullanılacağını kontrol eder. Normal varsayılan olarak görüntüleri hızlı sonuçlar için 960 piksele küçültür. Enhanced 2560 piksele kadar görüntüleri destekleyerek daha detaylı ve yüksek çözünürlüklü girdiler için doğruluğu artırır.
Neden aranabilir PDF'deki kopyaladığım veya aradığım karakterler bozulmuş görünüyor?
Bu durum, aranabilir metin katmanında kullanılan varsayılan font (Times New Roman) tüm Unicode karakterlerini tam olarak desteklemediği için ortaya çıkar. Bunu düzeltmek için SaveAsSearchablePdf yönteminin üçüncü parametresi olarak Unicode uyumlu bir font dosyası geçin. Eğer belgeleriniz Times New Roman ile dizayn edilmişse ve diğer yazı tipleriyle aralık tutarsızlıkları fark ederseniz, aynı glyf ölçütlerini paylaşan ve orijinal düzeni koruyan Liberation Serif'i deneyin.
What advanced configuration options are available in IronOCR for creating searchable PDFs?
IronOCR offers advanced configuration options, including detailed Tesseract configuration, setting Tesseract variables, and choosing different page segmentation modes. These can be tailored to fine-tune OCR for specific document types or languages.
Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.