Buat atau perbarui PDF untuk menyertakan tanda air terenkripsi dan tersembunyi?

10

Latar Belakang

Menggunakan LaTeX untuk menulis buku. Ketika pengguna membeli buku, PDF akan dibuat secara otomatis.

Masalah

PDF harus memiliki tanda air yang menyertakan nama orang tersebut dan informasi kontak.

Pertanyaan

Perangkat lunak apa yang memenuhi kriteria berikut:

  • Menerapkan tanda air terenkripsi dan tak terlihat ke PDF
  • Sumber Terbuka
  • Platform independen (Linux, Windows)
  • Cepat (menandai 200 halaman PDF dalam waktu kurang dari 1 detik)
  • Pemrosesan batch (khusus didorong oleh perintah)
  • Tahan serangan kolusi
  • Non-rapuh (mis., PDF -> EPS -> PDF masih mengandung tanda air)
  • Didokumentasikan dengan baik (menunjukkan contoh penggunaan)

Ide & Sumber Daya

Beberapa pemikiran dan temuan:

Masalah dengan NLP adalah bahwa kesalahan tata bahasa dapat diperkenalkan. Masalah dengan steganografi adalah bahwa gambar-gambar tersebut bersumber dari cache gambar, dan dengan demikian menciptakan kembali cache tersebut dengan gambar-gambar yang diberi watermark akan menyebabkan penundaan saat membuat PDF (saya hanya bisa menghapus satu gambar dari cache, tetapi itu bukan solusi yang elegan).

Terima kasih!

Dave Jarvis
sumber
Harap modifikasi uraian persyaratan Anda sedikit, jika tidak jelas tidak jelas. "tanda air yang tidak terdeteksi" jelas bukan yang Anda inginkan ... jika tidak, bagaimana Anda akan mendeteksinya jika perlu?
Kurt Pfeifle
Agak tidak jelas apa sebenarnya tujuan sistem Anda dikandung: Mendeteksi jika PDF diteruskan ke pengguna lain, meskipun lisensi Anda melarang ini? Mendeteksi apakah PDF dicetak di atas kertas, meskipun lisensi Anda melarang ini? Lacak cara PDF tertentu melalui internet dan lacak ketika dibuka? Atau sesuatu yang lain?
Kurt Pfeifle
@pipitas: Jika versi terdaftar dari PDF dirilis, tanpa izin, ke alam bebas, saya ingin tahu siapa yang merilisnya. Tetapi jika orang dapat melihat bahwa PDF memiliki watermark, maka watermark menjadi lebih mudah untuk dielakkan.
Dave Jarvis

Jawaban:

6

Saya melakukan sesuatu yang serupa beberapa tahun yang lalu. Itu tidak memenuhi semua kriteria "keras" Anda. Ini berfungsi seperti ini:

  • Saya menempatkan area "diklik" berukuran hampir 2x2 titik yang dapat dideteksi pada beberapa tempat acak di salah satu perbatasan halaman PDF acak. Sangat tidak mungkin ditemukan secara tidak sengaja (di antara banyak hotspot lain yang sangat jelas dapat diklik yang ada dalam PDF ...).

  • Jika Anda mengklik tautannya, itu akan membawa Anda ke halaman web http://my.own.site/project/87245e386722ad77b4212dbec4f0e912, dengan beberapa poin bullet "errata". (Apakah saya menyebutkan bahwa 87245e386722ad77b4212dbec4f0e912itu adalah MD5 hash dari nama orang + data kontak yang saya simpan disimpan dalam tabel DB? :-)

Jelas, ini tidak melindungi terhadap pencetakan + pemindaian + pemutaran atau terhadap siklus "refrying" PDF. Dan itu juga bergantung pada beberapa tingkat "keamanan oleh ketidakjelasan".

Inilah cara Anda menggunakan Ghostscript untuk menambahkan hotspot yang dapat diklik ke sudut kiri bawah halaman 1 dari random-in.pdf:

