Menanda berita ialah bahagian paling perlahan untuk membawa akhbar ke dalam talian. Editor melukis kotak di sekeliling setiap berita supaya pembaca boleh mengkliknya, kemudian menaip atau menampal tajuk dan teks. Namun PDF yang dihantar ke pencetak sudah mengandungi setiap perkataan dan kedudukan tepatnya. Dalam Inkfold 1.1 kami menggunakan koordinat itu: lukis kotak, dan tajuk serta teks terisi sendiri.
Membaca teks dalam pelayar
Inkfold sudah mengimport PDF dalam pelayar menggunakan pdf.js, menukar setiap halaman kepada imej supaya pelayan tidak memerlukan perisian tambahan. Pustaka yang sama menyediakan lapisan teks melalui getTextContent(): senarai cebisan teks, setiap satu dengan matriks transformasi dan lebar. Mendarab matriks setiap cebisan dengan transformasi paparan halaman memberikan kedudukannya dalam piksel halaman; saiz fon ialah panjang vektor menegak matriks, dan bahagian atas cebisan ialah garis dasar tolak saiz itu.
Cebisan bukan baris, jadi kami menyusunnya mengikut kedudukan dan mencantumkan jiran yang berkongsi garis dasar (dalam lingkungan separuh ketinggian teks) dan berdekatan secara mendatar. Setiap baris disimpan sebagai pecahan saiz halaman, sistem koordinat yang sama digunakan oleh kawasan berita, dan dihantar ke pelayan sejurus selepas imej halaman dimuat naik.
Atau di pelayan, jika alatnya tersedia
Sesetengah penerbit lebih suka menukar PDF besar di pelayan. Jika pelayan mempunyai sambungan Imagick atau Ghostscript, editor boleh memuat naik PDF dan membiarkan pelayan menjana halaman pada 150 dpi. Jika pdftotext daripada Poppler dipasang, output -bbox-layoutnya memberikan koordinat baris yang sama, yang kami normalkan kepada format yang sama. Tanpa alat-alat ini, semuanya tetap berfungsi dalam pelayar.
Daripada kotak kepada tajuk dan isi
Apabila editor melukis kawasan, pemilihan baris adalah mudah: semua baris yang titik tengahnya berada dalam kotak. Untuk menentukan baris mana yang menjadi tajuk, kami bergantung pada tipografi, bukan tekaan: baris yang ketinggiannya sekurang-kurangnya 85 peratus daripada baris tertinggi dalam kawasan itu. Selebihnya ialah isi berita.
Isi berita dalam akhbar disusun dalam lajur, jadi membaca baris dari atas ke bawah semata-mata akan mencampurkannya. Kami mengumpulkan baris ke dalam lajur mengikut tepi kirinya, dengan toleransi kira-kira 3.5 peratus lebar halaman, kemudian membaca lajur dari kiri ke kanan dan setiap lajur dari atas ke bawah. Perkataan yang dipisahkan dengan sempang di hujung baris disambung semula.

Logik yang sama wujud di dua tempat: dalam PHP, supaya berita yang disimpan tanpa teks diisi di pelayan, dan dalam JavaScript, supaya pemeta boleh mengisi borang sebaik sahaja kotak dilukis serta menawarkan butang “Isi daripada PDF” untuk berita sedia ada. Teks seluruh halaman juga disimpan sebagai teks boleh cari, jadi carian laman turut menemui perkataan dalam iklan dan kapsyen.
Perkara utama
- PDF cetakan ialah data berstruktur: gunakan lapisan teksnya, jangan taip semula.
- Normalkan semua koordinat kepada pecahan halaman supaya teks dan kawasan berkongsi satu sistem.
- Kenal pasti tajuk melalui saiz fon dan baca isi lajur demi lajur.
- Tawarkan penukaran di pelayan sebagai pilihan, bukan syarat.
Sebelum ini dalam siri: pembaca pelbagai bahasa dari kanan ke kiri. Cuba pemeta berita dalam bilik berita demo Inkfold; perisiannya ada di Charming Theme.
Ada PDF, imbasan atau fail cetakan yang patut menjadi kandungan berstruktur? Mari berbincang — ArtinTech Solution membina alat pemprosesan dokumen untuk penerbit.