Şifrelenmiş PDF'den Python Veri Çıkarma


12

Yakın zamanda sadece birkaç temel programlama dersi almış olan saf matematik mezunuyum. Staj yapıyorum ve dahili bir veri analiz projem var. Son yılların iç PDF'lerini analiz etmem gerekiyor. PDF'ler "güvenlidir". Başka bir deyişle, bunlar şifrelenir. PDF şifremiz yok, daha fazlası, şifrelerin olup olmadığından emin değiliz. Ancak, tüm bu belgelere sahibiz ve bunları manuel olarak okuyabiliriz. Onları da yazdırabiliriz. Amaç onları Python ile okumak, çünkü bazı fikirlerimiz var.

İlk olarak, bazı Python kütüphaneleriyle PDF'leri okumaya çalıştım. Ancak bulduğum Python kütüphaneleri şifreli PDF'leri okumuyor. O zaman, Adobe Reader kullanarak da bilgileri veremedim.

İkincisi, PDF'lerin şifresini çözmeye karar verdim. Python kütüphanesi pykepdf kullanarak başarılı oldum. Pykepdf çok iyi çalışıyor! Ancak, şifresi çözülmüş PDF'ler önceki noktanın ( PyPDF2 ve Tabula ) Python kütüphaneleri ile de okunamaz . Şu anda, bazı iyileştirmeler yaptık çünkü Adobe Reader'ı kullanarak şifresi çözülmüş PDF'lerden bilgileri dışa aktarabiliyorum, ancak amaç Python ile her şeyi yapmak.

Gösterdiğim kod şifrelenmemiş PDF'lerle mükemmel çalışıyor, ancak şifrelenmiş PDF'lerle çalışmıyor. Pykepdf ile alınan şifresi çözülmüş PDF'lerle çalışmıyor.

Kodu yazmadım. Python'ın kütüphaneleri arasında belgelerinde buldum Pykepdf ve Tabula . PyPDF2 çözümü, Al Sweigart tarafından " Sıkıcı Öğeleri Python ile Otomatikleştirin " adlı kitabında yazdı . Ayrıca kodun daha önce açıkladığım sınırlamalarla iyi çalışıp çalışmadığını kontrol ettim.

İlk soru, programlar şifrelenmemiş dosyalarla çalışıyorsa neden şifresi çözülmüş dosyaları okuyamıyorum?

İkinci soru, Python ile şifresi çözülmüş dosyaları bir şekilde okuyabilir miyiz? Hangi kütüphane bunu yapabilir veya imkansızdır? Şifresi çözülmüş tüm PDF'ler çıkarılabilir mi?

Zaman ayırdığınız ve yardım ettiğiniz için teşekkür ederiz !!!

Bu sonuçları Python 3.7, Windows 10, Jupiter Notebooks ve Anaconda 2019.07 kullanarak buldum.

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

Tabula ile "çıktı dosyası boş" mesajını alıyorum.

PyPDF2 ile sadece '/ n' alıyorum

GÜNCELLEME 10/3/2019 Pdfminer.six (Sürüm Kasım 2018)

DuckPuncher tarafından gönderilen çözümü kullanarak daha iyi sonuçlar aldım . Şifresi çözülen dosya için etiketleri aldım, ama verileri değil. Şifrelenmiş dosyada da aynı şey olur. Hiç şifrelenmemiş dosya için mükemmel çalışır. Verilere ve şifrelenmiş veya şifresi çözülmüş dosyaların etiketlerine ihtiyacım olduğu için bu kod benim için çalışmıyor. Bu analiz için, kullandığım pdfminer.six Pdfminer.six kütüphane pycryptodome içerir Kasım 2018 yılında yayınlandı Python kütüphanesi olduğunu. Dokümanlarına göre " PyCryptodome , düşük seviyeli kriptografik ilkellerin bağımsız bir Python paketidir."

Kod yığın değişimi sorusudur: Python'da PDFMiner kullanarak bir PDF dosyasından metin çıkartılıyor mu?

Denememi tekrarlamak isterseniz çok isterim. İşte açıklama:

1) Bu soruda belirtilen kodları hiç şifrelenmemiş herhangi bir PDF ile çalıştırın.

2) Aynı şeyi bir PDF "Güvenli" ile yapın (bu Adobe'nin kullandığı bir terimdir), şifreli PDF olarak adlandırıyorum. Google'ı kullanarak bulabileceğiniz genel bir form kullanın. İndirdikten sonra alanları doldurmanız gerekir. Aksi takdirde, etiketleri kontrol edersiniz, ancak alanları kontrol etmezsiniz. Veriler alanların içindedir.

3) Pykepdf kullanarak şifreli PDF'nin şifresini çözün. Bu şifresi çözülmüş PDF olacaktır.

4) Şifre çözülmüş PDF kullanarak kodları tekrar çalıştırın.

GÜNCELLEME 10/4/2019 Camelot (Sürüm Temmuz 2019)

Camelot Python kütüphanesini buldum. Camelot-py 0.7.3'e ihtiyacınız olduğuna dikkat edin .

Çok güçlü ve Python 3.7 ile çalışıyor. Ayrıca, kullanımı çok kolaydır. İlk olarak, Ghostscript'i de kurmanız gerekir . Aksi takdirde çalışmaz. Ayrıca Pandaları yüklemeniz gerekir . Pip kurulum camelot-py kullanmayın . Bunun yerine pip install camelot-py [cv] kullanın

Programın yazarı Vinayak Mehta. Frank Du bu kodu bir YouTube videosunda paylaşıyor "Python Kullanarak Camelot ile PDF'den tablo verileri ayıkla".

Kodu kontrol ettim ve şifrelenmemiş dosyalarla çalışıyor. Ancak, şifreli ve şifresi çözülmüş dosyalarla çalışmaz ve bu benim amacım .

Camelot, PDF'lerden tablo almaya yöneliktir.

İşte kod:

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)

GÜNCELLEME 10/7/2019 Bir numara buldum. Güvenli pdf'yi Adobe Reader ile açarsam ve Microsoft'u PDF olarak kullanarak yazdırırsam ve PDF olarak kaydedersem, bu kopyayı kullanarak verileri çıkarabilirim. Ayrıca PDF dosyasını JSON, Excel, SQLite, CSV, HTML ve başka formatlara dönüştürebilirim. Soruma olası bir çözüm bu. Ancak, hala bu hile olmadan yapmak için bir seçenek arıyorum çünkü hedef Python ile% 100 yapmaktır. Ayrıca daha iyi bir şifreleme yöntemi kullanılırsa hile belki işe yaramaz endişeli. Bazen çıkarılabilir bir kopya almak için Adobe Reader'ı birkaç kez kullanmanız gerekir.

GÜNCELLEME 10/8/2019. Üçüncü soru. Şimdi üçüncü bir sorum var. Tüm güvenli / şifreli pdf'ler parola korumalı mıdır? Pikepdf neden çalışmıyor? Benim tahminim pikepdf'in mevcut sürümünün bazı şifreleme türlerini kırabileceğidir, ancak hepsini değil. @constt, PyPDF2'nin bir tür korumayı bozabileceğini belirtti. Ancak, PyPDF2'nin Adobe Acrobat Pro 6.0 ile yapılan şifrelemeleri kırabileceği, ancak posterior sürümlerde bulunmadığı bir makale bulduğumu söyledim.


2
Bu sorunları yeniden üretemedim PyPDF2, her şey iyi çalışıyor. pdftkDosyaları şifrelemek için çevrimiçi hizmetlerin yanı sıra kullandım . "Sorunlu" pdf dosyalarına link gönderebilir misiniz?
constt

1
Tamam teşekkürler! qpdfDosyalarınızın şifresini çözmek için kullanmayı denediniz mi? Hile yapacaksa, subprocessdosyaları ayrıştırmadan önce şifresini çözmek için modülü kullanarak kodunuzdan çağırabilirsiniz .
constt

1
İlk olarak, PyPDF2 Acrobat PDF dosyalarının şifresini çözemez => 6.0. İkinci olarak, pikepdf şu anda metin çıkarma uygulaması yok.
Hayat karmaşık

1
@Başlangıçta bunun şifrelenmemiş PDF'yi yazmak için pykepdf tarafından kullanılan temel biçimlendirme ile ilgili olduğunu tahmin ediyorum.
Hayat karmaşık

