একটি এনক্রিপ্ট করা পিডিএফ থেকে পাইথন ডেটা এক্সট্রাকশন


12

আমি খাঁটি গণিতে সাম্প্রতিক স্নাতক যারা কেবলমাত্র কয়েকটি প্রাথমিক প্রোগ্রামিং কোর্স নিয়েছি। আমি ইন্টার্নশিপ করছি এবং আমার একটি অভ্যন্তরীণ তথ্য বিশ্লেষণ প্রকল্প রয়েছে। আমাকে গত বছরের অভ্যন্তরীণ পিডিএফগুলি বিশ্লেষণ করতে হবে। পিডিএফগুলি "সুরক্ষিত"। অন্য কথায়, তারা এনক্রিপ্ট করা হয়। আমাদের কাছে পিডিএফ পাসওয়ার্ড নেই, আরও বেশি, আমরা নিশ্চিত নই যে পাসওয়ার্ড রয়েছে কি না not তবে, আমাদের কাছে এই সমস্ত নথি রয়েছে এবং আমরা সেগুলি ম্যানুয়ালি পড়তে পারি। আমরা সেগুলিও মুদ্রণ করতে পারি। পাইথনের সাথে সেগুলি পড়ার লক্ষ্য হ'ল কারণ আমাদের কাছে কিছুটা ধারণা থাকার ভাষা is

প্রথমত, আমি কয়েকটি পাইথন লাইব্রেরি সহ পিডিএফগুলি পড়ার চেষ্টা করেছি। যাইহোক, পাইথন লাইব্রেরিগুলি আমি খুঁজে পেয়েছি যা এনক্রিপ্ট করা পিডিএফগুলি পড়ে না। তখন আমি অ্যাডোব রিডারটি ব্যবহার করে তথ্য রফতানি করতে পারিনি।

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

আমি যে কোডটি প্রদর্শন করছি তা এনক্রিপ্ট করা পিডিএফগুলির সাথে পুরোপুরি কাজ করে তবে এনক্রিপ্ট হওয়া পিডিএফগুলির সাথে নয়। এটি পাইকারপডিএফের পাশাপাশি ডিক্রিপ্ট করা পিডিএফগুলির সাথে কাজ করছে না।

আমি কোড লিখিনি। আমি পাইথন লাইব্রেরি ডকুমেন্টেশন থেকে তা পাওয়া Pykepdf এবং বোর্ড । পাইপডিএফ 2 সমাধানটি আল সুইগার্ট তাঁর "" বোথিং বোরিং স্টাথ উইথ পাইথন "বইয়ে লিখেছিলেন , যা আমি অত্যন্ত সুপারিশ করি। আমি এটিও যাচাই করেছিলাম যে কোডটি আগে সীমাবদ্ধতার সাথে সীমাবদ্ধ করে ঠিকঠাক কাজ করছে।

প্রথম প্রশ্ন, আমি কেন ডিক্রিপ্ট ফাইলগুলি পড়তে পারি না, যদি প্রোগ্রামগুলি এমন ফাইলগুলির সাথে কাজ করে যা কখনও এনক্রিপ্ট করা হয়নি?

দ্বিতীয় প্রশ্ন, আমরা পাইথন দিয়ে কোনওভাবে ডিক্রিপ্ট করা ফাইলগুলি পড়তে পারি? কোন গ্রন্থাগার এটি করতে পারে বা অসম্ভব? সমস্ত ডিক্রিপ্ট করা পিডিএফগুলি কি নিষ্কাশনযোগ্য?

আপনার সময় এবং সাহায্যের জন্য আপনাকে ধন্যবাদ!!!

পাইথন ৩.7, উইন্ডোজ 10, বৃহস্পতি নোটবুকস এবং অ্যানাকোন্ডা 2019.07 ব্যবহার করে আমি এই ফলাফলগুলি পেয়েছি।

Python

import pikepdf
with pikepdf.open("encrypted.pdf") as pdf:
  num_pages = len(pdf.pages)
  del pdf.pages[-1]
  pdf.save("decrypted.pdf")

import tabula
tabula.read_pdf("decrypted.pdf", stream=True)

import PyPDF2
pdfFileObj=open("decrypted.pdf", "rb")
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
pdfReader.numPages
pageObj=pdfReader.getPage(0)
pageObj.extractText()

তাবুলার সাথে, আমি "আউটপুট ফাইলটি খালি আছে" বার্তাটি পাচ্ছি।

পাইপিডিএফ 2 দিয়ে, আমি কেবল '/ এন' পাচ্ছি

