Node.js: PDF dosyasını işleyip, içerisinden bilgileri almak

Kerem Hallaç
3 min readApr 27, 2020

--

PDF formatındaki dosyayı parse edip, içerisinde bulunan metin bilgisini almaya ihtiyacım oldu. Bu işi yapan kütüphanelere baktığımda ise, her birinin farklı response’lar verdiğini fark ettim.

Yani

  • PDF içerisindeki metni tek bir outpu şeklinde dönen,
  • Sayfa sayfa metin içeriklerini dönen,
  • Metinleri satır satır dönüp, satırların kendi arasındaki ‘boyut, yazı tipi’ gibi bilgileri ek olarak dönen kütüphaneler vardı.

Benim ihtiyacım olan ise,

PDF’deki her bir sayfanın başlık — metin içeriği olarak alabilmekdi.

Hadi Birlikte Yapalım

Kullandığım kütüphane pdf.js-extract ile pdf’deki her bir sayfadaki metinleri ve bunların büyüklük bilgilerini alacağız.

Daha sonrasında büyüklük bilgilerine göre sayfanın içerisindeki başlık ve metin içeriği olarak ayıracağız.

Süper, Hazırız!

  • Kendi proje klasörümüzü oluşturalım.
mkdir nodejs-pdfparser
  • Daha sonrasında aşağıdaki komutu çalıştıralım.
npm init -y
  • Şimdi kütüphanemizi yükleyelim.
npm i pdf.js-extract
  • Üzerinde çalışmak için .js dosyamızı oluşturalım.
touch parser.js
  • Parse edeceğimiz bir PDF dosyasını örnek olarak projemize ekleyelim. Örnek alarak ben şu dosyayı kullanacağım. Dosyayı projemize ekledikten sonra proje structure’nın şu şekilde olmasına dikkat edelim.
sample.pdf ve parser.js dosyaları aynı dalda bulunuyor.
  • Şimdi sample.pdf dosyamızın ilk sayfasının bilgilerini alabileceğimiz kodu yazalım.
const PDFExtract = require(‘pdf.js-extract’).PDFExtract;const pdfExtract = new PDFExtract();const options = {};pdfExtract.extract(‘sample.pdf’, options, (err, data) => {if (err) return console.log(err);console.log(data.pages[0].content);});
  • Kodu çalıştırdığımızda aldığımız sonuç şu şekilde olacaktır.
[ { x: 57.375,
y: 69.72000000000003,
str: ‘ A Simple PDF File ‘,
dir: ‘ltr’,
width: 235.54799999999997,
height: 27,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 103.39200000000005,
str: ‘ This is a small demonstration .pdf file — ‘,
dir: ‘ltr’,
width: 176.17000000000004,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 127.29600000000005,
str:
‘ just for use in the Virtual Mechanics tutorials. More text. And more ‘,
dir: ‘ltr’,
width: 297.34000000000003,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 139.24800000000005,
str: ‘ text. And more text. And more text. And more text. ‘,
dir: ‘ltr’,
width: 227.89000000000007,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 163.15200000000004,
str:
‘ And more text. And more text. And more text. And more text. And more ‘,
dir: ‘ltr’,
width: 320.1499999999999,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 175.10400000000004,
str:
‘ text. And more text. Boring, zzzzz. And more text. And more text. And ‘,
dir: ‘ltr’,
width: 313.4799999999999,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 187.05600000000004,
str:
‘ more text. And more text. And more text. And more text. And more text. ‘,
dir: ‘ltr’,
width: 321.25999999999993,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 199.00800000000004,
str: ‘ And more text. And more text. ‘,
dir: ‘ltr’,
width: 138.4,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 222.91200000000003,
str:
‘ And more text. And more text. And more text. And more text. And more ‘,
dir: ‘ltr’,
width: 320.1499999999999,
height: 10,
fontName: ‘Helvetica’ },
{ x: 69.25,
y: 234.86400000000003,
str:
‘ text. And more text. And more text. Even more. Continued on page 2 …’,
dir: ‘ltr’,
width: 317.9499999999999,
height: 10,
fontName: ‘Helvetica’ } ]
  • Harika, şimdi elimizde pdf’in 1.sayfasındaki her satırdaki metin bilgisi, boyut ve yazı tipi bilgileri var. Şimdi bütün pdf’deki sayfalardan başlık — metin çıktısı alacak şekilde kodu düzenleyelim.
  • Son halini çalıştırdığımızda ise aşağıdaki sonucu alabiliriz.
✅✅✅

Kodun son haline şuradan ulaşabilirsiniz.

--

--