পিডিএফ ফাইল অখণ্ডতা যাচাই / যাচাই করুন


11

আমি কি পিডিএফ সংরক্ষণাগারগুলিতে (সমস্ত ডিরেক্টরি) চালাতে পারি এমন কোনও সরঞ্জাম রয়েছে এবং শেষ পর্যন্ত এটি দুর্নীতিগ্রস্থ / অবৈধ পিডিএফগুলি তালিকাভুক্ত / চিহ্নিত করে?

আমার কম্পিউটারে (উইন্ডোজ মেশিন) শত শত পিডিএফ ফাইল রয়েছে (ডকুমেন্টেশন ইত্যাদির সাথে সম্পর্কিত) এবং প্রায়শই আমি ইমেলের মাধ্যমে কয়েক ডজন পিডিএফ পাঠাতে / গ্রহণ করতে পারি। এটি এখন একটি স্বাভাবিক রুটিন যেটি আমি পেয়েছি বা প্রেরণ করেছি এটি দূষিত। কখনও কখনও উত্স ফাইল (যেমন ওয়ার্ড ফাইল বা টেক্সট ফাইল অনুপস্থিত / তাত্ক্ষণিকভাবে উপলব্ধ না হয়) যখন এটি গুরুতর সমস্যা সৃষ্টি করে।

এই হাজার হাজার পিডিএফ চেক করা সীমাবদ্ধ সময়ে সম্ভব নয়, তাই আমি এমন একটি সরঞ্জাম অনুসন্ধান করেছি যা আমি একবার চালাতে পারি এবং এটি সমস্ত পিডিএফ (ডিরেক্টরি এবং উপ-ডিরেক্টরিতে) স্ক্যান করে, এবং শেষ পর্যন্ত আমি সেই ফাইলগুলির একটি তালিকা পাই যা আমার আবার করা উচিত -সৃষ্টি. এখন অবধি, দেখে মনে হচ্ছে এরকম কোনও সরঞ্জাম নেই।


2
আপনি যদি লিনাক্সে থাকেন তবে পিডিফিনফো চেষ্টা করুন। একবার দেখুন: superuser.com
প্রশ্নগুলি


উত্তর:


6

পিডিএফ ফাইল ব্যবহার করে পিডিএফ ফাইল বৈধ কিনা তা পরীক্ষা করা বেশ সহজ। পিডিএফ ল্যাবগুলি থেকে পিডিএফটিকের জন্য একটি ফ্রি জিইউআই পাওয়া যায় । আপনি যখন এই সরঞ্জামটি চালান, আপনি একাধিক ডিরেক্টরি থেকে (ফাইল যুক্ত বোতাম ব্যবহার করে) আপনার ইচ্ছামতো পিডিএফ লোড করতে পারেন এবং তারপরে এটি খুব দ্রুত এই পিডিএফ ফাইলগুলির পৃষ্ঠাগুলি অ্যাক্সেস শুরু করবে।

যদি নির্বাচিত পিডিএফগুলির মধ্যে কোনও ফাইল বৈধ পিডিএফ না হয় তবে এই ইউটিলিটি ত্রুটি সম্পর্কে একটি বার্তা প্রদর্শন করবে এবং এটি নির্বাচন উইন্ডো থেকে স্বয়ংক্রিয়ভাবে সরিয়ে ফেলবে।

অতএব আপনি পিডিএফটেকের সাহায্যে এই পদ্ধতিটি ব্যবহার করে অনেক ঘন্টা সঞ্চয় করতে পারেন। অতিরিক্তভাবে, আপনার যদি মাল্টিকোর সিপিইউ থাকে, আপনি এই ইউটিলিটির একাধিক ইনস্ট্যান্স চালাতে পারেন এবং প্রতিটি ইভেন্টে কয়েকশ পিডিএফ ফেলে দিতে পারেন।

আমি গত 1 বছর থেকে এই সফ্টওয়্যারটি ব্যবহার করছি এবং এটি এখন পর্যন্ত ব্যবহৃত সবচেয়ে সহজ পিডিএফ সরঞ্জাম।


