Khai thác dữ liệu Python từ PDF được mã hóa


12

Tôi là một sinh viên tốt nghiệp gần đây trong toán học thuần túy, người chỉ học vài khóa lập trình cơ bản. Tôi đang thực tập và tôi có một dự án phân tích dữ liệu nội bộ. Tôi phải phân tích các tệp PDF nội bộ của những năm trước. Các tệp PDF được "bảo mật". Nói cách khác, chúng được mã hóa. Chúng tôi không có mật khẩu PDF, thậm chí nhiều hơn, chúng tôi không chắc có tồn tại mật khẩu hay không. Nhưng, chúng tôi có tất cả những tài liệu này và chúng tôi có thể đọc chúng bằng tay. Chúng tôi có thể in chúng là tốt. Mục tiêu là đọc chúng bằng Python vì đây là ngôn ngữ mà chúng tôi có một số ý tưởng.

Đầu tiên, tôi đã cố đọc các tệp PDF với một số thư viện Python. Tuy nhiên, các thư viện Python mà tôi thấy không đọc được các tệp PDF được mã hóa. Vào thời điểm đó, tôi cũng không thể xuất thông tin bằng Adobe Reader.

Thứ hai, tôi quyết định giải mã các tệp PDF. Tôi đã thành công khi sử dụng thư viện Python pykepdf. Pykepdf hoạt động rất tốt! Tuy nhiên, các tệp PDF được giải mã cũng không thể được đọc cùng với các thư viện Python của điểm trước đó ( PyPDF2Tabula ). Tại thời điểm này, chúng tôi đã thực hiện một số cải tiến vì sử dụng Adobe Reader tôi có thể xuất thông tin từ các tệp PDF được giải mã, nhưng mục tiêu là làm mọi thứ với Python.

Mã mà tôi đang hiển thị hoạt động hoàn hảo với các tệp PDF không được mã hóa, nhưng không phải với các tệp PDF được mã hóa. Nó không hoạt động với các tệp PDF được giải mã cũng nhận được bằng pykepdf.

Tôi đã không viết mã. Tôi tìm thấy nó trong tài liệu của các thư viện Python PykepdfTabula . Giải pháp PyPDF2 được Al Sweigart viết trong cuốn sách " Tự động hóa các công cụ nhàm chán với Python " mà tôi rất khuyến khích. Tôi cũng đã kiểm tra rằng mã đang hoạt động tốt, với những hạn chế mà tôi đã giải thích trước đó.

Câu hỏi đầu tiên, tại sao tôi không thể đọc các tệp được giải mã, nếu các chương trình hoạt động với các tệp chưa bao giờ được mã hóa?

Câu hỏi thứ hai, bằng cách nào đó chúng ta có thể đọc với Python các tệp được giải mã không? Thư viện nào có thể làm điều đó hoặc là không thể? Có phải tất cả các tệp PDF được giải mã có thể trích xuất?

Cảm ơn bạn đã dành thời gian và sự giúp đỡ của bạn!!!

Tôi đã tìm thấy những kết quả này bằng Python 3.7, Windows 10, Jupiter Notebooks và Anaconda 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()

Với Tabula, tôi nhận được thông báo "tệp đầu ra trống."

Với PyPDF2, tôi chỉ nhận được '/ n'

CẬP NHẬT 10/3/2019 Pdfminer.six (Phiên bản tháng 11 năm 2018)

Tôi đã nhận được kết quả tốt hơn bằng cách sử dụng giải pháp được đăng bởi DuckPuncher . Đối với tệp được giải mã, tôi đã nhận được nhãn, nhưng không phải dữ liệu. Điều tương tự xảy ra với các tập tin được mã hóa. Đối với các tập tin chưa bao giờ được mã hóa hoạt động hoàn hảo. Vì tôi cần dữ liệu và nhãn của các tệp được mã hóa hoặc giải mã, mã này không hoạt động đối với tôi. Để phân tích đó, tôi đã sử dụng pdfminer.six , đó là thư viện Python được phát hành vào tháng 11 năm 2018. Pdfminer.six bao gồm một thư viện pycryptodome. Theo tài liệu của họ " PyCryptodome là gói Python độc lập gồm các nguyên thủy mã hóa cấp thấp .."

Mã nằm trong câu hỏi trao đổi ngăn xếp: Trích xuất văn bản từ tệp PDF bằng PDFMiner trong python?

Tôi rất thích nếu bạn muốn lặp lại thí nghiệm của tôi. Dưới đây là mô tả:

1) Chạy các mã được đề cập trong câu hỏi này với bất kỳ tệp PDF nào chưa bao giờ được mã hóa.

2) Thực hiện tương tự với PDF "Bảo mật" (đây là thuật ngữ mà Adobe sử dụng), tôi gọi đó là PDF được mã hóa. Sử dụng một hình thức chung mà bạn có thể tìm thấy bằng cách sử dụng Google. Sau khi bạn tải xuống, bạn cần điền vào các trường. Nếu không, bạn sẽ kiểm tra nhãn, nhưng không phải các trường. Dữ liệu là trong các lĩnh vực.

3) Giải mã PDF được mã hóa bằng Pykepdf. Đây sẽ là bản PDF được giải mã.

4) Chạy lại mã bằng PDF được giải mã.

CẬP NHẬT 10/4/2019 Camelot (Phiên bản tháng 7 năm 2019)

Tôi tìm thấy thư viện Python Camelot. Hãy cẩn thận rằng bạn cần camelot-py 0.7.3.

Nó rất mạnh và hoạt động với Python 3.7. Ngoài ra, nó rất dễ sử dụng. Đầu tiên, bạn cũng cần cài đặt Ghostscript . Nếu không, nó sẽ không hoạt động. Bạn cũng cần cài đặt Pandas . Không sử dụng pip cài đặt camelot-py . Thay vào đó sử dụng pip cài đặt camelot-py [cv]

Tác giả của chương trình là Vinayak Mehta. Frank Du chia sẻ mã này trong video YouTube "Trích xuất dữ liệu dạng bảng từ PDF bằng Camelot bằng Python."

Tôi đã kiểm tra mã và nó đang làm việc với các tệp không được mã hóa. Tuy nhiên, nó không hoạt động với các tệp được mã hóa và giải mã, và đó là mục tiêu của tôi .

Camelot được định hướng để có được các bảng từ PDF.

Đây là mã:

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)

CẬP NHẬT 10/7/2019 Tôi tìm thấy một mẹo. Nếu tôi mở pdf được bảo mật bằng Adobe Reader và tôi in nó bằng Microsoft sang PDF và tôi lưu nó dưới dạng PDF, tôi có thể trích xuất dữ liệu bằng bản sao đó. Tôi cũng có thể chuyển đổi tệp PDF sang JSON, Excel, SQLite, CSV, HTML và các định dạng khác. Đây là một giải pháp có thể cho câu hỏi của tôi. Tuy nhiên, tôi vẫn đang tìm kiếm một tùy chọn để thực hiện nó mà không cần mẹo đó vì mục tiêu là thực hiện 100% với Python. Tôi cũng lo ngại rằng nếu sử dụng một phương pháp mã hóa tốt hơn thì thủ thuật có thể sẽ không hiệu quả. Đôi khi bạn cần sử dụng Adobe Reader nhiều lần để có được một bản sao có thể trích xuất.

CẬP NHẬT 10/8/2019. Câu hỏi thứ ba. Bây giờ tôi có một câu hỏi thứ ba. Tất cả pdf được bảo mật / mã hóa có được bảo vệ bằng mật khẩu không? Tại sao pikepdf không hoạt động? Tôi đoán là phiên bản hiện tại của pikepdf có thể phá vỡ một số loại mã hóa nhưng không phải tất cả chúng. @constt đã đề cập rằng PyPDF2 có thể phá vỡ một số loại bảo vệ. Tuy nhiên, tôi đã trả lời anh ta rằng tôi đã tìm thấy một bài viết rằng PyPDF2 có thể phá vỡ các mã hóa được thực hiện bằng Adobe Acrobat Pro 6.0, nhưng không có phiên bản sau.


2
Tôi không thể tái tạo những vấn đề này với PyPDF2, mọi thứ đều hoạt động tốt. Tôi đã sử dụng pdftkcũng như các dịch vụ trực tuyến để mã hóa tập tin. Bạn có thể gửi liên kết đến các tập tin pdf "rắc rối" không?
cấu thành

1
Được rồi cảm ơn! Bạn đã thử sử dụng qpdfđể giải mã các tập tin của bạn? Trong trường hợp nó sẽ thực hiện thủ thuật, bạn có thể gọi nó từ tập lệnh của mình bằng subprocessmô-đun để giải mã các tập tin trước khi phân tích chúng.
cấu thành

