Batch menghapus komentar dari file PDF

18

Bagaimana saya bisa dengan mudah menghapus semua komentar dan anotasi (ditambahkan dengan Foxit Reader) dari semua PDF dalam folder?

Andrew
sumber
1
apakah ini asumsi yang valid untuk berpikir bahwa Anda hanya menginginkan saran untuk solusi gratis (seperti dalam bir) atau gratis (seperti dalam kebebasan)?
Kurt Pfeifle
@ Pipitas Saya tertarik dengan solusi apa pun.
Andrew

Jawaban:

7

Saya baru saja menyelesaikan masalah ini, dan tidak ada jawaban yang diberikan untuk saya. Apa yang melakukan pekerjaan adalah rewritepdfalat dari paket Ubuntu libcam-pdf-perl:

rewritepdf -C in.pdf out.pdf

Membungkus ini dalam skrip kecil untuk menghapus anotasi dari semua file pdf dalam direktori sekarang mudah:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Uli Fahrenberg
sumber
Bekerja dengan baik :) Beberapa bantuan:. Ubuntu (yaitu, debian) paket di sini packages.debian.org/sid/perl/libcam-pdf-perl Dependences secara otomatis diinstal dengan menggunakan "Ubuntu software center". (Oh, dan hati-hati dengan modal "-C". Saya pertama kali berlari "-c" dan tidak ada yang terjadi, bahkan tidak ada kesalahan yang dihasilkan.)
loved.by.Yesus
5

Asalkan Anda menggunakan sistem Unix:

cd <directory containing PDFs>
find . -type f -name '*.pdf' -exec perl -pi -e 's:/Annots \[[^]]+\]::g' {} +

Ini adalah retasan yang menghapus semua /Annotsperintah dari PDF (perintah yang menarik anotasi). Itu meninggalkan objek penjelasan di sana (Anda dapat membuka PDF dengan editor teks dan mencarinya), mereka tidak digambar.

Divinenephron
sumber
Bisakah Anda menjelaskan RE? Apa yang dilakukan [^]] + match
jftuga
1
@ jftuga, s:(pengganti) /Annots \[(teks " /Annots [") [^]]+(satu contoh atau lebih karakter apa pun selain " ]") \](karakter literal " ]") ::(ganti apa pun yang cocok dengan yang sebelumnya dengan apa-apa) g(ganti beberapa kali per baris jika perlu).
Divinenephron
1
Salah satu bagian yang berpotensi membingungkan dari regex adalah bahwa literal ]biasanya harus diloloskan, tetapi tidak segera setelah ^negasi.
Divinenephron
Ini juga menghilangkan tautan dokumen internal (seperti, saya percaya, itu juga diimplementasikan dalam pdf sebagai / Annots)
Alec Jacobson
3

Belum mengujinya banyak, tetapi yang berikut ini sepertinya berhasil. Ini menghapus semua anotasi, kecuali tautan dokumen internal (yang tampaknya tidak ada jawaban di sini). Script ini tergantung pada pdfrw python library.

#!/usr/bin/python

import sys, pdfrw

try:
    in_path = sys.argv[1]
    out = sys.argv[2]
except:
    print("Usage:\tannotclean IN.pdf OUT.pdf")
    exit(0)

reader = pdfrw.PdfReader(in_path)

for p in reader.pages:
    if p.Annots:
        # See PDF reference, Sec. 12.5.6 for all annotation types
        p.Annots = [a for a in p.Annots if a.Subtype == "/Link"]

pdfrw.PdfWriter(out, trailer=reader).write()

Pemakaian:

  1. Simpan sebagai skrip di suatu tempat (saya anggap sebagai Anda PATH), mis /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. (opsional) pemrosesan batch:
# fish shell syntax
for p in **pdf # pdfs from current directory and subdirectories
    annotclean $p $p.new
    mv $p.new $p # overwrite the old
end 
rien333
sumber
2

Saya pikir Anda dapat melakukannya dengan paling mudah dengan "refrying" the PDF. Pengecekan ulang berarti: pertama mengonversi file ke PostScript, lalu mengonversi PostScript kembali ke PDF. Biasanya refrying disukai, karena biasanya Anda kehilangan kualitas dan beberapa konten. Dalam kasus Anda, Anda ingin kehilangan konten. Penggorengan ulang dapat dilakukan dengan Ghostscript (dan file kumpulan pembantu dikirim bersama - unduh gs900w32.exejika Anda menggunakan Windows), jadi begini, dengan 2 perintah mudah:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
Kurt Pfeifle
sumber
1
Ini tidak bekerja Komentar tertulis tetap ada (bukan sebagai komentar, tetapi sebagai bagian dari pdf).
Andrew
2
Jika komentar benar-benar ditambahkan ke konten PDF, mereka hanya dapat dihapus secara manual. Anotasi PDF aktual terpisah.
CarlF
Apakah ada cara tanpa menggunakan konverter?
pengguna
Ini juga menghapus tautan dokumen internal.
Alec Jacobson
@AlecJacobson: Tentu saja. Jika Anda mengonversi ke PostScript, Anda kehilangan banyak konten "kaya" yang merupakan bagian dari PDF. PostScript tidak memiliki sarana untuk mewakili tautan APA PUN, bahkan tautan dokumen internal ....
Kurt Pfeifle
2

OKE, Anda bilang Anda juga akan mempertimbangkan solusi komersial ....

Saya sarankan Anda mencoba callas pdfToolbox . Ini tersedia untuk Windows dan Mac OS X. (Mereka memiliki CLI untuk Linux juga, tetapi Anda hanya dapat menggunakan "profil" yang sudah dikonfigurasikan dengannya. Dengan Windows GUI, Anda dapat membuat profil khusus dan menggunakannya kembali dengan CLI Linux.

PdfToolbox memiliki banyak dan banyak cara untuk memanipulasi dan memperbaiki banyak, banyak masalah PDF individual.

Salah satu "Perbaikan" adalah untuk menghapus semua anotasi.

Anda tidak perlu mengeluarkan uang untuk mengujinya terlebih dahulu; callas memberikan lisensi percobaan 14 hari secara gratis.

Kurt Pfeifle
sumber
Memang ada cara untuk menghapus semua anotasi, tapi saya tidak yakin bagaimana melakukan pekerjaan batch.
Andrew
Entah tentang versi sebelumnya --- tetapi rilis pdfToolbox5 terbaru memungkinkan untuk menjalankannya dalam mode batch terhadap folder lengkap yang berisi PDF .....
Kurt Pfeifle