Estrarre i dati audio, MIDI e video da un file PDF
Un file PDF può contenere anche autonomi dati audio, MIDI e video [nota 1], che possono essere estratti per ricostruire separatamente il formato di file corrispondente.
Estrarre i dati audio da un file PDF
Mostriamo un possibile codice, con il quale potranno essere raccolti i dati audio, presenti nel file PDF, di formato MP3, OGG e WAV, per creare il corrispondente file audio indipendente:
Public Sub Main()
Dim s, id As String
Dim mp3, ogg, wav, n, i As Integer
s = File.Load("/percorso/del/file.pdf")
n = InStr(s, "EmbeddedFile")
mp3 = InStr(s, "ID3", n)
If mp3 == 0 Then
If InStr(s, "\xFF\xFB\x92") > 0 Then mp3 = InStr(s, "\xFF\xFB\x92")
If InStr(s, "\xFF\xFB\x93") > 0 Then mp3 = InStr(s, "\xFF\xFB\x93")
Else
id = "mp3"
i = mp3
Endif
ogg = InStr(s, "Ogg", n)
If ogg > 0 Then
id = "ogg"
i = ogg
Endif
wav = InStr(s, "WAVEfmt ", n)
If InStr(s, "WAVEfmt ", n) * InStr(s, "RIFF", wav - 8) > 0 Then
id = "wav"
i = wav - 8
Endif
' Ottiene il valore della quantità dei dati audio dichiarato nel file PDF:
n = Val(Scan(Mid(s, n, i - n), "*Length * *")[1])
' Con i byte-dati estratti crea un file audio indipendente:
File.Save("/tmp/audio." & id, Mid(s, i, n))
End
Estrarre i dati MIDI da un file PDF
Mostriamo un possibile codice, con il quale potranno essere raccolti i dati MIDI, per creare un file MIDI indipendente:
Public Sub Main()
Dim s As String
Dim i, n As Integer
s = File.Load("/percorso/del/file.pdf")
i = InStr(s, "MThd")
n = RInStr(s, "Length", i)
' Ottiene il valore della quantità dei dati MIDI dichiarato nel file PDF:
n = Val(Scan(Mid(s, n, i - n), "*Length * *")[1])
' Con i byte-dati estratti crea un file MIDI indipendente:
File.Save("/tmp/MIDI.mid", Mid(s, i, n))
End
Estrarre i dati video da un file PDF
Mostriamo un possibile codice, con il quale potranno essere raccolti i dati video, presenti nel file PDF, di formato ASF, AVI, MOV e MP4, per creare il corrispondente file video indipendente:
Public Sub Main()
Dim s, id As String
Dim asf, avi, mov, mp4, n, i As Integer
s = File.Load("/percorso/del/file.pdf")
n = InStr(s, "EmbeddedFile")
If InStr(s, "ftypmp42", n) > 0 Then mp4 = InStr(s, "ftypmp42", n)
If InStr(s, "ftypisom", n) * InStr(s, "mp41", InStr(s, "ftypisom", n)) > 0 Then mp4 = InStr(s, "ftypisom", n)
If mp4 * InStr(s, "mp4", mp4) > 0 Then
i = mp4 - 4
id = "mp4"
Endif
avi = InStr(s, "AVI LIST", n)
If avi > 0 Then
i = avi - 8
id = "avi"
Endif
i = InStr(s, "ftypqt", n)
If i > 0 Then
i = i - 4
id = "mov"
Endif
asf = InStr(s, "0&\xB2u\x8Ef\xCF\x11", n)
If asf > 0 Then
i = asf
id = "asf"
Endif
' Ottiene il valore della quantità dei dati video dichiarato nel file PDF:
n = Val(Scan(Mid(s, n, i - n), "*Length * *")[1])
' Crea il file video:
File.Save("/tmp/video." & id, Mid(s, i, n))
End
Note
[1] Per inserire i dati di un qualsiasi file all'interno di un file PDF, si può utilizzare nel Terminale il comando "pdfattach ":
Vedi: https://www.mankier.com/1/pdfattach