2
"Tüm güvenli / şifreli pdf'ler parola korumalı mı?" - Hayır. X509 sertifikalarına dayanan özel / genel anahtar şifrelemesi kullanılarak şifrelenmiş pdf'ler de vardır.
mkl

Yanıtlar:


8

SON GÜNCELLEME 10-11-2019

Sorunuzu tamamen anladığımdan emin değilim. Aşağıdaki kod hassaslaştırılabilir, ancak şifrelenmiş veya şifrelenmemiş bir PDF'de okur ve metni çıkarır. Gereksinimlerinizi yanlış anladıysam lütfen bana bildirin.

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)

Ben senin kaydetti pikepdf kod, bu hata mesajını atmalıydım bir şifre eksikti şifreli PDF açmak için kullanılan:

pikepdf._qpdf.PasswordError: şifreli.pdf: geçersiz şifre

import pikepdf

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

Pikepdf tarafından oluşturulan şifre çözülmüş.pdf'den metni ayıklamak için tika kullanabilirsiniz .

from tika import parser

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

Ayrıca, pikepdf şu anda metin çıkarma uygulamıyor , bu en son sürüm v1.6.4 içerir.


Çeşitli şifreli PDF dosyalarını kullanarak birkaç test yapmaya karar verdim.

Şifrelenmiş tüm dosyaları 'şifreli.pdf' olarak adlandırdım ve hepsi aynı şifreleme ve şifre çözme şifresini kullandı.

  1. Adobe Acrobat 9.0 ve üstü - şifreleme düzeyi 256 bit AES

    • pikepdf bu dosyanın şifresini çözebildi
    • PyPDF2 metni doğru bir şekilde çıkaramadı
    • tika metni doğru bir şekilde çıkarabilir
  2. Adobe Acrobat 6.0 ve üstü - şifreleme düzeyi 128 bit RC4

    • pikepdf bu dosyanın şifresini çözebildi
    • PyPDF2 metni doğru bir şekilde çıkaramadı
    • tika metni doğru bir şekilde çıkarabilir
  3. Adobe Acrobat 3.0 ve üstü - şifreleme düzeyi 40 bit RC4

    • pikepdf bu dosyanın şifresini çözebildi
    • PyPDF2 metni doğru bir şekilde çıkaramadı
    • tika metni doğru bir şekilde çıkarabilir
  4. Adobe Acrobat 5.0 ve üstü - şifreleme düzeyi 128 bit RC4

    • Microsoft Word ile oluşturuldu
    • pikepdf bu dosyanın şifresini çözebildi
    • PyPDF2 metni doğru şekilde çıkarabilir
    • tika metni doğru bir şekilde çıkarabilir
  5. Adobe Acrobat 9.0 ve üstü - şifreleme düzeyi 256 bit AES

    • pdfprotectfree kullanılarak oluşturuldu
    • pikepdf bu dosyanın şifresini çözebildi
    • PyPDF2 metni doğru şekilde çıkarabilir
    • tika metni doğru bir şekilde çıkarabilir

PyPDF2, Adobe Acrobat ile oluşturulmamış şifresi çözülmüş PDF dosyalarından metin çıkarabildi.

Hataların Adobe Acrobat tarafından oluşturulan PDF'lerde gömülü biçimlendirme ile bir ilgisi olduğunu varsayarım. Biçimlendirme ile ilgili bu varsayımı doğrulamak için daha fazla test gereklidir.

tika, pikepdf ile şifresi çözülmüş tüm belgelerden metin çıkarabildi.


 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 Acrobat PDF dosyalarının şifresini çözemiyor => 6.0

Bu sorun, 15 Eylül 2015 tarihinden bu yana modül sahiplerine açıktır . Bu sorunun proje sahipleri tarafından ne zaman çözüleceği bu konuyla ilgili yorumlarda net değildir. Son taahhüt 25 Haziran 2018 idi.

PyPDF4 şifre çözme sorunları

PyPDF4 yerine PyPDF4 oyuna dahil oluyor. Bu modül ayrıca PDF dosyalarını şifrelemek için kullanılan belirli algoritmalarda şifre çözme sorunlarına sahiptir.

