2011-09-28 18 views
6

Şifrelenmiş PDF dosyalarını okumak için bir java programı yapıyorum ve sayfa, metin, resimler ve bunların konumlarını (x, y koordinatları) içeren sayfalar içeriğiyle ayıklayın. dosya. Şimdi bu amaç için PDFBox kullanıyorum ve yazıyı ve görüntüleri alıyorum. Ama metin pozisyonunu ve görüntü pozisyonunu alamadım. Ayrıca bazı şifreli PDF dosyalarını okuyarak bazı problemler vardır.PDFBox kullanarak Metin ve Resim Konumlarını Okuyun (xy koordinatları)

cevap

2

org.apache.pdfbox.examples.util.PrintTextLocations'a bakın. Bunu biraz kullanmıştım ve PDF belgelerinde elemanların yerleşimi ve sınırlayıcı kutular üzerinde analizler yapmak çok yararlı oldu. Ayrıca, beyaz mürekkeple veya yazdırılabilir alanın dışında (muhtemelen belge filigranları veya yazar tarafından görülemeyen "unutulan" öğelerin) basılı öğeleri ortaya çıkardı.

Kullanım örneği:

java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt 

Böyle bir şey çıkacak: kolayca ayrıştırmak ve elementin pozisyonunu çizmek için kullanabilirsiniz

Processing page: 0 
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A 
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f 
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e 
... 

, sınırlayıcı-kutusu ve "akış" Her sayfa için (vb. tüm unsurlar ile yörünge). Bildiğiniz gibi, PDF'in metne dönüştürülmesinin neredeyse imkansız olduğunu göreceksiniz. Bu sadece bir grafik tanımlama formatıdır (yani yazıcı veya ekran için), bir biçimlendirme dili değildir. "Merhaba dünyayı" yazdıran bir PDF dosyası hazırlayabilirsiniz, ancak karakter pozisyonları arasından rasgele bir şekilde atlar ve (eğer seçerseniz, herhangi bir ISO kodlamasından farklı glifler kullanır), PDF'yi metne dönüştürmek çok zor hale getirir. "Sözcük" veya "paragraf" fikri yoktur. Örneğin iki sütunlu bir belge, metne ayrıştırmak için bir kabus olabilir. Sorunuzun ikinci kısmı için

, ben Xref.cc sabitleme sonra, xpdf sürümünü 3.02 kullanılarak iyi sonuçlar elde etti (bütün gTrue dönmek XRef::okToPrint(), XRef::okToChange(), XRef::okToCopy() ve XRef::okToAddNotes() olun). Bu, şifrelenmiş olanları değil, kilitli belgeleri işlemek içindir (bunun için başka araçlar da vardır).

İlgili konular