@ N0nuf के नक्शेकदम पर चलते हुए, मैंने एक पीडीएफ स्क्रिप्ट को PDFinfo के साथ एक विशिष्ट फ़ोल्डर में सभी PDF की जांच करने और इसे ठीक करने के प्रयास के रूप में टूटने पर cpdf के माध्यम से धकेलने के लिए लिखा था:
@ECHO OFF
FOR %%f in (*.PDF) DO (
echo %%f
pdfinfo "%%f" 2>&1 | findstr /I "error" >nul 2>&1
if not errorlevel 1 (
echo "bad -> try to fix"
@cpdf -i %%f -o %%f_.pdf 2>NUL
mv %%f .\\bak\\%%f
) else (
REM echo good
)
)
@ECHO ON
या बैश स्क्रिप्ट के समान:
for file in $(find . -iname "*.pdf")
do
echo "$file"
pdfinfo "$file" 2>&1 | grep -i 'error' &> /dev/null
if [ $? == 0 ]; then
echo "broken -> try to fix"
cpdf -i "$file" -o "$file"_.pdf
fi
done
टूटे हुए PDF को एक सबफ़ोल्डर \ bak में ले जाया जाएगा और फिर से बनाए गए PDF को प्रत्यय _.pdf मिलेगा (जो कि मेरे लिए सही नहीं है, लेकिन काफी अच्छा है)। नोट: एक पुनर्निर्मित पीडीएफ में कम त्रुटियां हैं और एक नियमित पीडीएफ दर्शक के साथ देखा जाना चाहिए। लेकिन इसका मतलब यह नहीं है कि आप अपनी सारी सामग्री वापस पा लें। अप्राप्य सामग्री खाली पृष्ठों की ओर ले जाती है।
मैंने JHOVE (ओपन सोर्स फाइल फॉर्मेट आइडेंटिफिकेशन, वेलिडेशन एंड कैरेक्टराइजेशन टूल) के साथ भी ऐसा ही प्रयास किया, जैसा कि @kraftydevil द्वारा यहाँ सुझाया गया है: जाँच करें कि क्या पीडीएफ फाइलें लिनक्स पर कमांड लाइन का उपयोग करके दूषित हैं और अब यह पुष्टि कर सकती है कि यह भी एक वैध तरीका है। (पहले मुझे कम सफलता मिली थी। लेकिन फिर मैंने देखा कि मैंने JHOVE के आउटपुट को सही तरीके से नहीं संभाला है।)
एक पाठ संपादक (हटाए गए स्ट्रीम, इसलिए पृष्ठ मेरे पीडीएफ दर्शक, रेंडर किए गए पीडीएफ टैग और कुछ बिट्स को स्थानांतरित करने में विफल रहे) के साथ दोनों तरीकों से मैंने पीडीएफ से यादृच्छिक भागों को हटा दिया और बदल दिया। परिणाम है: PDFinfo और JHOVE दोनों क्षतिग्रस्त फ़ाइलों को सही ढंग से स्पॉट करने में सक्षम हैं (JHOVE कुछ मामलों में और भी संवेदनशील था)।
और यहाँ JHOVE के बराबर स्क्रिप्ट है:
@ECHO OFF
FOR %%f in (*.PDF) DO (
echo %%f
"C:\Program Files (x86)\JHOVE\jhove.bat" -m pdf-hul %%f | findstr /C:"Well-Formed and valid" >nul 2>&1
if not errorlevel 1 (
echo good
) else (
echo "bad -> try to fix"
@cpdf -i %%f -o %%f_.pdf 2>NUL
REM mv %%f .\\bak\\%%f
)
)
@ECHO ON