1
Đầu tiên, PyPDF2 không thể giải mã các tệp Acrobat PDF => 6.0. Thứ hai, pikepdf hiện không có triển khai trích xuất văn bản.
Cuộc sống phức tạp

1
@Beginner Tôi sẽ suy đoán rằng điều này có liên quan đến định dạng cơ bản đang được pykepdf sử dụng để viết PDF không được mã hóa.
Cuộc sống phức tạp

2
"Tất cả pdf được bảo mật / mã hóa có được bảo vệ bằng mật khẩu không?" - không Ngoài ra còn có pdf được mã hóa bằng mật mã khóa riêng / công khai dựa trên chứng chỉ X509.
mkl

Câu trả lời:


8

CẬP NHẬT MỚI NHẤT 10-11-2019

Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn hoàn toàn. Mã dưới đây có thể được tinh chỉnh, nhưng nó đọc dưới dạng PDF được mã hóa hoặc không được mã hóa và trích xuất văn bản. Xin vui lòng cho tôi biết nếu tôi hiểu sai yêu cầu của bạn.

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)

Tôi lưu ý rằng mã pikepdf của bạn được sử dụng để mở tệp PDF được mã hóa bị thiếu mật khẩu, điều này đáng lẽ phải ném thông báo lỗi này:

pikepdf._qpdf.PasswordError: mã hóa.pdf: mật khẩu không hợp lệ

import pikepdf

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

Bạn có thể sử dụng tika để trích xuất văn bản từ decrypted.pdf được tạo bởi pikepdf .

from tika import parser

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

Ngoài ra, pikepdf hiện không thực hiện trích xuất văn bản , bao gồm bản phát hành mới nhất v1.6.4.


Tôi quyết định chạy thử nghiệm bằng cách sử dụng các tệp PDF được mã hóa khác nhau.

Tôi đặt tên cho tất cả các tệp được mã hóa là 'mã hóa.pdf' và tất cả chúng đều sử dụng cùng một mật khẩu mã hóa và giải mã.

  1. Adobe Acrobat 9.0 trở lên - AES cấp mã hóa 256-bit

    • pikepdf đã có thể giải mã tập tin này
    • PyPDF2 không thể trích xuất văn bản chính xác
    • tika có thể trích xuất văn bản chính xác
  2. Adobe Acrobat 6.0 trở lên - mức mã hóa RC4 128 bit

    • pikepdf đã có thể giải mã tập tin này
    • PyPDF2 không thể trích xuất văn bản chính xác
    • tika có thể trích xuất văn bản chính xác
  3. Adobe Acrobat 3.0 trở lên - RC4 cấp mã hóa 40 bit

    • pikepdf đã có thể giải mã tập tin này
    • PyPDF2 không thể trích xuất văn bản chính xác
    • tika có thể trích xuất văn bản chính xác
  4. Adobe Acrobat 5.0 trở lên - mức mã hóa RC4 128 bit

    • được tạo bằng Microsoft Word
    • pikepdf đã có thể giải mã tập tin này
    • PyPDF2 có thể trích xuất văn bản chính xác
    • tika có thể trích xuất văn bản chính xác
  5. Adobe Acrobat 9.0 trở lên - AES cấp mã hóa 256-bit

    • được tạo bằng pdfprotectfree
    • pikepdf đã có thể giải mã tập tin này
    • PyPDF2 có thể trích xuất văn bản chính xác
    • tika có thể trích xuất văn bản chính xác

PyPDF2 đã có thể trích xuất văn bản từ các tệp PDF được giải mã không được tạo bằng Adobe Acrobat.

Tôi cho rằng các lỗi này có liên quan đến định dạng nhúng trong các tệp PDF được tạo bởi Adobe Acrobat. Cần thêm thử nghiệm để xác nhận phỏng đoán này về định dạng.

tika đã có thể trích xuất văn bản từ tất cả các tài liệu được giải mã bằng pikepdf.


 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')

PyPDF2 không thể giải mã các tệp Acrobat PDF => 6.0

Vấn đề này đã được mở với các chủ sở hữu mô-đun, kể từ ngày 15 tháng 9 năm 2015 . Không rõ trong các ý kiến ​​liên quan đến vấn đề này khi vấn đề này sẽ được khắc phục bởi các chủ dự án. Cam kết cuối cùng là ngày 25 tháng 6 năm 2018.

Các vấn đề giải mã PyPDF4

PyPDF4 là sự thay thế cho PyPDF2. Mô-đun này cũng có vấn đề giải mã với một số thuật toán được sử dụng để mã hóa các tệp PDF.

tệp thử nghiệm: Adobe Acrobat 9.0 trở lên - AES cấp mã hóa 256-bit

Thông báo lỗi PyPDF2: chỉ hỗ trợ mã thuật toán 1 và 2

Thông báo lỗi PyPDF4: chỉ hỗ trợ mã thuật toán 1 và 2. PDF này sử dụng mã 5


CẬP NHẬT PHẦN 10-11-2019

Phần này là để đáp ứng với các cập nhật của bạn vào ngày 10-07-2019 và 10-08-2019.

Trong bản cập nhật của bạn, bạn đã tuyên bố rằng bạn có thể mở pdf pdf được bảo mật bằng Adobe Reader 'và in tài liệu sang một tệp PDF khác, loại bỏ cờ' BẢO MẬT '. Sau khi thực hiện một số thử nghiệm, tôi tin rằng đã tìm ra những gì đang xảy ra trong kịch bản này.

Mức độ bảo mật của Adobe PDF

Adobe PDF có nhiều loại điều khiển bảo mật có thể được kích hoạt bởi chủ sở hữu của tài liệu. Các điều khiển có thể được thi hành bằng mật khẩu hoặc chứng chỉ.

  1. Mã hóa tài liệu (được thi hành bằng mật khẩu mở tài liệu)

    • Mã hóa tất cả nội dung tài liệu (phổ biến nhất)
    • Mã hóa tất cả nội dung tài liệu ngoại trừ siêu dữ liệu => Acrobat 6.0
    • Chỉ mã hóa tệp đính kèm => Acrobat 7.0
  2. Chỉnh sửa và in hạn chế (được thực thi bằng mật khẩu quyền)

    • Cho phép in
    • Thay đổi được phép

Hình ảnh bên dưới cho thấy Adobe PDF được mã hóa bằng mã hóa AES 256-bit. Để mở hoặc in tệp PDF này, cần có mật khẩu. Khi bạn mở tài liệu này trong Adobe Reader với mật khẩu, tiêu đề sẽ nêu BẢO ĐẢM

password_level_encoding

Tài liệu này yêu cầu mật khẩu để mở với các mô-đun Python được đề cập trong câu trả lời này. Nếu bạn cố mở một tệp PDF được mã hóa bằng Adobe Reader. Bạn nên xem thứ này:

password_prompt

Nếu bạn không nhận được cảnh báo này thì tài liệu sẽ không kích hoạt kiểm soát bảo mật hoặc chỉ bật chế độ chỉnh sửa và in hạn chế.

Hình ảnh bên dưới cho thấy chỉnh sửa hạn chế được kích hoạt bằng mật khẩu trong tài liệu PDF. Ghi chú in được kích hoạt . Để mở hoặc in PDF này, mật khẩu không bắt buộc . Khi bạn mở tài liệu này trong Adobe Reader mà không cần mật khẩu, tiêu đề sẽ ghi rõ BẢO MẬT Đây là cảnh báo tương tự như tệp PDF được mã hóa được mở bằng mật khẩu.

Khi bạn in tài liệu này sang PDF mới, cảnh báo BẢO MẬT sẽ bị xóa, vì chỉnh sửa hạn chế đã bị xóa.

password_level_restrictive_editing

Tất cả các sản phẩm Adobe thực thi các hạn chế được đặt bằng mật khẩu quyền. Tuy nhiên, nếu các sản phẩm của bên thứ ba không hỗ trợ các cài đặt này, người nhận tài liệu có thể bỏ qua một số hoặc tất cả các hạn chế được đặt.

Vì vậy, tôi cho rằng tài liệu mà bạn đang in thành PDF có kích hoạt chỉnh sửa hạn chế và không có mật khẩu cần thiết để mở được bật.

Liên quan đến việc phá vỡ mã hóa PDF

Cả PyPDF2 hoặc PyPDF4 đều không được thiết kế để phá vỡ chức năng mật khẩu mở tài liệu của tài liệu PDF. Cả hai mô-đun sẽ đưa ra lỗi sau nếu chúng cố mở tệp PDF được bảo vệ bằng mật khẩu.

PyPDF2.utils.PdfReadError: tệp chưa được giải mã

Chức năng mật khẩu mở của tệp PDF được mã hóa có thể được bỏ qua bằng nhiều phương pháp khác nhau, nhưng một kỹ thuật duy nhất có thể không hoạt động và một số sẽ không được chấp nhận do một số yếu tố, bao gồm cả độ phức tạp của mật khẩu.