আপডেট 10/3/2019 Pdfminer.six (সংস্করণ নভেম্বর 2018)

ডাকপঞ্চে পোস্ট করা সমাধানটি ব্যবহার করে আমি আরও ভাল ফলাফল পেয়েছি । ডিক্রিপ্ট করা ফাইলের জন্য, আমি লেবেলগুলি পেয়েছি, তবে ডেটা নয়। এনক্রিপ্ট করা ফাইলের সাথে একই ঘটনা ঘটে। যে ফাইলটি কখনও এনক্রিপ্ট করা হয়নি তার জন্য নিখুঁত কাজ করে। আমার যেমন এনক্রিপ্ট করা বা ডিক্রিপ্ট করা ফাইলগুলির ডেটা এবং লেবেলগুলির প্রয়োজন, এই কোডটি আমার পক্ষে কাজ করে না। সেই বিশ্লেষণের জন্য, আমি pdfminer.six ব্যবহার করেছি পাইথন লাইব্রেরি যা নভেম্বর 2018 এ প্রকাশিত হয়েছিল P তাদের ডকুমেন্টেশন অনুসারে " পাইক্রিপডোডোম হ'ল নিম্ন-স্তরের ক্রিপ্টোগ্রাফিক আদিমগুলির একটি স্ব-অন্তর্ভুক্ত পাইথন প্যাকেজ .."

কোডটি স্ট্যাক এক্সচেঞ্জের প্রশ্নে রয়েছে: পাইথনে পিডিএফমাইনার ব্যবহার করে একটি পিডিএফ ফাইল থেকে পাঠ্য আহরণ করা?

আপনি যদি আমার পরীক্ষার পুনরাবৃত্তি করতে চান তবে আমি পছন্দ করব। বর্ণনাটি এখানে:

1) এই প্রশ্নে উল্লিখিত কোডগুলি এমন কোনও পিডিএফ দিয়ে চালান যা কখনও এনক্রিপ্ট করা হয়নি।

2) পিডিএফ "সিকিউর" দিয়ে এটি করুন (এটি একটি শব্দ যা অ্যাডোব ব্যবহার করে), আমি এটিকে এনক্রিপ্ট করা পিডিএফ বলছি। একটি জেনেরিক ফর্ম ব্যবহার করুন যা আপনি গুগল ব্যবহার করে খুঁজে পেতে পারেন। আপনি এটি ডাউনলোড করার পরে, আপনাকে ক্ষেত্রগুলি পূরণ করতে হবে। অন্যথায়, আপনি লেবেলগুলি পরীক্ষা করছেন, তবে ক্ষেত্রগুলি নয়। তথ্য ক্ষেত্রগুলি হয়।

3) পাইকেপিডিএফ ব্যবহার করে এনক্রিপ্ট করা পিডিএফটি ডিক্রিপ্ট করুন। এটি ডিক্রিপ্ট করা পিডিএফ হবে।

4) ডিক্রিপ্ট করা পিডিএফ ব্যবহার করে কোডগুলি আবার চালান।

আপডেট 10/4/2019 ক্যামেলট (সংস্করণ জুলাই 2019)

পাইথন লাইব্রেরি ক্যামেললট পেয়েছি। সতর্কতা অবলম্বন করুন যে আপনার ক্যামোলেট-পাই 0.7.3 দরকার।

এটি খুব শক্তিশালী এবং পাইথন ৩.7 এর সাথে কাজ করে। এছাড়াও, এটি ব্যবহার করা খুব সহজ। প্রথমত, আপনাকে ঘোস্টস্ক্রিপ্ট ইনস্টল করতে হবে । অন্যথায়, এটি কাজ করবে না। আপনার পান্ডা ইনস্টল করতে হবে । পাইপ ইনস্টল ক্যামোলেট-পাই ব্যবহার করবেন না । পরিবর্তে পাইপ ইনস্টল ক্যামোলেট-পাই [সিভি] ব্যবহার করুন

অনুষ্ঠানের লেখক হলেন বিনায়ক মেহতা। ফ্র্যাঙ্ক ডু একটি ইউটিউব ভিডিওতে এই কোডটি ভাগ করে নিয়েছে "পিথন ব্যবহার করে ক্যামেরলটের সাথে পিডিএফ থেকে ট্যাবুলার ডেটা বের করুন।"

আমি কোডটি যাচাই করেছি এবং এটি এনক্রিপ্ট করা ফাইলগুলির সাথে কাজ করছে। তবে এটি এনক্রিপ্ট করা এবং ডিক্রিপ্ট করা ফাইলগুলির সাথে কাজ করে না এবং এটি আমার লক্ষ্য

