FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Détection connexion internet (résolu)
par JL35 Hier à 13:55

» Le parcours du cavalier sur un échiquier 8 x 8
par pascal10000 Dim 23 Juil 2017 - 13:26

» Casse-tête : Echanger les positions des cavaliers
par papydall Sam 22 Juil 2017 - 19:42

» Compilateur FBPano
par jean_debord Sam 22 Juil 2017 - 10:54

» demande pour recuperer un text speciale
par pascal10000 Ven 21 Juil 2017 - 22:04

» KGF_dll - nouvelles versions
par Klaus Ven 21 Juil 2017 - 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 Opérations sur des fichiers PDF

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



Nombre de messages : 5896
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Opérations sur des fichiers PDF   Jeu 24 Juil 2014 - 19:56

J'ouvre un sujet à part pour ne pas polluer celui de ygeronimi sur l'OCR, mais ce XPDF est vraiment un ensemble d'utilitaires PDF très simple à utiliser et très performant.
C'est gratuit, sans installation, on peut le mettre où on veut (c'est portable). Et on n'essaye pas de vous fourguer discrètement  un moteur de recherche bidon, rien, tout est clair.
Et surtout, pour nous, les modules se lancent en ligne de commande, sans interface graphique, donc facilement depuis un programme Panoramic.
http://www.foolabs.com/xpdf/download.html , prendre la version xpdfbin-win-3.04.zip

Après dézippage on se retrouve avec un répertoire de modules et un répertoire de docs correspondantes, une par module, plus quelques bricoles inutiles, perso j'ai tout mis ensemble (modules et docs) dans un répertoire dédié.

Les modules:
- pdfbklt       fabrication d'un livret à partir du pdf (celui-ci non compris dans la livraison)
- pdfdetach  extraction des fichiers inclus dans le pdf
- pdffonts     liste des fontes utilisées
- pdfimages  extraction des images incluses
- pdfinfo       infos diverses sur le pdf
- pdftohtml   conversion pdf html
- pdftopng    conversion pdf en images .png (une image par page)
- pdftoppm    conversion pdf en fichiers ppm (un par page)
- pdftops      conversion pdf en fichier postscript
- pdftotext    conversion pdf en texte pur

J'ai fait un petit programme qui donne la liste des modules, pour chacun on peut afficher la doc correspondante (il y a d'assez nombreux paramètres, souvent semblables d'un module à l'autre), et le lancer en donnant les options éventuelles, le chemin du pdf et celui du résultat, qui peut être un fichier, un répertoire, ou un affichage.
Je les ai tous essayés sans options, ça marche très bien, c'est rapide. Avec les options on doit peaufiner le résultat, mais je n'ai pas (encore ?) eu le courage de m'y plonger.