Mã hóa PDF hoạt động nội bộ với các khóa mã hóa 40, 128 hoặc 256 bit tùy thuộc vào phiên bản PDF. Khóa mã hóa nhị phân được lấy từ mật khẩu do người dùng cung cấp. Mật khẩu phải tuân theo các ràng buộc về độ dài và mã hóa.

Ví dụ: PDF 1.7 Adobe Extension Level 3 (Acrobat 9 - AES-256) đã giới thiệu các ký tự Unicode (65.536 ký tự có thể) và tăng độ dài tối đa tới 127 byte trong biểu thị mật khẩu UTF-8.


Mã dưới đây sẽ mở một tệp PDF với kích hoạt chỉnh sửa hạn chế. Nó sẽ lưu tệp này vào một tệp PDF mới mà không cần thêm cảnh báo BẢO MẬT. Các tika mã sẽ phân tích các nội dung từ các tập tin mới.

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)

Mã này kiểm tra nếu mật khẩu được yêu cầu để mở tệp. Mã này được tinh chỉnh và các chức năng khác có thể được thêm vào. Có một số tính năng khác có thể được thêm vào, nhưng tài liệu về pikepdf không khớp với các nhận xét trong cơ sở mã, vì vậy cần có thêm nghiên cứu để cải thiện điều này.

# 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
Làm thế nào bạn mở một tệp PDF an toàn mà không cung cấp mật khẩu?
Cuộc sống phức tạp

1
Bạn đang đề cập đến chỉ bảo vệ chỉnh sửa hạn chế?
Cuộc sống phức tạp

1
Trả lời được cập nhật với mã làm việc với PDF có bật bảo vệ chỉnh sửa hạn chế, nhưng cho phép in.
Cuộc sống phức tạp

1
Bạn có thể sử dụng XHTML không?
Cuộc sống phức tạp

1
Tôi đã sửa đổi câu trả lời cho đầu ra XHTML. JSON là có thể, nhưng nó đòi hỏi phải đào sâu vào mã dự án github liên quan đến trình phân tích cú pháp tika.
Cuộc sống phức tạp

1

Bạn có thể cố gắng xử lý lỗi mà các tệp này tạo ra khi bạn mở các tệp này mà không có mật khẩu.

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

Bạn có thể sử dụng pdf_obj trả về cho công việc phân tích cú pháp của bạn. Ngoài ra, bạn có thể cung cấp mật khẩu trong trường hợp bạn có một tệp PDF được mã hóa.


1
Cảm ơn bạn vì câu trả lời! Chúng tôi đang cố gắng đọc nó mà không cần mật khẩu. Tại thời điểm này, chúng tôi đã có thể thực hiện bằng phương pháp đã được giải thích trong CẬP NHẬT 10/7/2019 của tôi
Người mới bắt đầu

Điều này là xa để trả lời câu hỏi. Có vẻ như bạn chưa đọc câu hỏi hoàn chỉnh.
shoonya ek

1
Điều này xử lý các tệp PDF được bảo mật trong đó pikepdf thường không thành công khi giá trị mặc định của mật khẩu là Không có. Bằng cách chuyển một chuỗi rỗng, nó có thể mở và phân tích một tài liệu PDF được bảo mật đúng cách (trong các trường hợp thử nghiệm mà tôi đã chạy).
Mahendra Singh

1
@Beginner u không phải chuyển đổi các tệp PDF ở đây trong trường hợp này. Đây chỉ là kinh nghiệm trước đây của tôi rằng các tệp PDF được bảo mật hoạt động bằng cách cung cấp mật khẩu trống.
Mahendra Singh

1
@Beginner đây là toàn bộ mã của tôi. Điều này chỉ trả về pdf_object từ pikepdf. Trong trường hợp bạn muốn lưu pdf này, chỉ cần lưu đối tượng được trả về bằng cách sử dụng pdf_obj.save ('your_file_path'). Sau này, bạn có thể sử dụng bản PDF này để phân tích văn bản và các đối tượng khác. Tôi sử dụng một thư viện gọi là PdfPlumber để trích xuất văn bản.
Mahendra Singh

1

Đối với tabula-py, bạn có thể thử tùy chọn mật khẩu với read_pdf. Nó phụ thuộc vào chức năng của tabula-java vì vậy tôi không chắc chắn mã hóa nào được hỗ trợ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.