ক্যামলল্ট পিডিএফ থেকে টেবিলগুলি পেতে আগ্রহী।

কোডটি এখানে:

Python

import camelot
import pandas
name_table = camelot.read_pdf("uncrypted.pdf")
type(name_table)

#This is a Pandas dataframe
name_table[0]

first_table = name_table[0]   

#Translate camelot table object to a pandas dataframe
first_table.df

first_table.to_excel("unencrypted.xlsx")
#This creates an excel file.
#Same can be done with csv, json, html, or sqlite.

#To get all the tables of the pdf you need to use this code.
for table in name_table:
   print(table.df)

আপডেট 10/7/2019 আমি একটি কৌশল খুঁজে পেয়েছি। যদি আমি অ্যাডোব রিডার দিয়ে সুরক্ষিত পিডিএফটি খুলি এবং মাইক্রোসফ্টটি পিডিএফ ব্যবহার করে মুদ্রণ করি এবং আমি এটি পিডিএফ হিসাবে সংরক্ষণ করি তবে আমি সেই অনুলিপিটি ব্যবহার করে ডেটা বের করতে পারি। আমি পিডিএফ ফাইলটি JSON, এক্সেল, এসকিউএলাইট, সিএসভি, এইচটিএমএল এবং অন্য ফর্ম্যাটে রূপান্তর করতে পারি। এটি আমার প্রশ্নের সম্ভাব্য সমাধান। যাইহোক, আমি এখনও সেই কৌশলটি ছাড়াই এটি করার বিকল্প খুঁজছি কারণ পাইথনের সাথে এটি করা 100% লক্ষ্য। আমি আরও উদ্বিগ্ন যে এনক্রিপশনের আরও ভাল পদ্ধতি ব্যবহার করা হলে কৌশলটি কাজ করবে না। কখনও কখনও নিষ্কাশনযোগ্য অনুলিপি পেতে আপনাকে অ্যাডোব রিডার কয়েকবার ব্যবহার করতে হবে।

আপডেট 10/8/2019। তৃতীয় প্রশ্ন। আমার এখন তৃতীয় প্রশ্ন আছে। সমস্ত সুরক্ষিত / এনক্রিপ্ট পিডিএফ পাসওয়ার্ড সুরক্ষিত আছে? পাইকপিডিএফ কেন কাজ করছে না? আমার অনুমান যে পাইকপিডিএফের বর্তমান সংস্করণটি কিছু ধরণের এনক্রিপশনগুলি ভেঙে ফেলতে পারে তবে সেগুলি সবই নয়। @ কনস্টেট উল্লেখ করেছে যে পাইপডিএফ 2 কোনও প্রকারের সুরক্ষা ভঙ্গ করতে পারে। যাইহোক, আমি তাকে জবাব দিয়েছি যে আমি একটি নিবন্ধ পেয়েছি যে পাইপিডিএফ 2 অ্যাডোব অ্যাক্রোব্যাট প্রো 6.0 দিয়ে তৈরি এনক্রিপশনগুলি ভেঙে ফেলতে পারে, তবে উত্তরোত্তর সংস্করণগুলির সাথে নেই।


2
আমি এই সমস্যাগুলির সাথে পুনরুত্পাদন করতে পারিনি PyPDF2, সবকিছু ঠিকঠাক কাজ করে। আমি pdftkফাইলগুলি এনক্রিপ্ট করতে পাশাপাশি অনলাইন পরিষেবা ব্যবহার করেছি। আপনি কি "ঝামেলা" পিডিএফ ফাইলের লিঙ্ক পোস্ট করতে পারেন?
কনটেন্ট

1
ঠিক আছে ধন্যবাদ! আপনি কি qpdfআপনার ফাইলগুলি ডিক্রিপ্ট করার জন্য ব্যবহার করার চেষ্টা করেছেন ? ক্ষেত্রে এটি কৌশলটি করবে, আপনি subprocessফাইলটিকে বিশ্লেষণের আগে ডিক্রিপ্ট করার জন্য মডিউলটি ব্যবহার করে এটি আপনার স্ক্রিপ্ট থেকে কল করতে পারেন ।
আট ই

1
প্রথমত, পাইপডিএফ 2 অ্যাক্রোব্যাট পিডিএফ ফাইলগুলি => 6.0 ডিক্রিপ্ট করতে পারে না। দ্বিতীয়ত, পাইকপিডিএফ বর্তমানে পাঠ্য নিষ্কাশন প্রয়োগ করে না।
জীবন

