Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Čitanje slika iz PDF-a

[es] :: Pascal / Delphi / Kylix :: Čitanje slika iz PDF-a

[ Pregleda: 1066 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_deran_

Član broj: 69493
Poruke: 252
91.232.237.*



+1 Profil

icon Čitanje slika iz PDF-a13.07.2022. u 14:28 - pre 21 meseci
Imam PDF fajl u kojem se nalaze neke slike koje treba da prebacim u TBitmap recimo. Jedna slika preko cele stranice PDF-a, može biti više takvih stranica, nema teksta.
Mogu da izdvojim deo PDF fajla gde su podaci o slici ali šta onda? Nađem "Subtype/Image" i "Type/XObject", vidim čime da dekodiram, dimenzije itd ali tu sam zapeo. Kako dekodirati npr. DCTDecode ili FlateDecode u Delphi-u i kad se to uradi kako dobiti pixele od toga (TBitmap) ?
Valjalo bi bez 3rd party komponenti ali ako mora može i to.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Čitanje slika iz PDF-a13.07.2022. u 19:42 - pre 21 meseci
Mislis da rucno citas pdf format i vadis slike i dekodujes? Ne bih bas savetavao, mislim da je lakse da iskoristis neki od besplatnih komand line programa za to, npr:
https://www.xpdfreader.com/about.html (upotreba je laka, pdfimages -j Input.pdf img).



 
Odgovor na temu

Living Light

Član broj: 331540
Poruke: 6714



+1159 Profil

icon Re: Čitanje slika iz PDF-a13.07.2022. u 21:00 - pre 21 meseci
@savkic,
Možda čovek misli na izdvajanje samo jednog otiska (vidjenja), ili lista,

Evo na primer ovako:
Ako je PDF ovo:

https://www.st.com/resource/en/datasheet/CD00000479.pdf

Iz toga bi da izdvojim PDF stranicu 6.
To usnimim preko ACDSeee i izdvojim samo jednu stranu.
Nakon toga risajzujem/podesim za prikaz ovde na ES-u.

Ell, negde grešim?
Toliko mnogo knjiga, toliko malo vremena...
 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
91.232.237.*



+1 Profil

icon Re: Čitanje slika iz PDF-a14.07.2022. u 08:03 - pre 21 meseci
@savkic
Da, hoću ručno bajtove koje sam izdvojio iz celog PDF-fajla pretvorim u TBitmap. Izdvojiti je baš lako, čak nema ni mnogo dekodera koji su u igri (6 ili 7 čini mi se, ja bih obradio 2 ili najviše 3), ali problem je što ne znam kako da dekodiram i nakon toga napravim bitmap. Jedan od dekodera je ako sam dobro shvati običan gzip (FlateDecode) ali dobijem neku grešku kad taj niz bajtova probam da dekodiram sa gzip. Uspevao sam nekad da provalim kako iz bitova da napravim sliku (kod nekih brojačica novca) ali ovde sam zapeo.
Jeste lakše uvek koristiti tuđe rešenje ali to će da me košta na drugoj strani :) performanse itd... Ako je to neko već negde napravio, mogu i ja. Ne čini mi se kao projekat od mesec ili više dana pa bih da odradim to kako treba.


@Living Light
Ne mislim na print screen jednog lista nego na listanje svih slika koje su ubačene u PDF i učitavanje slike u TBitmap. Pošto su sve slike uvek preko cele stranice i nema teksta, jeste, svodi se na print screen stranice ali to bi bio neki alternativni put. Recimo ghostscript izgleda da može tako nešto ali nisam ga koristio do sada. Njegov DLL mi je prihvatljivije rešenje od pozivanja drugog exe fajla koji mi exportuje slike negde na disk.


Recimo da nemam PDF na disku i da mi ni bitmape ne trebaju na disku, da mi je sve to u memoriji. Nekako mi je višak snimati PDF na disk pa pozivati strani exe i učitavati sa diska BMP i onda čistiti to.
Sve mi se čini da postoji negde neka funkcija (možda u drugim jezicima ako ne u Delphi) koja se zove npr Deflate, primi bajtove, napravi nove i onda da imam nešto tipa TBitmap.LoadFromNekiFormat(pa ti bajtovi). Ako i nema ne verujem da je neka nuklerna fizika.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Čitanje slika iz PDF-a14.07.2022. u 11:20 - pre 21 meseci
> Da, hoću ručno bajtove koje sam izdvojio iz celog PDF-fajla pretvorim u TBitmap. Izdvojiti je baš lako, čak nema ni mnogo dekodera
> koji su u igri (6 ili 7 čini mi se, ja bih obradio 2 ili najviše 3), ali problem je što ne znam kako da dekodiram i nakon toga napravim bitmap.
> Jedan od dekodera je ako sam dobro shvati običan gzip (FlateDecode) ali dobijem neku grešku kad taj niz bajtova probam da dekodiram sa gzip.