test dosyası: Adobe Acrobat 9.0 ve üstü - şifreleme düzeyi 256 bit AES

PyPDF2 hata mesajı: yalnızca algoritma kodu 1 ve 2 desteklenir

PyPDF4 hata mesajı: yalnızca algoritma kodu 1 ve 2 desteklenir. Bu PDF kod 5'i kullanıyor


GÜNCELLEME BÖLÜM 10-11-2019

Bu bölüm 10-07-2019 ve 10-08-2019 güncellemelerinize yanıt niteliğindedir.

Güncellemenizde 'Adobe Reader ile güvenli bir pdf' açabileceğinizi ve belgeyi 'GÜVENLİ' bayrağını kaldıran başka bir PDF'ye yazdırabileceğinizi belirttiniz. Bazı testler yaptıktan sonra, bu senaryoda neler olduğunu anladığımıza inanıyorum.

Adobe PDF güvenlik düzeyi

Adobe PDF'lerde, belgenin sahibi tarafından etkinleştirilebilen birden çok tür güvenlik denetimi bulunur. Kontroller bir şifre veya sertifika ile uygulanabilir.

  1. Belge şifreleme (belge açık parolasıyla zorunlu kılındı)

    • Tüm belge içeriklerini şifrele (en yaygın)
    • Meta veri => Acrobat 6.0 dışındaki tüm belge içeriklerini şifrele
    • Yalnızca dosya eklerini şifrele => Acrobat 7.0
  2. Kısıtlayıcı düzenleme ve yazdırma (izin şifresi ile zorunlu kılındı)

    • Yazdırma İzinli
    • İzin Verilen Değişiklikler

Aşağıdaki resimde 256 bit AES şifrelemesi ile şifrelenmiş bir Adobe PDF gösterilmektedir. Bu PDF'yi açmak veya yazdırmak için bir parola gerekir. Bu belgeyi parola ile Adobe Reader'da açtığınızda, başlık SECURED

password_level_encryption

Bu belge, bu yanıtta belirtilen Python modülleriyle açılması için bir parola gerektirir. Adobe Reader ile şifrelenmiş bir PDF açmaya çalışırsanız. Bunu görmelisin:

password_prompt

Bu uyarıyı almazsanız belgede güvenlik denetimleri etkinleştirilmez veya yalnızca kısıtlayıcı düzenleme ve yazdırma denetimleri etkinleştirilir.

Aşağıdaki resim, PDF belgesinde bir parola ile kısıtlayıcı düzenlemenin etkinleştirildiğini göstermektedir. Not yazdırma etkindir . Bu PDF'yi açmak veya yazdırmak için şifre gerekmez . Bu belgeyi şifre olmadan Adobe Reader'da açtığınızda, başlık SECURED Bu, parola ile açılan şifreli PDF ile aynı uyarıdır.

Bu belgeyi yeni bir PDF'ye yazdırdığınızda , kısıtlayıcı düzenleme kaldırıldığı için GÜVENLİ uyarısı kaldırılır.

password_level_restrictive_editing

Tüm Adobe ürünleri, izinler parolası tarafından belirlenen kısıtlamaları uygular. Ancak, üçüncü taraf ürünleri bu ayarları desteklemiyorsa, belge alıcıları ayarlanan kısıtlamaların bir kısmını veya tümünü atlayabilir .

Bu nedenle, PDF'ye yazdırdığınız belgenin kısıtlayıcı düzenlemenin etkinleştirildiğini ve açmak için gerekli bir parolaya sahip olmadığını varsayıyorum .

PDF şifrelemesini kırma konusunda

Hiçbir PyPDF2 veya PyPDF4 , PDF belgesinin belge açık parola işlevini kırmak için tasarlanmamıştır. Şifrelenmiş parola korumalı bir PDF dosyasını açmaya çalışırlarsa, her iki modül de aşağıdaki hatayı atar.

PyPDF2.utils.PdfReadError: dosyanın şifresi çözülmedi