1
@ বিগেনার আমি অনুমান করব যে এটি এনক্রিপ্ট করা পিডিএফ লেখার জন্য পাইকপিডিএফ দ্বারা অন্তর্নিহিত ফর্ম্যাটিংয়ের সাথে সম্পর্কযুক্ত।
জীবন

2
"সমস্ত সুরক্ষিত / এনক্রিপ্ট করা পিডিএফ কি পাসওয়ার্ড সুরক্ষিত আছে?" - না X509 শংসাপত্রের উপর ভিত্তি করে প্রাইভেট / পাবলিক কী ক্রিপ্টোগ্রাফি ব্যবহার করে এনডিপ্ট করা পিডিএফ রয়েছে।
mkl

উত্তর:


8

সর্বশেষ আপডেট হয়েছে 10-11-2019

আমি আপনার প্রশ্নটি পুরোপুরি বুঝতে পারলে আমি নিশ্চিত নই। নীচের কোডটি পরিমার্জন করা যেতে পারে তবে এটি এনক্রিপ্ট করা বা এনক্রিপ্ট করা পিডিএফটিতে পড়ে এবং পাঠ্যটি বের করে। আমি আপনার প্রয়োজনীয়তাগুলি ভুল বুঝে থাকলে দয়া করে আমাকে জানান।

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def extract_encrypted_pdf_text(path, encryption_true, decryption_password):

  output = StringIO()

  resource_manager = PDFResourceManager()
  laparams = LAParams()

  device = TextConverter(resource_manager, output, codec='utf-8', laparams=laparams)

  pdf_infile = open(path, 'rb')
  interpreter = PDFPageInterpreter(resource_manager, device)

  page_numbers = set()

  if encryption_true == False:
    for page in PDFPage.get_pages(pdf_infile, page_numbers, maxpages=0, caching=True, check_extractable=True):
      interpreter.process_page(page)

  elif encryption_true == True:
    for page in PDFPage.get_pages(pdf_infile, page_numbers, maxpages=0, password=decryption_password, caching=True, check_extractable=True):
      interpreter.process_page(page)

 text = output.getvalue()
 pdf_infile.close()
 device.close()
 output.close()
return text

results = extract_encrypted_pdf_text('encrypted.pdf', True, 'password')
print (results)

আমি লক্ষ করেছি যে আপনার পাইকপিডিএফ কোডটি এনক্রিপ্ট করা পিডিএফ খোলার জন্য ব্যবহৃত হয়েছে এমন একটি পাসওয়ার্ড অনুপস্থিত, যা এই ত্রুটি বার্তাটি ছুঁড়ে ফেলেছিল :

pikepdf._qpdf.PasswordError: encrypted.pdf: अवैध পাসওয়ার্ড

import pikepdf

with pikepdf.open("encrypted.pdf", password='password') as pdf:
num_pages = len(pdf.pages)
del pdf.pages[-1]
pdf.save("decrypted.pdf")

আপনি পাইকপিডিএফ দ্বারা নির্মিত ডিক্রিপ্টেড.পিডিএফ থেকে পাঠ্যটি বের করতে টিকা ব্যবহার করতে পারেন ।

from tika import parser

parsedPDF = parser.from_file("decrypted.pdf")
pdf = parsedPDF["content"]
pdf = pdf.replace('\n\n', '\n')

অতিরিক্তভাবে, পাইকপিডিএফ বর্তমানে পাঠ্য নিষ্কাশন প্রয়োগ করে না এটিতে সর্বশেষতম রিলিজ v1.6.4 অন্তর্ভুক্ত রয়েছে।


আমি বিভিন্ন এনক্রিপ্ট হওয়া পিডিএফ ফাইল ব্যবহার করে বেশ কয়েকটি পরীক্ষা চালানোর সিদ্ধান্ত নিয়েছি।