To nisam nikad radio, PDF format mi je uvek bio nocna mora (a gledao sam ga zbog nekih drugih stvari), znam da neke strimove encoduju putem zliba (Delphi to podrzava) pa eventualno da to probas.

> Recimo da nemam PDF na disku i da mi ni bitmape ne trebaju na disku, da mi je sve to u memoriji. Nekako mi je višak snimati PDF na disk pa
> pozivati strani exe i učitavati sa diska BMP i onda čistiti to.

To sad vise i nema veze, sistem koristi kes i za takve kratke stvari mislim da nista i ne pise na disk.

> Sve mi se čini da postoji negde neka funkcija (možda u drugim jezicima ako ne u Delphi) koja se zove npr Deflate, primi bajtove, napravi nove i
> onda da imam nešto tipa TBitmap.LoadFromNekiFormat(pa ti bajtovi). Ako i nema ne verujem da je neka nuklerna fizika.

Ima load from Stream, a pogledaj i Graphics32, ako tu nema onda tesko da nesto slicno gotovo postoji za Delphi.

 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
91.232.237.*



+1 Profil

icon Re: Čitanje slika iz PDF-a14.07.2022. u 12:10 - pre 21 meseci
Citat:
To nisam nikad radio, PDF format mi je uvek bio nocna mora (a gledao sam ga zbog nekih drugih stvari), znam da neke strimove encoduju putem zliba (Delphi to podrzava) pa eventualno da to probas.

Probaću zlib. Nisam napomenuo da mora u D7 da se reši :(

Citat:
To sad vise i nema veze, sistem koristi kes i za takve kratke stvari mislim da nista i ne pise na disk.

Kad kažeš "sistem" misliš na OS (windows)? Ne znam da li sam te shvatio dobro, ja kažem npr bmp.SaveToDisk(aaaa) i onda par komandi pa delete tog fajla, i on neće ni ići na disk??? Kako će neka strana aplikacija da vidi fajl, iz nekog windows keša ili će da kaže da ne postoji fajl?

Citat:
Ima load from Stream, a pogledaj i Graphics32, ako tu nema onda tesko da nesto slicno gotovo postoji za Delphi.

Znaš li možda kako treba da izgleda taj stream?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Čitanje slika iz PDF-a14.07.2022. u 14:58 - pre 21 meseci
Da, WindowsOS kesira sve sto moze i na disk salje samo ako bas mora, kratki fajlovi i slicno se uglavnom i ne upisuju na disk, dalje sam disk uredjaj sad ima kes pa i on upisuje tek kad mora itd. Ako su fajlovi neki manji (5 do 10mb) svejedno je kako ces raditi.


> Znaš li možda kako treba da izgleda taj stream?

Ne, ne znam detalje formata slika i slicno. TGraphics.LoadFromStream ocekuje pravi graficki format (.bmp, .jpg, cesto TGraphics.LoadFromFile se preusmerava na LoadFromStream).


 
Odgovor na temu

ackopk
Aleksandar

Član broj: 195259
Poruke: 1846



+67 Profil

icon Re: Čitanje slika iz PDF-a15.07.2022. u 11:23 - pre 21 meseci
Pogledaj ovaj link, trebao bi da ti bude od pomoci.

Code:
https://github.com/zeltox/Google-Drive-PDF-Downloader


 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
91.232.237.*



+1 Profil

icon Re: Čitanje slika iz PDF-a18.07.2022. u 14:29 - pre 21 meseci
USPEO!


Ako je PDF "Filter" DCTDecode, onda je stream bukvalno JPG slika od početka do kraja! Kad se snimi u fajl, otvori se najnormalnije :)
Ako je PDF "Filter" FlateDecode, onda se sa ZLIB raspakuje stream (hvala Savkiću) i dobije se niz od širina * visina * 3 bajta. Bajtovi su redom RGB vrednosti, pa kad se nacrtaju na bitmapi to je to! Samo treba od stream-a pre raspakivanja oduzeti prva dva bajta, to je neki header.

Ostale Filtere neću za sada obrađivati, ali ako nekoga interesuje neka piše pa ako u međuvremenu rešim još neke napisaću ovde.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Čitanje slika iz PDF-a

[ Pregleda: 1066 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.