PHP için bir PDF ayrıştırıcı var mı?

7 Cevap php

Hi I know about several PDF Generators for php (fpdf, dompdf, etc.) What I want to know is about a parser.

For reasons beyond my control, certain information I need is only in a table inside a pdf and I need to extract that table and convert it to an array.

Herhangi bir öneriniz?

7 Cevap

Ben (benzer ihtiyaçlar için) önce bir yazdım ve şunu söyleyebilirim: eğlenin. Bu oldukça karmaşık bir görev. PDF specification, büyük ve hantal. Bunun içinde metin depolama çeşitli yöntemler vardır. Ve Kicker her PDF jeneratör nasıl çalıştığını farklı olmasıdır. TFPDF veya DOMPDF gibi bir şey (bir makine açısından) PDF'leri okumak için gerçekten kolay oluşturur iken Yani, Acrobat bazı gerçekten cehennemi belgeler yapar.

Nedeni metni yazar nasıl olduğunu. En DOM tabanlı render - Ben kullanmış olduğunuz - bir dize olarak tüm satır yazmak ve (okumak için gerçekten çok kolay olan) bir kez yerleştirin. Acrobat bir seferde sadece bir ya da belki bir kaç karakter yazma ve bağımsız bir şekilde konumlandırarak daha verimli (ve o) olmaya çalışır. Bu GERÇEKTEN oluşturmayı kolaylaştırır iken, çok daha zor okuma yapar.

Burada yukarı tarafı, kendi içinde PDF formatında gerçekten basit olmasıdır. Siz düzenli bir sözdizimi takip "nesneler" var. Sonra içeriği oluşturmak için onları birbirine bağlamak olabilir. Şartname dosya biçimini açıklayan iyi bir iş yok. Ama gerçek dünya okuma beyin gücünün biraz almaya gidiyor ...

Kendiniz yazmak için gidiyoruz eğer ben zor yoldan öğrenmek zorunda kaldı tavsiye bazı yardımcı parçalarıdır:

  1. Adobe re-map fontlar seviyor. Yani karakter 65 olasılıkla A ... bir harita nesneyi bulmak ve orada ne karakterler dayalı ne yaptığını anlamak gerek olmayacaktır. Bir karakter bu font için belgede görünmüyorsa, o (programlı bir PDF düzenlemek çalışırsanız hayatı zor kılan) da dahil olmadığından ve verimli ...
  2. Mümkün olduğunca soyut yazın. Her nesne türü ve her doğal türü (dizeleri, sayılar, vb) için sınıfları yaz. Bu sınıflar için ayrıştırmak olsun. Orada tekrarlama adil bir bit olacak, ama size sadece belirli bir tip) için bir şey çimdik gerektiğini fark ettiklerinde sonunda kendinizi tasarruf edeceksiniz ...
  3. PDF spec belirli bir sürümüne veya iki için yazmak, ve bunu uygulamak. Sürüm numarasını kontrol edin ve size beklediğinizden daha yüksek bulunuyor ise, ... kefaletle Ve "o iş yapmak" için çalışmayın. Eğer yeni sürümlerini desteklemek istiyorsanız, şartname patlak ve oradan ayrıştırıcı yükseltin. (Eğlenceli değil) deneme deneyin ve yolunuzu kadar hata yapmayın ...
  4. Sıkıştırılmış akışı ile iyi şanslar. Ben genellikle sıkıştırılmış açma ne doğrulamak için uzunluk argümanları güvenemem bulduk. Bazen (bazı jeneratörler için) iyi çalışıyor ... Diğerleri ise bir veya daha fazla byte ile kapalı bulunuyor. Ben sadece filtre eşleşen eğer deflate girişimi ve ardından uzunluğu zorlamak ...
  5. Uzunlukları test ederken, kullanmayın strlen. (Diğer chartsets'ten potansiyel geçersiz karakterleri ve izin) farklı karakter setleri için telafi edecek beri mb_strlen($string, '8bit') kullanın.

Aksi halde, iyi şanslar ...

Bunun için PDFBox kullanabilirsiniz (http://pdfbox.apache.org/). Bu yazılım javabased ve platform independend edilir. Bu hızlı ve güvenilir çalışıyor. Exec veya kabuk yürütmek yoluyla veya bir PHP / Java Köprüsü üzerinden kullanabilirsiniz (http://php-java-bridge.sourceforge.net/)

Zaten xPDF baktınız mı? Dönüşüm yapacak pdftotext denilen orada bir program var. Eğer PHP onu aramak ve daha sonra PDF metin sürümünde okuyabilirsiniz. Sen exec () veya php sistemi () çalıştırmak için yetenek olması gerekir, bu yüzden bu olsa barındırılan tüm çözümler üzerinde çalışıyor olabilir.

Onun oldukça kaba, ancak Ayrıca, PHP site metin PDF dönüştürmek olacağı bazı örnekler vardır. Siz de bu örneklerden bazılarını denemek isteyebilirsiniz. Bunun üzerine PHP page, pHPT nokta org luc'un arayın.

Zend_Pdf Zend Framework parçasıdır. Onların manuel devletler:

The Zend_Pdf component is a PDF (Portable Document Format) manipulation engine. It can load, create, modify and save documents. Thus it can help any PHP application dynamically create PDF documents by modifying existing documents or generating new ones from scratch.

GhostScript veya itextsharp bir göz, hem de çeşitli çapraz-platform sürümü vardır.

PDF bilgi bu tür kaybeder gibi aslında PDF içinde bir tablo olmayabilir ...

This İki çeşit var PHP PDF ayrıştırıcı olduğunu:

  1. Ücretsiz sürümü PDF 1.5 biçimlendirmek için PDF'leri kadar ayrıştırmak
  2. Ticari eklenti (akım 1.9 kadar) herhangi bir PDF formatında ayrıştırmak