আমি সমস্ত এনক্রিপ্ট করা ফাইলগুলির নাম 'encrypted.pdf' রেখেছি এবং তারা সকলেই একই এনক্রিপশন এবং ডিক্রিপশন পাসওয়ার্ড ব্যবহার করেছে।

  1. অ্যাডোব অ্যাক্রোব্যাট 9.0 এবং তারপরে - এনক্রিপশন স্তর 256-বিট এইএস

    • পাইকপিডিএফ এই ফাইলটি ডিক্রিপ্ট করতে সক্ষম হয়েছিল
    • পাইপডিএফ 2 সঠিকভাবে পাঠ্যটি বের করতে পারেনি
    • টিকা সঠিকভাবে পাঠ্য বের করতে পারে
  2. অ্যাডোব অ্যাক্রোব্যাট 6.0 এবং তারপরে - এনক্রিপশন স্তর 128-বিট আরসি 4

    • পাইকপিডিএফ এই ফাইলটি ডিক্রিপ্ট করতে সক্ষম হয়েছিল
    • পাইপডিএফ 2 সঠিকভাবে পাঠ্যটি বের করতে পারেনি
    • টিকা সঠিকভাবে পাঠ্য বের করতে পারে
  3. অ্যাডোব অ্যাক্রোব্যাট 3.0 এবং তারপরে - এনক্রিপশন স্তর 40-বিট আরসি 4

    • পাইকপিডিএফ এই ফাইলটি ডিক্রিপ্ট করতে সক্ষম হয়েছিল
    • পাইপডিএফ 2 সঠিকভাবে পাঠ্যটি বের করতে পারেনি
    • টিকা সঠিকভাবে পাঠ্য বের করতে পারে
  4. অ্যাডোব অ্যাক্রোব্যাট 5.0 এবং তার পরে - এনক্রিপশন স্তর 128-বিট আরসি 4

    • মাইক্রোসফ্ট ওয়ার্ড দিয়ে তৈরি
    • পাইকপিডিএফ এই ফাইলটি ডিক্রিপ্ট করতে সক্ষম হয়েছিল
    • পাইপডিএফ 2 সঠিকভাবে পাঠ্যটি বের করতে পারে
    • টিকা সঠিকভাবে পাঠ্য বের করতে পারে
  5. অ্যাডোব অ্যাক্রোব্যাট 9.0 এবং তারপরে - এনক্রিপশন স্তর 256-বিট এইএস

    • পিডিএফপ্রোটেক্টফ্রি ব্যবহার করে তৈরি করা হয়েছে
    • পাইকপিডিএফ এই ফাইলটি ডিক্রিপ্ট করতে সক্ষম হয়েছিল
    • পাইপডিএফ 2 সঠিকভাবে পাঠ্যটি বের করতে পারে
    • টিকা সঠিকভাবে পাঠ্য বের করতে পারে

পাইপডিএফ 2 অ্যাডোব অ্যাক্রোব্যাট দিয়ে তৈরি না করা ডিক্রিপ্ট হওয়া পিডিএফ ফাইলগুলি থেকে পাঠ্য আহরণ করতে সক্ষম হয়েছিল।

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

টিকা পাইকপিডিএফ দিয়ে ডিক্রিপ্ট করা সমস্ত নথি থেকে পাঠ্য আহরণ করতে সক্ষম হয়েছিল।


 import pikepdf
 with pikepdf.open("encrypted.pdf", password='password') as pdf:
    num_pages = len(pdf.pages)
    del pdf.pages[-1]
    pdf.save("decrypted.pdf")


 from PyPDF2 import PdfFileReader

 def text_extractor(path):
   with open(path, 'rb') as f:
     pdf = PdfFileReader(f)
     page = pdf.getPage(1)
     print('Page type: {}'.format(str(type(page))))
     text = page.extractText()
     print(text)

    text_extractor('decrypted.pdf')

পাইপডিএফ 2 অ্যাক্রোব্যাট পিডিএফ ফাইলগুলি => 6.0 ডিক্রিপ্ট করতে পারে না

এই ইস্যুটি মডিউল মালিকদের কাছে 15 ই সেপ্টেম্বর, 2015 থেকে খোলা রয়েছে । প্রকল্পের মালিকরা কখন এই সমস্যাটি ঠিক করবেন এই সমস্যা সম্পর্কিত মন্তব্যে এটি অস্পষ্ট। শেষ প্রতিশ্রুতি ছিল 25 জুন, 2018।

পাইপিডিএফ 4 ডিক্রিপশন সমস্যা

পাইপিডিএফ 4 পাইপিডিএফ 2 এর প্রতিস্থাপন। এই মডিউলটিতে পিডিএফ ফাইলগুলি এনক্রিপ্ট করার জন্য ব্যবহৃত নির্দিষ্ট অ্যালগরিদমের সাথে ডিক্রিপশন সমস্যা রয়েছে।

পরীক্ষার ফাইল: অ্যাডোব অ্যাক্রোব্যাট 9.0 এবং তার পরে - এনক্রিপশন স্তর 256-বিট এইএস

পাইপিডিএফ 2 ত্রুটি বার্তা: কেবলমাত্র অ্যালগরিদম কোড 1 এবং 2 সমর্থিত

পাইপিডিএফ 4 ত্রুটি বার্তা: কেবলমাত্র অ্যালগরিদম কোড 1 এবং 2 সমর্থিত। এই পিডিএফ কোড 5 ব্যবহার করে