Je vous livre le programme, un peu simpliste mais ça marche (comme d'habitude les chemins de fichier en tête sont à changer éventuellement, il y en a deux):
Code:

' Utilitaires de traitement PDF (XPDF)
' - pdfbklt    fabrication d'un livret à partir du pdf
' - pdfdetach  extraction des fichiers inclus dans le pdf
' - pdffonts  liste des fontes utilisées
' - pdfimages  extraction des images incluses
' - pdfinfo    infos diverses sur le pdf
' - pdftohtml  conversion pdf html
' - pdftopng  conversion pdf en images .png (une image par page)
' - pdftoppm  conversion pdf en fichiers ppm (un par page)
' - pdftops    conversion pdf en fichier postscript
' - pdftotext  conversion pdf en texte pur
LABEL Doc, Test, Chf, Vpdf, Exec, Vres
DIM rp$, f$, fr$, ftm$, p$, i%, l%, a$, b$, arg$, li%, tl%, wl%, resrep$, sf$

rp$ = "C:\OUTILS\PDF\XPDF": ' Chemin des modules de XPDF
ftm$ = "C:\TEMP\Result.txt"

BORDER_SMALL 0: COLOR 0,180,255,255: FONT_BOLD 0
WIDTH 0,180: HEIGHT 0,290
CAPTION 0, " -  UTILITAIRES  PDF  -"
MEMO 1: WIDTH 1,600: HIDE 1

Dirf(rp$,"exe")
ITEM_ADD 1, CLIPBOARD_STRING_PASTE$
li% = 10: tl% = 0: wl% = 90
FOR i% = 1 TO COUNT(1)
    a$ = ITEM_READ$(1,i%)
    EDIT li%: TOP li%,tl%: WIDTH li%, wl%: TEXT li%,a$
    BUTTON li%+1: TOP li%+1,tl%: LEFT li%+1,LEFT(li%)+WIDTH(li%): WIDTH li%+1,35
    CAPTION li%+1,"Doc": ON_CLICK li%+1, Doc
    BUTTON li%+2: TOP li%+2,TOP(li%+1): LEFT li%+2,LEFT(li%+1)+35: WIDTH li%+2,35
    CAPTION li%+2,"Test": ON_CLICK li%+2,Test
    li% = li%+3: tl% = tl%+25
NEXT i%

OPEN_DIALOG 90

FORM 100: TOP 100,0: LEFT 100,WIDTH(0): HEIGHT 100,900: WIDTH 100,600
BORDER_SMALL 100: HIDE 100
LIST 101: PARENT 101,100: FULL_SPACE 101: COLOR 101,255,255,210
FONT_NAME 101,"Lucida Console"

FORM 200: TOP 200,30: LEFT 200,10: WIDTH 200,400: HEIGHT 200,240
BORDER_SMALL 200: HIDE 200: COLOR 200,255,200,200: font_bold 200
ALPHA 201: PARENT 201,200: TOP 201,3: LEFT 201,5: CAPTION 201,"Fichier PDF :"
EDIT 202: PARENT 202,200: TOP 202,20: LEFT 202,0: WIDTH 202,WIDTH(200)-67
TEXT 202," (clic)": ON_CLICK 202,Chf
BUTTON 203: PARENT 203,200: LEFT 203,LEFT(202)+WIDTH(202): TOP 203,TOP(202)
WIDTH 203,50: CAPTION 203,"Voir": ON_CLICK 203,Vpdf
ALPHA 211: PARENT 211,200: TOP 211,TOP(203)+25: LEFT 211,5
CAPTION 211,"Options (éventuel) :"
EDIT 212:PARENT 212,200: TOP 212,TOP(211)+17: LEFT 212,0: WIDTH 212,WIDTH(202)
BUTTON 213: PARENT 213,200: LEFT 213,LEFT(212)+WIDTH(212): TOP 213,TOP(212)
WIDTH 213,50: CAPTION 213,"Doc": ON_CLICK 213,Doc
ALPHA 221: PARENT 221,200: TOP 221,TOP(212)+25: LEFT 221,5: CAPTION 221,"Fichier résultat :"
EDIT 222: PARENT 222,200: TOP 222,TOP(221)+17: LEFT 222,0: WIDTH 222,WIDTH(212)
BUTTON 231: PARENT 231,200: TOP 231,TOP(222)+25: LEFT 231,120: CAPTION 231,"Exécuter"
ON_CLICK 231,Exec
BUTTON 232: PARENT 232,200: TOP 232,TOP(231)+25: LEFT 232,LEFT(231)-20: WIDTH 232,WIDTH(231)+40
CAPTION 232,"Voir le résultat": ON_CLICK 232,Vres: HIDE 232
end
' ==============================================================================
Doc:
IF NUMBER_CLICK = 213
    a$ = LEFT$(p$,LEN(p$)-3)
    TOP 100,TOP(200)+150: LEFT 100,0
ELSE
    i% = NUMBER_CLICK-1: a$ = TEXT$(i%): a$ = LEFT$(a$,LEN(a$)-3)
    CAPTION 100, STRING$(80," ")+UPPER$(TEXT$(i%))
    TOP 100,TOP(0): LEFT 100,WIDTH(0)
END_IF
a$ = rp$ + "\" + a$ + "txt"
FILE_LOAD 1,a$: CLEAR 101
FOR i% = 1 TO COUNT(1)
    a$ = RTRIM$(ITEM_READ$(1,i%))
    IF a$<>"" THEN ITEM_ADD 101,a$
NEXT i%
SHOW 100
RETURN
' ==============================================================================
Test:
i% = NUMBER_CLICK-2: p$ = TEXT$(i%)
CAPTION 200, STRING$(40," ")+"TEST  DE  "+UPPER$(p$)
resrep$ = ""
CAPTION 221,"Fichier résultat :"
TEXT 212,"": TEXT 222,""
a$ = LEFT$(p$,LEN(p$)-4)
IF a$="pdfdetach" OR a$="pdfimages" OR a$="pdftohtml" OR a$="pdftopng" OR a$="pdftoppm"
    CAPTION 221,"Répertoire résultat :": resrep$ = "1"
    IF a$ = "pdfimages" THEN sf$ = "ppm"
    IF a$ = "pdftopng" THEN sf$ = "png"
    IF a$ = "pdftoppm" THEN sf$ = "ppm"
    IF a$ = "pdfdetach" THEN sf$ = "*"
    IF a$="pdftohtml"
        CAPTION 221,"Répertoire résultat (ne doit pas exister) :"
        sf$ = "*": ' fichiers produits: .htm et .png
    END_IF
END_IF
IF a$="pdfbklt" OR a$="pdffonts" OR a$="pdfinfo"
    TEXT 222,ftm$
END_IF
HIDE 232: SHOW 200
RETURN
' ==============================================================================
Chf:
FILTER 90,"Fichiers PDF|*.pdf"
f$ = FILE_NAME$(90): IF LEN(f$)<4 THEN RETURN
TEXT 202,f$
RETURN
' ==============================================================================
Vpdf:
IF TEXT$(202) = "" THEN RETURN
f$ = TEXT$(202)
EXECUTE_WAIT f$: ' voir le pdf sous Acrobat
RETURN
' ==============================================================================
Exec:
IF TEXT$(202) = "" OR TEXT$(202) = " (clic)"
    MESSAGE "Pas de fichier PDF !": RETURN
END_IF
IF TEXT$(222) = "" THEN MESSAGE "Pas de fichier résultat !": RETURN
fr$ = TEXT$(222)
IF resrep$ = "1" THEN resrep$ = fr$
b$ = LEFT$(p$,LEN(p$)-4)
IF b$="pdfbklt" OR b$="pdffonts" OR b$="pdfinfo"
    fr$ = ">"+fr$: ' sortie sur stdout -> fichier
END_IF
a$ = TRIM$(TEXT$(212)): ' paramètres (options) éventuels
IF b$ = "pdfdetach"
    EXECUTE_WAIT "Cmd.exe /c "+rp$+"\"+p$+" -list "+f$+" >"+ftm$
    FILE_OPEN_READ 1,ftm$: FILE_READLN 1,b$: FILE_CLOSE 1: FILE_DELETE ftm$
    IF TRIM$(b$)="0 embedded files"
        MESSAGE "Aucun fichier inclus dans "+f$: RETURN
    END_IF
    arg$ =  "-saveall " + f$ + " -o "+resrep$
ELSE
    arg$ = a$ + " " + f$ + " " + fr$
END_IF
EXECUTE_WAIT "Cmd.exe /C "+rp$+"\"+p$ + " " + arg$
SHOW 232
RETURN
' ==============================================================================
Vres:
IF resrep$ <> ""
    IF DIR_EXISTS(resrep$) = 0 THEN RETURN: ' répertoire non créé
    Dirf(resrep$,sf$)
    FILE_OPEN_WRITE 9, ftm$
        FILE_WRITELN 9,"Répertoire de " + resrep$
        FILE_WRITELN 9,""
        FILE_WRITELN 9,CLIPBOARD_STRING_PASTE$
    FILE_CLOSE 9
    a$ = ftm$
ELSE
    a$ = TEXT$(222)
    IF FILE_EXISTS(a$) = 0 THEN RETURN
end_if
EXECUTE_WAIT "Notepad.exe " + a$
RETURN
' ==============================================================================
SUB Dirf(rep$,ext$)
' Liste des fichiers de rep$, d'extension ext$ (si ext$= "*", tous les fichiers)
' Résultat: chaîne dans le clipboard, fichiers triés, sous-répertoires en tête
' (NB: rep$ accepte les noms de répertoires contenant des espaces).
DIM_LOCAL svr$, a$, f$, ndl%, i%, nt%
ndl% = 5000: WHILE OBJECT_EXISTS(ndl%)=1: ndl%=ndl%+1000: END_WHILE
DLIST ndl%
svr$ = DIR_CURRENT$: DIR_CHANGE rep$
IF ext$<>"*" AND LEFT$(ext$,1)<>"." THEN ext$="."+ext$
ext$ = UPPER$(ext$)
nt% = 0
f$=FILE_FIND_FIRST$: WHILE f$="." OR f$="..": f$=FILE_FIND_NEXT$: END_WHILE
IF f$ = "_" THEN nt% = 1: ' répertoire vide
WHILE f$ <> "_"
    IF ext$ = "*" OR UPPER$(FILE_EXTRACT_EXTENSION$(f$)) = ext$
        IF FILE_EXISTS(f$) = 0 THEN f$ = " "+f$
        ITEM_ADD ndl%,f$
    END_IF
    f$ = FILE_FIND_NEXT$
END_WHILE
FILE_FIND_CLOSE
DIR_CHANGE svr$: ' restore le répertoire d'origine
IF nt% = 1
    ' répertoire vide
    a$ = ""
ELSE
    SORT ndl%: a$ = ""
    FOR i% = 1 TO COUNT(ndl%)
        f$ = ITEM_READ$(ndl%,i%): IF LEFT$(f$,1)=" " THEN f$="[D]"+MID$(f$,2,100)
        a$=a$+f$+CHR$(13)+CHR$(10)
    NEXT i%
    a$ = LEFT$(a$,LEN(a$)-2)
END_IF
DELETE ndl%
CLIPBOARD_STRING_COPY a$
END_SUB
' ==============================================================================

Le pdfbklt.exe : fabrication d'un livret (booklet, rien à voir avec bouclette) à partir d'un pdf, fait partie de la série mais n'est pas dans la livraison, il doit être facile à trouver (là par exemple: http://www.sil.org/~hosken/Utils/pdfbklt.zip ), mais je ne l'ai pas testé... à première vue ça n'a pas l'air simple à manipuler, et attention, il modifie le pdf source, faire une copie avant.
J'ai un petit programme panoramic qui fait ça très bien (avec Nconvert).

ed. 26/7 little bug


Dernière édition par JL35 le Sam 26 Juil 2014 - 23:09, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Opérations sur des fichiers PDF   Ven 25 Juil 2014 - 11:36

Merci JL35, toujours utile d'avoir ça sur la main Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5896
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Opérations sur des fichiers PDF   Ven 25 Juil 2014 - 11:42

Sûr, c'est pratique d'avoir tout regroupé. Léger, facile à utiliser.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7930
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 25 Juil 2014 - 13:51

Ca c' est une bonne idée !

Bravo JL35 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Opérations sur des fichiers PDF   

Revenir en haut Aller en bas
 
Opérations sur des fichiers PDF
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Opérations sur des fichiers PDF
» Hébergement gratuit images photos fichiers
» [Résolu] OE6 : restaurer fichiers .dbx supprimés
» [Résolu] classement des fichiers et dossiers
» Mapsource refuse les fichiers GPX nouvellement créés

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Présentation et bavardage-
Sauter vers: