Node.js: PDF dosyasını işleyip, içerisinden bilgileri almak
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.
- Ş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.