বিভাগটি আপডেট করুন 10-11-2019

এই বিভাগটি 10-07-2019 এবং 10-08-2019 এ আপনার আপডেটগুলির প্রতিক্রিয়া হিসাবে।

আপনার আপডেটে আপনি বলেছিলেন যে আপনি একটি 'অ্যাডোব রিডার সহ সুরক্ষিত পিডিএফ' খুলতে এবং দস্তাবেজটি অন্য পিডিএফে মুদ্রণ করতে পারেন, যা 'সিকিউরিড' পতাকাটি সরিয়ে দেয়। কিছু পরীক্ষা করার পরে, আমি বিশ্বাস করি যে এই পরিস্থিতিতে কী ঘটছে তা খুঁজে পেয়েছি।

সুরক্ষার অ্যাডোব পিডিএফ স্তর

অ্যাডোব পিডিএফগুলিতে একাধিক ধরণের সুরক্ষা নিয়ন্ত্রণ রয়েছে যা নথির মালিক দ্বারা সক্ষম করা যেতে পারে। নিয়ন্ত্রণগুলি কোনও পাসওয়ার্ড বা শংসাপত্রের মাধ্যমে প্রয়োগ করা যেতে পারে।

  1. দস্তাবেজ এনক্রিপশন (একটি নথি খোলার পাসওয়ার্ড দিয়ে প্রয়োগ করা)

    • সমস্ত নথির বিষয়বস্তু এনক্রিপ্ট করুন (সর্বাধিক সাধারণ)
    • মেটাডেটা => অ্যাক্রোব্যাট .0.০ ব্যতীত সমস্ত নথির সামগ্রী এনক্রিপ্ট করুন
    • কেবল ফাইল সংযুক্তিগুলি এনক্রিপ্ট করুন => অ্যাক্রোব্যাট 7.0
  2. সীমাবদ্ধ সম্পাদনা এবং মুদ্রণ (অনুমতি পাসওয়ার্ড দিয়ে প্রয়োগ করা)

    • মুদ্রণ অনুমোদিত
    • পরিবর্তন অনুমোদিত

নীচের চিত্রটিতে একটি অ্যাডোব পিডিএফ 256-বিট এইএস এনক্রিপশন সহ এনক্রিপ্ট করা দেখায়। এই পিডিএফটি খুলতে বা মুদ্রণের জন্য একটি পাসওয়ার্ড প্রয়োজন। আপনি যখন পাসওয়ার্ড সহ এই ডকুমেন্টটি অ্যাডোব রিডারে খুলবেন, শিরোনামটি নিরাপদ বলে জানাবে

password_level_encryption

এই উত্তরটিতে উল্লিখিত পাইথন মডিউলগুলির সাথে খোলার জন্য এই দস্তাবেজের একটি পাসওয়ার্ড দরকার। যদি আপনি অ্যাডোব রিডার সহ একটি এনক্রিপ্ট করা পিডিএফ খোলার চেষ্টা করেন। আপনার এটি দেখতে হবে:

password_prompt

যদি আপনি এই সতর্কতা না পান তবে ডকুমেন্টটিতে কোনও সুরক্ষা নিয়ন্ত্রণ সক্ষম নেই বা কেবলমাত্র সীমাবদ্ধ সম্পাদনা এবং মুদ্রণগুলি সক্ষম করা আছে।

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

আপনি যখন এই নথিটি নতুন পিডিএফে মুদ্রণ করবেন তখন নিরাপদ সতর্কতা সরানো হবে, কারণ সীমাবদ্ধ সম্পাদনা সরানো হয়েছে।

password_level_restrictive_editing

সমস্ত অ্যাডোব পণ্য অনুমতি পাসওয়ার্ড দ্বারা নির্ধারিত বিধিনিষেধ প্রয়োগ করে। তবে তৃতীয় পক্ষের পণ্যগুলি যদি এই সেটিংগুলিকে সমর্থন না করে তবে ডকুমেন্ট প্রাপকরা কিছু বা সমস্ত বিধিনিষেধ সেটকে বাইপাস করতে সক্ষম হন

তাই আমি অনুমান নথি যা আপনি PDF- এ মুদ্রণ করা হয় যে নিয়ন্ত্রণমূলক সম্পাদনা সক্ষম এবং না একটি পাসওয়ার্ড সক্রিয় খোলার জন্য প্রয়োজনীয় আছে।

ব্রেকিং পিডিএফ এনক্রিপশন সম্পর্কিত

