PDF ini diproduksi oleh Abbyy Finereader 10:
http://ebooks.zeitr.org/from_abbyy.pdf
Anda dapat menyalin & menempelkan kalimat pertama dan mendapatkan hasil teks ini (sangat bagus):
Der »Bund Deutscher Gymnastik-Schulleiter« «pada 20 November 1955 anläßlich einer Zusammenkunft der Leiterinnen und Leiter der privaten deutschen Gymnastik-Ausbildungsstätten gegründet.
Setelah beberapa pemrosesan dengan Ghostscript 9.02 (Windows 64 bit) saya mendapatkan file ini:
http://ebooks.zeitr.org/after_ghostscript.pdf
Sekarang kalimat pertama terlihat aneh - ada ruang ekstra sebelum karakter terakhir dari setiap kata.
Der »Bun d Deutsche r GymnastikSchulleiter« hari ke 20 Novembe r 195 5 bulan lalu oleh Zusammenkunf t der Leiterin n un d Leite r de r private n deutsche n GymnastikAusbildungsstätte n gegründet.
Ini memiliki efek negatif utama yang Anda tidak dapat mencari seluruh kata di Acrobat Reader. Saya dapat mereproduksi efek dengan parameter minimal yang ditetapkan untuk Ghostscript:
-sDEVICE=pdfwrite ^
-dBATCH ^
-dNOPAUSE ^
-sstdout="myStdOut" ^
-sOutputFile="myDestFile.pdf" ^
mySourceFile.pdf
Ada ide?
sumber
Jawaban:
Saya menemukan ini masalah yang menarik dan melihat lebih dekat ...
Pertama, saya menggunakan
qpdf
alat commandline untuk mengompres aliran data PDF sehingga saya bisa lebih baik melihat kode sumber dari kedua file:Melihat salah satu kejadian pertama di mana ruang ekstra dimasukkan (itu adalah string asli "Bund Deutscher Gymnastik-Schulleiter" berubah menjadi "Bun d Deutsche r GymnastikSchulleiter" ), saya menemukan cuplikan PDF berikut:
Dalam qdf - from_abbyy.pdf:
Dalam qdf - after_ghostscript.pdf:
Untuk memberi Anda sedikit gambaran tentang arti dari operator grafis PDF yang digunakan di sini, berikut adalah daftar singkatnya:
Seperti yang Anda lihat, Ghostscript mengganti operator
Tm
( matriks teks ) asli dengan yangTd
( pindahkan titik teks saat ini ), dan itu juga menambahkan tambahan2.16501 0 Td
... Saya tidak tahu mengapa ini. Saya akan mengirimkan laporan bug ke bugzilla Ghostscript [*] dan melihat apakah mereka tertarik untuk menyelesaikannya.Namun perlu dicatat, bahwa masalah ini tidak terjadi, jika saya menggunakan Linux Acrobat Reader 9.4.2 dan menggunakan menu action "File -> Save as Text ..." . Dalam hal ini, tidak ada ruang tambahan (tetapi beberapa linebreak tambahan). Di Linux juga, teks tidak dapat dicari dengan benar, dan juga menunjukkan spasi tambahan saat melakukan copy'n'paste ....
[*] Saya akan memperbarui di sini dengan nomor bug ketika saya selesai melakukannya.
Memperbarui:
Setelah merenungkan sedikit tentang
Tm
operator yang diganti , saya sekarang berpikir ini seharusnya tidak menjadi akar masalah.Ketika menyadari itu, saya mencoba membuat konversi dengan Ghostscript v8.71 bukannya v9.02. Dan apa yang harus saya katakan? Masalah copy'n'paste tidak terjadi dengan output v8.71!
Itu berarti: ada masalah dalam Ghostscript 9.02 yang tidak ada di 8.71. Kemungkinan besar itu ada hubungannya dengan metrik font yang tertanam dalam output PDF. Karena kutipan PDF yang dikutip di atas sama dalam output v8.71 seperti pada output v9.02 ....
Pembaruan 2:
URL entri bug di bugzilla Ghostscript:
Pembaruan 3:
Bug ini tampaknya telah diperbaiki sementara waktu. Saya tidak melihat itu terjadi dengan versi Ghostscript saya sudah lagi mengujinya dengan: Git saat ini (v9.10GIT) atau dengan Ghostscript v9.06.
sumber
Jika Anda memindai halaman dengan teks ke dalam PDF dan menjalankan aplikasi OCR di atasnya, maka teks akan ditambahkan ke halaman, tetapi "mode rendering teks" diatur ke tidak terlihat. Itu ada di sana, tetapi tidak ditampilkan di layar (atau di atas kertas jika dicetak). Apa yang Anda lihat atau cetak adalah gambar yang dipindai asli.
Bagaimana kita bisa membuat teks yang tidak terlihat terlihat?
Nah, kita bisa mengedit PDF ... Kode PDF untuk mengatur rendering teks menjadi tak terlihat adalah ini:
Anda tidak dapat menemukan string ini (belum) di from_abbyy.pdf asli atau di from_ghostscript.pdf karena bagian dari PDF dikompresi. Jadi kami membuka kompresi mereka sejauh mungkin dengan bantuan
qpdf
:Sekarang kita dapat menemukan string di atas dengan mudah (dan hanya ada satu kejadian di setiap file).
Mari kita beralih ini ke salah satu mode rendering teks yang terlihat. Secara keseluruhan, kita dapat memilih di antara 8 mode rendering teks ini:
Jika saya menggunakan mode "isi", teks dari OCR mungkin akan terlihat tidak begitu bagus di atas gambar pemindaian yang mendasarinya. Karena itu saya lebih suka varian "stroke". Jadi saya cukup mengubah baris di atas untuk membaca
Melihat PDF yang dimodifikasi ini, saya tidak suka, karena linewidth default terlalu tebal untuk selera saya. Juga, warna garis luar garis hitam (standar); Saya lebih suka merah sehingga memiliki kontras dengan bentuk yang awalnya dipindai. Oleh karena itu saya menambahkan beberapa kode ke bagian depan baris ini yang menetapkan linewidth menjadi seperempat poin:
dan beberapa lainnya untuk mengatur warna stroke menjadi merah:
Baris lengkap sekarang terbaca:
Itu saja.
Perhatikan, bahwa manipulasi kecil kami telah merusak file, karena "TOC" (dalam istilah teknis:
xref
tabelnya) sekarang tidak lagi valid. Acrobat Reader atau Acrobat Professional akan tetap membukanya (tanpa mengeluh bahkan) dan diam-diam "memperbaiki" bagian xref dari file tersebut. Pemirsa PDF lain mungkin menolak file tersebut, tetapi untuk saat ini kami tidak peduli ...Berikut screenshot dari hasilnya: (Screenshot pertama diperbesar menjadi lebar jendela.) (Screenshot kedua diperbesar menjadi 800%.)
Garis merah adalah teks pindaian yang dibuat terlihat sekarang, seperti yang kita inginkan.
Saya melakukan prosedur yang sama seperti diuraikan di atas untuk kedua file from_abbyy.pdf dan after_ghostscript.pdf . Saya membuka kedua hasil dalam 2 contoh Acrobat Reader yang berbeda. Jika kita membuat keduanya memperbesar nilai yang sama dan memaksimalkan kedua jendela, maka mudah untuk beralih tampilan antara kedua file melalui
[alt]+[tab]
. Ini adalah cara yang baik untuk mengungkapkan bahkan perbedaan render terbaik antara dua file PDF.Hasil saya adalah: bahkan tidak ada satu pixel pun yang berbeda antara input Ghostscript (v9.02) dan outputnya untuk file ini. Tetapi ada perbedaan yang cukup besar jika Anda ingin menyalin teks bukan ...
sumber
Saya tidak melihat masalah yang dijelaskan. Saya membuka file PDF 'setelah' dengan Acrobat Professional 9.0 dan teksnya disalin dan ditempelkan dengan benar.
Ghostscript sepenuhnya menginterpretasikan file PDF, dan menghasilkan file PDF baru berdasarkan apa yang ditafsirkannya, itu tidak memiliki hubungan dengan file asli selain dari itu mencatat posisi teks.
Karena serangkaian fitur PDF yang kaya, karakter dapat diposisikan di tempat yang sama dengan menggunakan beberapa metode berbeda. Jadi tidak ada yang salah atau tidak terduga dalam cara GS memproduksi file PDF.
Mengingat bahwa teks dapat disimpan dengan benar, ini adalah masalah heuristik Acrobat yang memutuskan apakah dua karakter 'terdekat' berdekatan atau memiliki ruang di antara, ketika ditangani sebagai ASCII berturut-turut.
Saya tidak percaya masalahnya bisa menjadi metrik font yang tertanam karena alasan sederhana bahwa font tersebut tidak tertanam :-) Font yang digunakan adalah Helvetica, yang tidak tertanam dalam dokumen, dan karenanya Acrobat (setidaknya untuk saya) menggunakan ArialMT. Perhatikan bahwa file PDF 'asli' juga tidak mengandung font.
Saya akhirnya akan melihat bug yang dilaporkan, tetapi tidak akan segera dan saya ragu ada yang bisa (atau akan) kami lakukan. Sepertinya saya ini adalah konsekuensi tak terhindarkan dari heuristik. Ini mungkin membantu untuk menanamkan font meskipun, sehingga setidaknya mereka akan konsisten.
sumber
Dari laporan bug Ghostscript di:
http://bugs.ghostscript.com/show_bug.cgi?id=692206
Saya sekarang dapat mereproduksi masalah ini, dan ini bukan regresi dari 8,71, ini merupakan perkembangan (dan perubahan Adobe).
8,71 dikirimkan bersama bug yang menyebabkannya menulis CMU ToUnicode yang tidak valid. Dokumentasi Adobe yang menyesatkan dan kontradiktif menyebabkan CMap ditulis sebagai CMap, padahal sebenarnya ToUnicode CMaps memiliki aturannya sendiri, yang tidak kompatibel.
ToUnicode CMaps biasanya hanya digunakan untuk mencari dan menyalin / menempel. Sesuai namanya, kode tersebut digunakan untuk memetakan kode karakter ke titik kode Unicode. ToUnicode CMap dalam file PDF 8,71 tidak digunakan, karena tidak valid, yang ada di versi yang lebih baru adalah valid, dan Acrobat diketahui menggunakannya.
Tampaknya dalam Acrobat Reader hingga dan termasuk 9.2 keberadaan data ToUnicode tidak ada bedanya. Pada titik tertentu setelah 9.2 mekanisme pencarian, berubah, dan Acrobat tampaknya menggunakan dua mekanisme yang berbeda tergantung pada apakah ada ToUnicode CMap. Saya tidak memiliki akses ke Acrobat Pro setelah 9.2 dan hanya baru saja menginstal Reader X, saya tidak memiliki apa-apa di antaranya.
Metode 'no Unicode' bekerja di semua versi Acrobat, metode 'Unicode' gagal pada versi yang lebih baru.
Saya menunjukkan ini dengan spasi putih referensi ke ToUnicode CMap dari FontDescriptor. Jika diperlukan saya dapat membuat berbagai file tersedia, tetapi mereka besar karena mereka didekompresi.
Karena pencarian adalah upaya heuristik dalam PDF, maka tidak mungkin untuk menjamin hasilnya. Perubahan perilaku adalah karena Acrobat, bukan Ghostscript, dan perubahan dalam Ghostscript adalah untuk memperbaiki bug yang sebenarnya, jadi sebuah perkembangan, bukan regresi.
sumber
Untuk memeriksa apakah masalah ini terhubung ke 'font yang tertanam' atau tidak, saya telah membuat konversi lain, di Linux. Saya menggunakan perintah ini untuk membuat Ghostscript menyematkan font yang digunakan:
Ghostscript akan menampilkan hasil ini:
Ghostscript telah menyematkan font dari keluarga font yang bernama NimbusSanL . Jadi tidak ada lagi ArialMT , seperti yang digunakan untuk rendering di layar oleh Acrobat Reader sebagai pengganti Helvetica yang hilang (lihat juga komentar dari pengguna701996 di atas). Perhatikan, Ghostscript akan mengganti nama font itu menjadi Helvetica segera setelah tertanam. Tapi itu bukan masalah, karena NimbusSanL diciptakan sebagai tiruan dari Helvetica ...
Namun, bahkan untuk output PDF ini, copy'n'paste dari Acrobat Reader tidak akan berfungsi dengan baik. Terlepas dari kenyataan bahwa Reader tidak perlu lagi menggunakan ArialMT untuk menggantikan Helvetica. Pembaca sekarang menggunakan kloning NimbusSanL / Helvetica yang tertanam.
Sejauh ini kami telah menetapkan fakta-fakta ini tentang teks copy'n'pasting dari Acrobat Reader atau Acrobat Professional:
Itu berlaku untuk GS pada Windows XP serta GS di Linux.
Output of Ghostscript v8.71 TIDAK berfungsi dengan baik untuk file ini.
Itu berlaku untuk GS pada Windows XP serta GS di Linux.
Bahkan untuk output di mana copy'n'paste rusak, Simpan sebagai Teks ... tidak.
Saya masih tidak mengerti mengapa ini harus terjadi. Tapi itu jelas terlihat sebagai semacam (mungkin minor) regresi Ghostscript dalam perjalanan dari v8.71 ke 9.02.
Sekarang mari kita coba perangkat lunak penampil PDF lainnya dengan PDF 'kritis':
Catatan, masih ada perbedaan lain, tetapi sangat kecil antara semua pembaca PDF 'berfungsi' di mana putusan saya adalah copy'n'paste works . Seperti tanda hubung yang hilang di sini, atau beberapa spasi ganda di antara kata-kata di sana, dan hal-hal lain semacam itu ... Saya tidak memiliki penjelasan saat ini mengapa ini mungkin, tapi mungkin itu penyebab utama yang sama mengapa ada kesenjangan besar antara produk Adobe (yang tidak memiliki copy'n'paste yang berfungsi untuk file ini) yang satu memiliki dan yang lainnya di dunia.
sumber