Şifrelenmiş bir PDF dosyasının açılış parolası işlevi çeşitli yöntemler kullanılarak atlanabilir, ancak tek bir teknik çalışmayabilir ve parola karmaşıklığı da dahil olmak üzere çeşitli faktörler nedeniyle bazıları kabul edilemez.

PDF şifreleme, PDF sürümüne bağlı olarak dahili olarak 40, 128 veya 256 bit şifreleme anahtarlarıyla çalışır. İkili şifreleme anahtarı, kullanıcı tarafından sağlanan bir paroladan türetilir. Parola uzunluk ve kodlama kısıtlamalarına tabidir.

Örneğin, PDF 1.7 Adobe Extension Level 3 (Acrobat 9 - AES-256) Unicode karakterleri (65.536 olası karakter) tanıttı ve parolanın UTF-8 göstergesinde maksimum uzunluğu 127 bayta çarptı.


Aşağıdaki kod, kısıtlayıcı düzenleme etkinleştirilmiş bir PDF açacaktır. SECURED uyarısı eklenmeden bu dosyayı yeni bir PDF'ye kaydeder. Tika kodu, yeni dosyadan içeriğini ayrıştırmak olacaktır.

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)

Bu kod, dosyayı açmak için bir parola gerekip gerekmediğini kontrol eder. Bu kod geliştirilebilir ve diğer işlevler eklenebilir. Eklenebilecek başka özellikler de vardır, ancak pikepdf belgeleri kod tabanındaki yorumlarla eşleşmez, bu nedenle bunu geliştirmek için daha fazla araştırma gerekir.

# 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
Parola girmeden güvenli bir PDF dosyasını nasıl açıyorsunuz?
Hayat

1
Yalnızca kısıtlayıcı düzenleme korumasından mı bahsediyorsunuz?
Hayat karmaşıktır

1
Yanıt, kısıtlayıcı düzenleme koruması etkin, ancak yazdırmaya izin verilen bir PDF ile çalışan kodla güncellendi.
Hayat karmaşık

1
XHTML kullanabilir misiniz?
Hayat karmaşık

1
Cevabı XHTML çıktısını değiştirmek için değiştirdim. JSON mümkündür, ancak tika ayrıştırıcıyla ilgili github proje kodunu kazmayı gerektirir.
Hayat karmaşıktır

1

Bu dosyaları parola olmadan açtığınızda bu dosyaların oluşturduğu hatayı işlemeyi deneyebilirsiniz.

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

Ayrıştırma çalışmanız için döndürülen pdf_obj komutunu kullanabilirsiniz. Ayrıca, şifrelenmiş bir PDF'niz olması durumunda şifreyi de sağlayabilirsiniz.


1
Cevabınız için teşekkür ederim! Parola olmadan okumaya çalışıyoruz. Şu anda, UPDATE 10/7/2019
Acemi

Bu, soruyu cevaplamaktan çok uzak. Sorunun tamamını okumadığınız anlaşılıyor.
shoonya ek

1
Bu, parolanın varsayılan değeri Yok olduğunda normalde pikepdf'in başarısız olduğu güvenli PDF'leri işler. Boş bir dizeyi geçerek güvenli bir PDF belgesini (çalıştığım test durumlarda) düzgün bir şekilde açabilir ve ayrıştırabilir.
Mahendra Singh

1
@Başlangıç, bu durumda PDF'leri buraya dönüştürmek zorunda değilsiniz. Bu, güvenli PDF'lerin boş bir şifre sağlayarak çalıştığı önceki deneyimimden kaynaklanmaktadır.
Mahendra Singh

1
@Başlangıç ​​bu benim tüm kodum. Bu yalnızca pikepdf'den pdf_object döndürür. Bu pdf dosyasını kaydetmek istiyorsanız, döndürülen nesneyi pdf_obj.save ('your_file_path') kullanarak kaydedin. Bundan sonra, metni ve diğer nesneleri ayrıştırmak için bu PDF'yi kullanabilirsiniz. Metin çıkarma için PdfPlumber adlı bir kütüphane kullanıyorum .
Mahendra Singh

1

Tabula-py için, read_pdf ile şifre seçeneğini deneyebilirsiniz. Tabula-java'nın işlevine bağlıdır, bu yüzden hangi şifrelemenin desteklendiğinden emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.