আমরাও PyPDF2 বা PyPDF4 একটি PDF নথিটির ডকুমেন্ট খোলা পাসওয়ার্ড ফাংশন বিরতি ডিজাইন করা হয়। মডিউলগুলি উভয়ই নিম্নলিখিত ত্রুটি নিক্ষেপ করবে যদি তারা কোনও এনক্রিপ্ট করা পাসওয়ার্ড সুরক্ষিত পিডিএফ ফাইল খোলার চেষ্টা করে।

PyPDF2.utils.PdfReadError: ফাইলটি ডিক্রিপ্ট করা হয়নি

একটি এনক্রিপ্ট করা পিডিএফ ফাইলের খোলার পাসওয়ার্ড ফাংশনটি বিভিন্ন পদ্ধতি ব্যবহার করে বাইপাস করা যেতে পারে তবে একক কৌশল কার্যকর না হতে পারে এবং পাসওয়ার্ড জটিলতা সহ কয়েকটি কারণের কারণে কিছু গ্রহণযোগ্য হবে না।

পিডিএফ এনক্রিপশন অভ্যন্তরীণভাবে পিডিএফ সংস্করণের উপর নির্ভর করে 40, 128 বা 256 বিটের এনক্রিপশন কীগুলির সাথে কাজ করে। বাইনারি এনক্রিপশন কীটি ব্যবহারকারী দ্বারা সরবরাহ করা একটি পাসওয়ার্ড থেকে প্রাপ্ত। পাসওয়ার্ড দৈর্ঘ্য এবং এনকোডিং সীমাবদ্ধতার সাপেক্ষে।

উদাহরণস্বরূপ, পিডিএফ 1.7 অ্যাডোব এক্সটেনশন স্তর 3 (অ্যাক্রোব্যাট 9 - এইএস-256) ইউনিকোড অক্ষর (65,536 সম্ভাব্য অক্ষর) প্রবর্তন করেছে এবং পাসওয়ার্ডের ইউটিএফ -8 উপস্থাপনায় সর্বাধিক দৈর্ঘ্যকে 127 বাইটে গড়িয়েছে।


নীচের কোডটি নিষিদ্ধ সম্পাদনা সক্ষম করার সাথে একটি পিডিএফ খুলবে। এটি নিরাপদ সতর্কতা যুক্ত না করেই এই ফাইলটিকে একটি নতুন পিডিএফে সংরক্ষণ করবে। টিকা কোড নতুন ফাইল সামগ্রী বিশ্লেষণ করতে হবে।

from tika import parser
import pikepdf

# opens a PDF with restrictive editing enabled, but that still 
# allows printing.
with pikepdf.open("restrictive_editing_enabled.pdf") as pdf:
  pdf.save("restrictive_editing_removed.pdf")

  # plain text output
  parsedPDF = parser.from_file("restrictive_editing_removed.pdf")

  # XHTML output
  # parsedPDF = parser.from_file("restrictive_editing_removed.pdf", xmlContent=True)

  pdf = parsedPDF["content"]
  pdf = pdf.replace('\n\n', '\n')
  print (pdf)

এই কোডটি ফাইলটি খোলার জন্য কোনও পাসওয়ার্ডের প্রয়োজন কিনা তা পরীক্ষা করে। এই কোডটি পরিমার্জন করা হবে এবং অন্যান্য ফাংশন যুক্ত করা যেতে পারে। আরও কয়েকটি বৈশিষ্ট্য যুক্ত করা যেতে পারে, তবে পাইকপিডিএফের জন্য ডকুমেন্টেশন কোড বেসের সাথে থাকা মন্তব্যের সাথে মেলে না, সুতরাং এটির উন্নতি করার জন্য আরও গবেষণা প্রয়োজন।

# this would be removed once logging is used
############################################
import sys
sys.tracebacklimit = 0
############################################

import pikepdf
from tika import parser

def create_pdf_copy(pdf_file_name):
  with pikepdf.open(pdf_file_name) as pdf:
    new_filename = f'copy_{pdf_file_name}'
    pdf.save(new_filename)
    return  new_filename

def extract_pdf_content(pdf_file_name):
  # plain text output
  # parsedPDF = parser.from_file("restrictive_editing_removed.pdf")

  # XHTML output
  parsedPDF = parser.from_file(pdf_file_name, xmlContent=True)

  pdf = parsedPDF["content"]
  pdf = pdf.replace('\n\n', '\n')
  return pdf

def password_required(pdf_file_name):
  try:
    pikepdf.open(pdf_file_name)

  except pikepdf.PasswordError as error:
    return ('password required')

  except pikepdf.PdfError as results:
    return ('cannot open file')