2
অন্যথা, সরঞ্জাম (pdfinfo.exe) লিঙ্ক marcwho উল্লেখ থেকে পাওয়া যায়, আপনি যা করতে পারেন ব্যবহার cdমধ্যে FolderContainingPDFsএবং Windows শেল নিম্নলিখিত কমান্ডটি প্রয়োগ করুন, এবং এটি একটি লগ ফাইল অবৈধ PDF ফাইল চিহ্নিত করা হবে: FORFILES /S /M *.pdf /C "cmd /c echo. & echo @path @fname & D:\XPDF_3.04\bin64\pdfinfo.exe @file" 1>text.txt 2>&1
মুবীন শহীদ

4

দুর্নীতির জন্য পিডিএফ ফাইলগুলি পরীক্ষা করতে আমি xpdfbin-win প্যাকেজ এবং cpdf.exe থেকে "pdfinfo.exe" ব্যবহার করেছি, তবে বাইনারি প্রয়োজন না হলে জড়িত থাকতে চাইনি।

আমি পড়লাম যে নতুন পিডিএফ ফর্ম্যাটগুলির শেষে একটি পঠনযোগ্য এক্সএমএল ডেটা ক্যাটালগ রয়েছে, তাই আমি নিয়মিত উইন্ডোজ নোটপ্যাড.এক্সে পিডিএফটি খুললাম এবং অপঠনযোগ্য ডেটা শেষ পর্যন্ত স্ক্রোল করে রেখেছি এবং বেশ কয়েকটি পঠনযোগ্য কীগুলি দেখেছি। আমার কেবল একটি কী প্রয়োজন, তবে ক্রিয়েশনডেট এবং মোডেডেট উভয়ই বেছে নেওয়া পছন্দ করেছে।

নিম্নলিখিত পাওয়ারশেল (পিএস) স্ক্রিপ্টটি বর্তমান ডিরেক্টরিতে সমস্ত পিডিএফ ফাইল চেক করবে এবং প্রত্যেকের অবস্থানকে একটি পাঠ্য ফাইলে আউটপুট করবে (! ফলাফলগুলি.লগ)। 35,000 পিডিএফ ফাইলের বিপরীতে এটি চালাতে 2 মিনিট সময় লেগেছে। আমি যারা PS তে নতুন তাদের জন্য মন্তব্য যুক্ত করার চেষ্টা করেছি। আশা করি এটি কারও কিছুটা সময় সাশ্রয় করবে। এটি করার সম্ভবত আরও ভাল উপায় আছে তবে এটি আমার উদ্দেশ্যে নির্দ্বিধায় কাজ করে এবং ত্রুটিগুলি নীরবে পরিচালনা করে। শুরুতে আপনাকে নিম্নলিখিতটি সংজ্ঞায়িত করতে হতে পারে: আপনি যদি স্ক্রিনে ত্রুটি দেখতে পান তবে A ErrorActionPreferences = "SilentlyContinue"।

নিম্নলিখিতটি কোনও পাঠ্য ফাইলে অনুলিপি করুন এবং এটিকে যথাযথভাবে নাম দিন (উদা: চেকপিডিএফ.পিএস 1) বা পিএস খুলুন এবং কনসোলে এটি পরীক্ষা করে আটকানোর জন্য পিডিএফ ফাইল ধারণকারী ডিরেক্টরিতে ব্রাউজ করুন।

#
# PowerShell v4.0
#
# Get all PDF files in current directory
#
$items = Get-ChildItem | Where-Object {$_.Extension -eq ".pdf"}

$logFile = "!RESULTS.log"
$badCounter = 0
$goodCounter = 0
$msg = "`n`nProcessing " + $items.count + " files... "
Write-Host -nonewline -foregroundcolor Yellow $msg
foreach ($item in $items)
{
    #
    # Suppress error messages
    #
    trap { Write-Output "Error trapped"; continue; }

    #
    # Read raw PDF data
    #
    $pdfText = Get-Content $item -raw

    #
    # Find string (near end of PDF file), if BAD file, ptr will be undefined or 0
    #
    $ptr1 = $pdfText.IndexOf("CreationDate")
    $ptr2 = $pdfText.IndexOf("ModDate")

    #
    # Grab raw dates from file - will ERR if ptr is 0
    #
    try { $cDate = $pdfText.SubString($ptr1, 37); $mDate = $pdfText.SubString($ptr2, 31); }

    #
    # Append filename and bad status to logfile and increment a counter
    # catch block is also where you would rename, move, or delete bad files.
    #
    catch { "*** $item is Broken ***" >> $logFile; $badCounter += 1; continue; }

    #
    # Append filename and good status to logfile
    #
    Write-Output "$item - OK" -EA "Stop" >> $logFile

    #
    # Increment a counter
    #
    $goodCounter += 1
}
#
# Calculate total
#
$totalCounter = $badCounter + $goodCounter