gs \
 -o random-out.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "[ /Rect [1 1 3 3]" \
 -c "  /Color [1 1 1]" \
 -c "  /Page 1" \
 -c "  /Action <</Subtype /URI" \
 -c "  /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
 -c "  /Subtype /Link" \
 -c "  /ANN pdfmark" \
 -f random-in.pdf

Untuk membuat area yang dapat diklik lebih besar dan perubahan yang terlihat di atas parameter commandline seperti ini:

 [....]
 -c "[/Rect [1 1 50 50]" \
 -c "  /Color [1 0 0]" \
 [....]

Yang lebih sederhana lagi adalah membuat dan menyimpan hash MD5 dari PDF di basis data Anda. Ini akan menjadi unik untuk setiap PDF yang Anda buat, karena dokumen UUID dan CreationDate dan ModDate di dalam meta data-nya. Tentu saja, ini juga hanya memungkinkan untuk melacak PDF asli dalam bentuk digital mereka ...

Kurt Pfeifle
sumber
Apakah Anda pernah menemukan PDF di alam bebas dan melacaknya kembali menggunakan teknik ini?
Dave Jarvis
@ Dave Jarvis: Ya, saya lakukan, dengan cara ... Tapi itu bukan hal yang "serius", saya tidak punya minat nyata untuk melacak. Saya melakukannya sebagai bukti konsep saja, dan setelah sekitar 6 bulan saya mematikan server web "pelacakan". Itu untuk server jaringan PDF, saya telah mengatur di dalam perusahaan pelanggan. "Pelacak" mirip dengan yang dijelaskan di atas, tetapi menggunakan area yang dapat diklik halaman penuh. Saya baru saja melacak jumlah "hit" di file log apache ....
Kurt Pfeifle
Ide bagus, tetapi perhatikan bahwa menjalankan GhostScript melalui PDF seperti itu dapat menurunkan gambar sampel yang dikandungnya, karena GhostScript tidak mendukung tidak mendekompresi mereka (yang kehilangan informasi dari gambar yang gaya JPEG dikompresi dalam input) dan cenderung terapkan kompresi gaya JPEG ke semua gambar (bahkan yang baru saja didekompresi) ...
SamB
@ SamB: Saya pikir Anda dapat menambah -dJPEQ=100 -dQFActor=1.0perintah Ghostscript untuk memastikan Anda akan mempertahankan 100% kualitas JPEG yang ada. Tapi tidak, saya tidak melihat ada penurunan kualitas gambar di file saya jika saya menggunakan pengaturan umum -dPDFSETTINGS=/prepressketika kembali menyaring setiap PDF dengan Ghostscript ....
Kurt Pfeifle
[lanjutan] Dan tidak, bukan hanya kompresi JPEG yang ditawarkan untuk gambar dari Ghostscript - Anda dapat menggunakan -dColorImageFilter=/FlateEncode(yang merupakan lossless ZIP) untuk mengganti default =/DCTEncode(yang merupakan JPEG lossy) di versi GS yang lebih lama. Karena GS v7.21 defaultnya adalah =/FlateEncode... Sama seperti untuk warna juga berlaku untuk -dGrayImageFilter=...( -dMonoImageFilter=...digunakan /CCITTFaxEncodesecara default.)
Kurt Pfeifle
1

Sangat sulit dan saya tidak yakin ini akan menjawab semua pertanyaan Anda sama sekali.

Saya tidak yakin dengan solusi all-in-one yang dapat melakukan ini, atau secara acak.

Namun, jika saya ditugaskan dengan ini, saya akan berpikir bahwa cara termudah adalah menyimpan dokumen dalam format perantara seperti HTML yang diformat, atau sejenisnya.

Menggunakan file CSS cetak atau sejenisnya, Anda bisa mendapatkan tata letak yang identik dengan buku dan menggunakan semacam skrip untuk mengacak gambar, konten atau apa pun dan komponen PDF sisi server yang merakit dokumen kembali.

jadi - misalnya, pada seseorang yang membeli dokumen, skrip pembelian Anda dapat secara acak memilih nomor yang mengidentifikasi mekanisme perlindungan (misalnya gambar pertama, gambar kedua, teks di suatu tempat dll.), dan kemudian menghasilkan tautan unduhan unik.