filename = 'decrypted.pdf'
password = password_required(filename)
if password != None:
  print (password)
elif password == None:
  pdf_file = create_pdf_copy(filename)
  results = extract_pdf_content(pdf_file)
  print (results)

2
আপনি কীভাবে একটি পাসওয়ার্ড না দিয়ে একটি নিরাপদ পিডিএফ ফাইল খুলছেন?
জীবন জটিল

1
আপনি কি শুধুমাত্র সীমাবদ্ধ সম্পাদনা সুরক্ষা উল্লেখ করছেন?
জীবন জটিল

1
উত্তরটি এমন কোডের সাথে আপডেট হয়েছে যা একটি পিডিএফ নিয়ে কাজ করেছিল যা সীমাবদ্ধ সম্পাদনা সুরক্ষা সক্ষম করেছিল, তবে মুদ্রণের অনুমতি দিয়েছে।
জীবন

1
আপনি এক্সএইচটিএমএল ব্যবহার করতে পারেন?
জীবন

1
আমি আউটপুট এক্সএইচটিএমএল এর উত্তর পরিবর্তন করেছি। জেএসএন সম্ভব, তবে এটির জন্য টিকা পার্সার সম্পর্কিত গিথুব প্রকল্প কোডটি খনন করা দরকার।
জীবন জটিল

1

আপনি যখন কোনও পাসওয়ার্ড ছাড়াই এই ফাইলগুলি খুলেন তখন আপনি এই ফাইলগুলির ত্রুটিটি হ্যান্ডেল করার চেষ্টা করতে পারেন।

import pikepdf

def open_pdf(pdf_file_path, pdf_password=''):
    try:
        pdf_obj = pikepdf.Pdf.open(pdf_file_path)

    except pikepdf._qpdf.PasswordError:
        pdf_obj = pikepdf.Pdf.open(pdf_file_path, password=pdf_password)

    finally:
        return pdf_obj

আপনার পার্সিং কাজের জন্য আপনি ফিরে আসা পিডিএফ_বজ ব্যবহার করতে পারেন। এছাড়াও, আপনার যদি এনক্রিপ্ট করা পিডিএফ থাকে তবে আপনি পাসওয়ার্ডটি সরবরাহ করতে পারেন।


1
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! আমরা এটি পাসওয়ার্ড ছাড়াই পড়ার চেষ্টা করছি। এই সময়ে, আমরা পদ্ধতি যে আমার আপডেট 10/7/2019 ব্যাখ্যা ছিল এটা করতে পেরেছি
শিক্ষানবিস

এটি প্রশ্নের উত্তর দেওয়া তো দূরের কথা। দেখে মনে হচ্ছে আপনি সম্পূর্ণ প্রশ্নটি পড়েন নি।
shunya ek

1
এটি সেই সুরক্ষিত পিডিএফগুলি পরিচালনা করে যেখানে সাধারণত পাসওয়ার্ডের ব্যর্থ হয় যখন পাসওয়ার্ডের ডিফল্ট মান হয় না। একটি খালি স্ট্রিং পেরিয়ে এটি সুরক্ষিত পিডিএফ ডকুমেন্টটি যথাযথভাবে খুলতে এবং পার্স করতে সক্ষম হয় (পরীক্ষার ক্ষেত্রে যে আমি দৌড়েছি)।
মহেন্দ্র সিং

1
এই মুহূর্তে @ বিগেনার আপনাকে পিডিএফ রূপান্তর করতে হবে না। এটি কেবলমাত্র আমার পূর্ব অভিজ্ঞতা থেকেই নিরাপদ পিডিএফগুলি খালি পাসওয়ার্ড সরবরাহ করে কাজ করে।
মহেন্দ্র সিং

1
@ বিগনার এটি আমার সম্পূর্ণ কোড। এটি কেবল পাইকপিডিএফ থেকে পিডিএফ_জেক্টকে ফেরত দেয়। আপনি যদি এই পিডিএফটি সংরক্ষণ করতে চান তবে পিডিএফ_ওজ.সেসেভ ('আপনার_ফाइल_পাথ') ব্যবহার করে ফিরে আসা অবজেক্টটি সংরক্ষণ করুন। এর পরে, আপনি এই পিডিএফটি পাঠ্য এবং অন্যান্য বিষয়বস্তু বিশ্লেষণ করতে ব্যবহার করতে পারেন। আমি পাঠ্য নিষ্কাশন জন্য PdfPlumber নামে একটি লাইব্রেরি ব্যবহার করি ।
মহেন্দ্র সিং

1

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.