#
# Append 3 blank lines to end of logfile
#
1..3 | %{ Write-Output "" >> $logFile }

#
# Append statistics to end of logfile
#
Write-Output "Total: $totalCounter / BAD: $badCounter / GOOD: $goodCounter" >> $logFile
Write-Output "DONE!`n`n"

3

@ এন0 এনুফের পদক্ষেপ অনুসরণ করে, পিডিফিনফো সহ একটি নির্দিষ্ট ফোল্ডারে সমস্ত পিডিএফ চেক করতে এবং ব্যাগের স্ক্রিপ্ট লিখেছিলাম এবং সিপিডিএফ দিয়ে তা ঠেকানোর চেষ্টা হিসাবে ভাঙা হয়েছে:

@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 পাবে (যা নিখুঁত নয়, তবে আমার পক্ষে যথেষ্ট ভাল)। দ্রষ্টব্য: একটি পুনরায় তৈরি পিডিএফটিতে ত্রুটিগুলি কম থাকে এবং এটি নিয়মিত পিডিএফ দর্শকের সাথে দেখতে পারা উচিত। তবে এর অর্থ এই নয় যে আপনি আপনার সমস্ত সামগ্রী ফিরে পাবেন। অপরিশোধনযোগ্য সামগ্রী খালি পৃষ্ঠাগুলিতে নিয়ে যায়।

আমি এখানে @ ক্রাফটিদেবিলের পরামর্শ অনুসারে JHOVE (ওপেন সোর্স ফাইল ফর্ম্যাট সনাক্তকরণ, বৈধকরণ এবং চরিত্রায়ন সরঞ্জাম) এর সাথেও চেষ্টা করেছি: পিডিএফ ফাইলগুলি লিনাক্সের কমান্ড লাইন ব্যবহার করে দুর্নীতিগ্রস্থ হয়েছে কিনা এবং এখন এটিও একটি বৈধ পদ্ধতির বিষয়টি নিশ্চিত করতে পারে কিনা তা পরীক্ষা করে দেখুন। (প্রথমে আমার কম সাফল্য হয়েছিল। তবে আমি লক্ষ্য করেছি যে আমি JHOVE এর আউটপুট সঠিকভাবে পরিচালনা করিনি))

উভয় পদ্ধতির পরীক্ষা করতে আমি কোনও পাঠ্য সম্পাদক (পিডিএফ থেকে মুছে ফেলা স্ট্রিমস, তাই পৃষ্ঠাগুলি আমার পিডিএফ ভিউয়ারে রেন্ডার করতে ব্যর্থ হয়েছে, পিডিএফ ট্যাগ পরিবর্তন করেছেন, এবং কিছু বিট স্থানান্তরিত করেছেন) এলোমেলো অংশগুলি মুছে ফেলেছি এবং পরিবর্তন করেছি। ফলাফলটি: পিডিফিনফো এবং JHOV দুজনই ক্ষতিগ্রস্থ ফাইলগুলি সঠিকভাবে সনাক্ত করতে সক্ষম হয়েছে (কিছু ক্ষেত্রে JHOVE আরও সংবেদনশীল ছিল)।

এবং এখানে JHOV এর সমতুল্য স্ক্রিপ্ট:

@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


আপনাকে ধন্যবাদ স্কট। আমার ধারণা উইন্ডোজ ব্যাচ ফর-লুপটি অনেক বেশি সংরক্ষণ করে। আমি কেবল নমুনা হিসাবে বাশ স্ক্রিপ্ট বাস্তবায়ন দিয়েছি।
wp78de

: লিনাক্স যাওয়ার জন্য খুব পথ আছে বলে মনে হয় জন্য stackoverflow.com/a/9612232/8291949
wp78de
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.