2012-03-06 24 views
6

Ben oldukça basit bir görev var: Bir PDF dosyasını okumak ve metin içeriğini görmezden imajını içeriğini yazmak gerekir. Öyleyse aslında "metin olarak kaydet" i tamamladım.C# PDFSharp: Metnin PDF'den nasıl şeritleneceği örnekleri?

İdeal olarak, ben görüntü içeriğinin yeniden sıkıştırma her türlü önlemek için tercih ediyorum ama mümkün değilse, çok sorun değil.

bunu nasıl örnekleri musunuz?

Teşekkürler! .pdf dosyasından görüntü çekip PDFsharp kütüphanelerinin

cevap

0

Örnek:

link

library

DÜZENLEME: Eğer OCR kütüphaneleri kullanmak zorunda görüntüden metni ayıklamak istiyorsanız Sonra

.

Orada iki iyi OCRs tessnet ve Link to thread on stack
MODI
vardır ama ben tam şimdi kullanıyorum MODI tavsiye edebilir. Bazı örnek @codeproject.

DÜZENLEME 2: Ayıklanan görüntülerden metni okumak için istemiyorsanız

, yeni bir PDF dokümanı yazıp içine hepsini koymak gerekir. PDF yazmak için MigraDoc kullanıyorum. Bu kütüphaneyi kullanmak zor değil. PDFsharp ile bir PDF dosyasından

+0

Bu örneğe baktım, ancak ihtiyacım olan tüm parçaların olup olmadığından emin değilim. Belgedeki "resimler" için görünüyor. Ayrıca görüntü formundaki metnin oluşturulmasını da korumam gerekiyor, sadece resmin arkasındaki metni almak istemiyorum.Başka bir deyişle, çıktının girdiye tam olarak benzemesini istiyorum ama metni çıktıdan kaydetme özelliğini devre dışı bırakmak istiyorum. –

+0

Şimdi anladığım kadarıyla, pdf'deki resimlerden ve düz metinden metin okumak ister misiniz? Ve onları nasıl bir araya getirelim? – Mariusz

+0

Giriş PDF, görüntünün arkasında yalnızca resim veya resim + metin olabilir. Bu yüzden girişi almam ve sadece görüntüden PDF yapmam gerekiyor. Başka bir deyişle, giriş PDF'sinin tüm metin olmayan bileşenlerini çıktı PDF'sine vermek ve metin bileşenlerini dışa aktarmak istemiyorum. –

1

ayıklanıyor metin aslında belge türü ve ne onunla yapmak niyetinde bağlı olarak çok kolay olabilir. Metin belgede metin biçiminde değilse ve bir görüntü değilse ve konum veya formatla ilgilenmiyorsanız, bu oldukça basittir.

var doc = PdfReader.Open(docPath); 
string pageText = doc.Pages[0].Contents.Elements.GetDictionary(0).Stream.ToString(); 

doc.Pages.Count size toplam sayfa sayısını verir ve indeksi doc.Pages dizi üzerinden her birine ulaşmak: Bu kod ile çalışıyorum PDF'leri ilk sayfasının metnin tüm alır. arayüzleri de uygulanmadı gibi ben burada foreach ve Linq kullanarak önermiyoruz. GetDictionary geçirilen endeks hangi PDF belgesi elemanı için - bu belgelerin nasıl üretildiği göre değişebilir. Aradığınız metni almazsanız, tüm öğeler arasında geçiş yapmayı deneyin.

Bunun oluşturduğu metin çeşitli PDF biçimlendirme kodlarıyla dolu olacaktır. Yapmanız gereken tek şey dizeleri ayıklamak ise, Regex veya herhangi bir uygun dize arama kodu kullanarak istediğinizi bulabilirsiniz. Biçimlendirme veya konumlandırma ile bir şey yapmanız gerekiyorsa, o zaman iyi şanslar - söyleyebildiğim kadar, buna ihtiyacınız olacak.

+0

"Bu, üretilen metin çeşitli PDF biçimlendirme kodları ile dolu olacaktır." Veya başka kelimelerle: sayfadaki gerçek metni elde etmek için deşifre edilmesi kolay olmayan bir şey elde etmek kolaydır. Bazı PDF dosyaları ile gayet iyi çalışan PDF2DOC dönüştürücülerini gördüm, ancak başkalarıyla sefil bir şekilde başarısız oldum. –

+0

Evet, yeterince açık olmaması durumunda - bu şekilde çeşitli analiz türleri için metin parçaları çıkarmak çok kolaydır. Sayfanın genel biçimlendirmesini anlamak ve ekranda görüntülemek ya da düzeni değiştirmek hiç de kolay değil. – Mason

+0

"Merhaba, Dünya!" Metnini çizme 240.2734 427.6833 Td (Merhaba, Dünya!) Tj' gibi görünebilir veya 240.2734 427.6833 Td <002B0048004F004F0052000F0003003A00520055004F00470004> Tj' gibi veya biraz farklı olabilir. Kolay uygulamalar bazı dosyalarla çalışır, ancak diğer dosyalarla başarısız olur. –