Ketika tautan unduhan itu dipanggil, ia memeriksa nomornya, melakukan operasi dan mengkompilasi ke pdf kemudian mengunduhnya ke klien.

Sekali lagi, saya tahu ini tidak akan mudah / lurus ke depan, tetapi Anda tidak meminta sesuatu yang mudah dan ini adalah cara terbaik yang dapat saya pikirkan.

William Hilsum
sumber
@ Dave Jarvis - Saya mengerti sepenuhnya apa yang Anda coba lakukan ... seperti yang saya katakan, saya tidak yakin solusi terbaik, tapi apa yang saya katakan setidaknya harus bekerja ... hanya jauh dari mudah.
William Hilsum
@Dave Jarvis - Apa yang saya coba katakan / sampaikan adalah bahwa saya belum pernah melihat semuanya dalam satu / cara mudah untuk melakukan apa yang Anda inginkan, tetapi menggunakan PHP / ASP.Net, lebih mudah untuk menulis skrip / menelepon pihak ketiga komponen. Saya akan berpikir bahwa jika Anda memiliki seluruh dokumen dalam HTML diformat dengan benar / tepat, akan sangat mudah untuk menggunakan komponen PDF untuk mengkonversi .... Misalnya, katakanlah ada 100 halaman dan gambar di halaman 31, Anda bisa memiliki halaman 1-30 sebagai PDF dan halaman 32-100 sebagai PDF, halaman 31 akan dihasilkan dan diformat dalam html (dengan gaya sisa buku ini), Anda kemudian dapat menggunakan 1/2
William Hilsum
komponen pdf yang akan mendapatkan PDF pertama, rahasia halaman html, dapatkan PDF kedua dan hasilkan pdf baru yang menggabungkan semuanya. Halaman yang dihasilkan dapat memanggil skrip, dapat melakukan steganografi (tidak yakin pada kata kerjanya!) Atau apa pun yang Anda inginkan ... ada banyak komponen pdf (gratis dan berbayar) - ini adalah salah satu contohnya ... componentone.com/SuperProducts / PDF Saya harap ini membuatnya sedikit lebih jelas tentang apa yang saya coba sampaikan - hanya sangat sulit untuk dijelaskan. 2/2
William Hilsum
@Dave Jarvis - ehh, tidak persis ... Seperti yang saya katakan, sangat sulit untuk dijelaskan .... Beberapa komponen PDF luar biasa bersama dengan CSS / gaya cetak. Sebagai contoh, lihat Moodle. Dimungkinkan untuk sepenuhnya memformat halaman web dan membuat cetakan terlihat seperti buku / ikuti gaya. Anda kemudian dapat menggunakan komponen PDF untuk mengekspor / menyimpan PERSIS seperti bagaimana seharusnya terlihat pada hasil akhir. Anda dapat dengan mudah menghasilkan gambar yang Anda butuhkan dan memiliki teks, dan merakitnya (mulus ke pengguna akhir) sebagai file PDF tunggal. Saya hanya menyebutkan web / php / asp.net karena saya pikir ini adalah cara termudah untuk mendapatkan apa yang Anda inginkan.
William Hilsum
@ Dave Jarvis: Saya kira Anda tidak menggunakan pdfTeX, kalau begitu? (Atau apakah Anda lebih khawatir tentang pengguna yang melakukan konversi pdf-> ps-> dan menurunkan contoh gambar dalam proses?). Pokoknya, ps> pdf konversi tidak gambar biasanya mendegradasi, karena GhostScript tidak cukup pintar untuk melestarikan gambar JPEG-gaya dalam bentuk terkompresi, dan cenderung untuk secara otomatis menerapkan kompresi JPEG-gaya untuk setiap gambar yang terjadi pada input. (Penyuling tampaknya dapat diinstruksikan untuk meninggalkan gambar gaya JPEG sendirian, tetapi apakah ada yang benar-benar memilikinya?)
SamB