Soubor byl poškozen ve smyslu, že nebyl dokončen zápis .pdf pro nedostatek místa na disku. První skript najde začátky streamů se značkou JFIF a druhý provádí extrakci těch fotek.
# Import potřebných knihoven
import re
# Otevření PDF souboru v binárním režimu
with open('music theory part 3.pdf', 'rb') as file:
content = file.read() # Načtení obsahu souboru
# Vyhledání pozic řetězce "stream"
positions = [m.start() for m in re.finditer(b'stream', content)]
# Tisk prvních dvaceti bajtů od každé nalezené pozice
for pos in positions:
start = pos # Pozice začátku řetězce "stream"
end = start + 20 # Konec prvních dvaceti bajtů
print(f'Pozice: {pos}, Prvních 20 bajtů: {content[start:end]}')
EXTRAKCE
import re
# Funkce pro extrakci obrázků
def extract_images(pdf_file):
with open(pdf_file, 'rb') as file:
content = file.read() # Načtení obsahu souboru
# Procházení všech výskytů "stream"
for match in re.finditer(b'stream', content):
start = match.start() # Pozice začátku "stream"
# Tisk pozice a prvních 20 bajtů od "stream"
print(f'Pozice: {start}, Prvních 20 bajtů: {content[start:start + 20]}')
# Hledání konce streamu (použijeme "endstream" místo "endobj" pro přesnost)
endstream_match = re.search(b'endstream', content[start:])
if endstream_match:
# Začátek obrazových dat je po "stream\n"
newline_pos = content.find(b'\n', start)
if newline_pos == -1:
continue # Pokud není newline, přeskočíme
data_start = newline_pos + 1
data_end = start + endstream_match.start() # Konec před "endstream"
image_data = content[data_start:data_end]
# Kontrola, zda je to platný JPEG (začíná \xff\xd8)
if image_data.startswith(b'\xff\xd8'):
# Uložení obrázku
with open(f'image_{start}.jpg', 'wb') as img_file:
img_file.write(image_data)
print(f'Obrázek uložen: image_{start}.jpg')
# Spuštění funkce s vaším PDF souborem
extract_images('music theory 2 - chordsn rhytms.pdf')
Žádné komentáře:
Okomentovat