Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2001 Le 20/09/2012, à 06:10

Mindiell

Re : /* Topic des codeurs [7] */

Site web Poppler a écrit :

Use bugzilla to report bugs or suggest enhancements. The component is poppler.
If you have documents that don't render properly with poppler, please open a bug in bugzilla and attach the PDF file there, if possible.

Tu peux toujours essayer, mais perso ça m'énerve ce genre de lib ou la doc est inexistante ! A quoi bon s'ouvrir au monde si c'est pour ne rien donner d'autre que du code...

Hors ligne

#2002 Le 20/09/2012, à 10:38

Elzen

Re : /* Topic des codeurs [7] */

Steap a écrit :

Effectivement, ça segfault sur :

surface = page.get_image(0)

Chez moi (avec un PDF dont poppler me dit bien qu'il fait 186 pages), get_page() me renvoie bien un objet page quel que soit le numéro de la page que je lui demande, par contre, page.get_image() ne fonctionne que pour la page 0 et l'image 0, et segfault dans tous les autres cas que j'ai testé. Et page.get_thumbnail() segfault dans tous les cas hmm

En revanche, get_page(0).get_image(0) m'envoie bien un objet cairo.ImageSurface, qui n'est pas null (mais qui ne contient peut-être rien, ce qui expliquerait le rendu bruité).

Steap a écrit :

1) Tu ne dois sans doute pas pouvoir appeler page.get_image(0) (d'ailleurs, page.get_image_mapping() retourne une liste vide, serait-ce lié ?)

Bah, n'ayant pas grand chose comme doc (en gros, j'me réfère juste à ça, qui n'est pas super détaillé), et vu que get_thumbnail(), qui a priori m'aurait mieux convenu, plante systématiquement, j'ai tenté de me rabattre sur get_image(), qui est à première vue la seule autre méthode renvoyant un truc depuis lequel je vois à peu près comment récupérer une image ; mais je n'suis pas sûr du tout de la pertinence, j'suis peut-être complètement à côté de la plaque…

Steap a écrit :

2) Il faudrait sans doute patcher _wrap_poppler_page_get_image()

Ouais, enfin, si je commence à devoir patcher les biblis que j'utilise, j'suis pas sorti hmm

Ce serait d'ailleurs peut-être plus simple de changer de biblis, j'avais pris Poppler parce que c'était la première que j'avais trouvée (et apparemment, parce que les lecteurs PDFs que j'utilise s'en servent yikes comment ils font ?), mais si quelqu'un connaît un autre moyen d'obtenir une image depuis un PDF qui soit compatible PyGTK, j'écoute…

Hors ligne

#2003 Le 20/09/2012, à 11:36

grim7reaper

Re : /* Topic des codeurs [7] */

@Mindiell : il y a 2 liens pour de la doc’ ici.
Liens vers la doc’ des binding Qt et glib (le binding Python se basant sur ce dernier).



@ArkSeth : tu es sûr que c’est get_image que tu est censé utiliser ?
Ça te renverrais pas genre une image contenu dans la page ? Ce qui expliquerait le rôle de image_id.

Et pour get_thumbnail :

http://people.freedesktop.org/~ajohnson/docs/poppler-glib/PopplerPage.html#poppler-page-get-thumbnail a écrit :

Get the embedded thumbnail for the specified page. If the document doesn't have an embedded thumbnail for the page, this function returns NULL.

Ça me semble clair non ?

Tout ça pour te dire, qu’il me semble plus logique de passer par poppler_page_render. Du genre (truc rapide et moche, mais qui ne plante pas et affiche un truc pas trop mauvais mais sûrement à creuser) :

import os
import gtk
import cairo
import poppler

width=768
height=1024

fpath = "file://"+os.path.abspath('bas-niveau1.pdf')
page = poppler.document_new_from_file(fpath, None).get_page(0)

pixmap = gtk.gdk.Pixmap(None, width, height, 24)
cr = pixmap.cairo_create()
cr.set_source_pixmap(pixmap, 0, 0)
page.render(cr)
cr.paint()

image = gtk.Image()
image.set_from_pixmap(pixmap, None)

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", gtk.main_quit)
window.add(image)
image.show()
window.show()
gtk.main()

Hors ligne

#2004 Le 20/09/2012, à 11:42

Elzen

Re : /* Topic des codeurs [7] */

Maieùh, tu postes juste pendant que j'édite pour dire que j'ai compris tongue

En fait, je cherchais à récupérer une image depuis poppler, alors qu'il fallait effectivement procéder dans le sens inverse : demander à la page de se tracer sur un cairo.Context, via la méthode page.render(). Ceci dit, quand on fait ça directement, il reste du bruit dans l'image, dû au fait que le pixmap d'origine n'est pas initialisé avant traitement, donc il faut partir d'un pixmap pré-rempli.

Du coup, la fonction précédente, corrigée :

import os, gtk, poppler

def read_file_glimpse(fpath, width, height, force):
	# Lecture du PDF et récupération de la première page.
	fpath = "file://"+os.path.abspath(fpath)
	page = poppler.document_new_from_file(fpath, None).get_page(0)
	pagewidth,pageheight = page.get_size()
	# Création d'un pixmap opaque, sans bruit.
	back = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, width, height)
	back.fill(0xFFFFFFFF)
	pixmap,mask = back.render_pixmap_and_mask()
	# Rendu de la page du PDF dans le pixmap.
	cr = pixmap.cairo_create()
	cr.scale(width/pagewidth, height/pageheight)
	page.render(cr)
	# Conversion du pixmap en pixbuf.
	return back.get_from_drawable(pixmap,
		gtk.gdk.colormap_get_system(), 0, 0, 0, 0, width, height)

À première vue, pas de segfault à l'horizon, même quand j'essaye d'autres pages que la première. Ne pas oublier le cr.scale(), faute de quoi la page apparaîtra en vraie largeur, ce qui, si votre image de destination est assez petite, peut être d'un intérêt limité.

(Quant à la méthode get_thumbnail(), ça aurait paru effectivement clair si elle s'était contentée de renvoyer null (None, en python, quoi) comme prévu… mais le fait qu'elle fasse segfaulter, bof…)

Dernière modification par ArkSeth (Le 20/09/2012, à 11:43)

Hors ligne

#2005 Le 20/09/2012, à 11:56

tshirtman

Re : /* Topic des codeurs [7] */

Steap a écrit :

Je suis revenu de chez Google : ça déchire !

Ouais, tous leurs locaux sont des implémentations de la spec "paradis sur terre"… ça fait envie… ils m'ont contacté pour mes connaissances python/linux, mais j'ai eu un entretiens bien plus bas niveau que ça… ils aiment le C système… c'était intéressant, mais ce sera pas pour tout de suite pour moi.

Hors ligne

#2006 Le 20/09/2012, à 12:02

The Uploader

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

Ce serait d'ailleurs peut-être plus simple de changer de biblis, j'avais pris Poppler parce que c'était la première que j'avais trouvée (et apparemment, parce que les lecteurs PDFs que j'utilise s'en servent yikes comment ils font ?), mais si quelqu'un connaît un autre moyen d'obtenir une image depuis un PDF qui soit compatible PyGTK, j'écoute…

T'es pas d'ailleurs cantonné à GTK2 avec PyGTK ? (puis le dernier commit date de octobre 2011...) hmm
Pour GTK3 en Python y'a PyGObject

Le support GTK* c'est bien pire en Ruby : Ruby GTK date de 2009 et est pour GTK2, Ruby Gnome 2 est tout aussi obsolète... hmm

Dernière modification par The Uploader (Le 20/09/2012, à 12:05)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#2007 Le 20/09/2012, à 12:13

Elzen

Re : /* Topic des codeurs [7] */

Yep, GTK2 uniquement. Mais bon, ç'pas non plus voué à disparition prochaine, et j'ai la flemme de changer pour le moment (d'autant que GI est indépendant du langage, donc moins efficace qu'un truc dédié…). T'façon, quand je voudrai que Touhy soit codé sérieusement, je changerai peut-être carrément de langage.

Hors ligne

#2008 Le 20/09/2012, à 12:19

The Uploader

Re : /* Topic des codeurs [7] */

Ben Touhy commence à être assez énorme, non ?

Plus tu auras de code "legacy", plus tu mettras la conversion à GTK3 à plus tard, et plus elle sera difficile (true story).

ArkSeth a écrit :

T'façon, quand je voudrai que Touhy soit codé sérieusement, je changerai peut-être carrément de langage.

Pourquoi ? Y'a pas besoin ! yikes
Passer à GTK 3, et en plus changer de langage : à ta place j'aurais doublement la flemme. yikes


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#2009 Le 20/09/2012, à 12:25

The Uploader

Re : /* Topic des codeurs [7] */

Bon, n'empêche que j'ai envie de tester Touhy, moi ! yikes

*après le mémoire*
okay.png


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#2010 Le 20/09/2012, à 12:33

Elzen

Re : /* Topic des codeurs [7] */

The Uploader a écrit :

Ben Touhy commence à être assez énorme, non ?

La dernière version fait à peine plus de dix mille lignes, c'est rien ^^

(Mais j'n'ai pas encore commencé à recoder la bibli pour les applications)

The Uploader a écrit :

Plus tu auras de code "legacy", plus tu mettras la conversion à GTK3 à plus tard, et plus elle sera difficile (true story).

Bah les dernières versions (ç'vrai que je trouve la nouvelle un peu mieux… pour le moment) étaient tellement mal codées que j'ai enchaîné deux ou trois réécritures complètes ; la seule chose qui me gène dans le changement de langage/bibli, c'est la nécessité de mettre franchement les pieds dans le nouveau langage/la nouvelle bibli ; recoder tout, ç't'un détail.

The Uploader a écrit :

Pourquoi ? Y'a pas besoin ! yikes

Bah, déjà, si je reste en Python, il faudra au minimum passer à Python3, un jour…

Edit : à la base, j'voulais changer de langage parce que je trouvais que pour un environnement de bureau sérieux (vu que je considérais au début Touhy comme un prototype, ç'vrai que ça l'est de moins en moins), un langage compilé est plus adapté qu'un langage interprété. Mais ç'vrai que ça se discute.

The Uploader a écrit :

Bon, n'empêche que j'ai envie de tester Touhy, moi ! yikes

Normalement, ta clef est toujours enregistrée, donc t'peux cloner le dépôt git sur mon serveur par ssh.

The Uploader a écrit :

*après le mémoire*

Courage wink

Dernière modification par ArkSeth (Le 20/09/2012, à 12:41)

Hors ligne

#2011 Le 20/09/2012, à 12:42

Dr Le Rouge

Re : /* Topic des codeurs [7] */

The Uploader a écrit :

*après le mémoire*

C'est quoi le sujet ?


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#2012 Le 20/09/2012, à 12:46

The Uploader

Re : /* Topic des codeurs [7] */

Théorie et pratique des méthodes Agile
(ou comment le cycle en V / waterfall sucks horses)

Dernière modification par The Uploader (Le 20/09/2012, à 12:47)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#2013 Le 20/09/2012, à 20:29

Rolinh

Re : /* Topic des codeurs [7] */

A-t-on découragé Shanx ?

Hors ligne

#2014 Le 20/09/2012, à 21:44

Shanx

Re : /* Topic des codeurs [7] */

Non non, je suis juste plutôt occupé en ce moment (cf. le tdct big_smile).

Je compte me pencher sur les modif’ à apporter à printf et scanf, mais pas tout de suite (genre ce week-end si j’ai du temps).
Aujourd’hui on a commencé à voir les makefile et les trucs où y’a plein de fichiers partout (des machins.h qui se mélangent à des bidules.c), c’est un peu moins évident…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2015 Le 20/09/2012, à 22:08

grim7reaper

Re : /* Topic des codeurs [7] */

Titus007 a écrit :

Une petite question si je peux : quelle signification a le N qui apparaît dans plusieurs "constante" ?

Quelles « constantes » ?



Steap a écrit :

Je suis revenu de chez Google : ça déchire !

Ils te prennent ?
C’est pour bosser sur quoi ?
Ils t’ont fait quoi comme tests ?



ArkSeth a écrit :

Maieùh, tu postes juste pendant que j'édite pour dire que j'ai compris tongue

tongue

ArkSeth a écrit :

(Quant à la méthode get_thumbnail(), ça aurait paru effectivement clair si elle s'était contentée de renvoyer null (None, en python, quoi) comme prévu… mais le fait qu'elle fasse segfaulter, bof…)

Oui clairement, le binding est foireux sur ce coup-là.



tshirtman a écrit :
Steap a écrit :

Je suis revenu de chez Google : ça déchire !

j'ai eu un entretiens bien plus bas niveau que ça… ils aiment le C système…

Du genre ?
Pas que j’ai spécialement envie de bosser pour eux, mais je suis curieux.



Shanx a écrit :

Aujourd’hui on a commencé à voir les makefile et les trucs où y’a plein de fichiers partout (des machins.h qui se mélangent à des bidules.c), c’est un peu moins évident…

Les headers (.h) c’est pas compliqué.
Les Makefile, tant que tu restes sur des trucs simple ça reste gérable et ça permet de comprendre comment ça marche.
Quand tu bosseras sur des trucs un peu gros tu pourras passer à des trucs comme CMake.

Hors ligne

#2016 Le 20/09/2012, à 22:12

Shanx

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :
Shanx a écrit :

Aujourd’hui on a commencé à voir les makefile et les trucs où y’a plein de fichiers partout (des machins.h qui se mélangent à des bidules.c), c’est un peu moins évident…

Les headers (.h) c’est pas compliqué.
Les Makefile, tant que tu restes sur des trucs simple ça reste gérable et ça permet de comprendre comment ça marche.
Quand tu bosseras sur des trucs un peu gros tu pourras passer à des trucs comme CMake.

Là c’était bizarre : on devait faire pleins de fichiers pour des fonctions (genre une qui calculait le quotient de deux nombres, une autre la racine carrée…), des fichiers.h associés à chaque fonctions.c, un main.c qui utilisait les fonctions.c, et un makefile qui liait tout ça…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2017 Le 20/09/2012, à 22:17

Mindiell

Re : /* Topic des codeurs [7] */

Oui, les .h (les headers, entêtes en français) servent souvent à stocker les définitions de fonctions et d'autres trucs qui peuvent être utiles.
Ainsi, au moment de la compilation, le fichier .c (qui contient les sources et donc les appels aux fonctions) sait que la fonction est définie. Il ne sait pas ce qu'il y a dedans, et il s'en fiche, il en sait suffisamment : ce qu'elle a comme paramètres et ce qu'elle recrache.
C'est lors du link que les fichiers sont définitivement liés (le main.c et les fonctions.c,  les .h ne servent plus là) et que le main ira mettre la bonne adresse vers la bonne fonction à appeler.

Hors ligne

#2018 Le 20/09/2012, à 22:19

Shanx

Re : /* Topic des codeurs [7] */

J’ai compris. J’ai mis un peu plus de temps que d’hab, mais ça va. Du coup je pense aussi essayer de m’entrainer la dessus quand je pourrais.

Par contre, je trouve bizarre qu’il nous fasse faire ça alors qu’on n’a vu ni les pointeurs, ni les tableaux, que je croyais hyper importants en C…


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2019 Le 20/09/2012, à 22:21

Mindiell

Re : /* Topic des codeurs [7] */

Bah si tu sais pas compiler, ca te sers à rien de savoir programmer en C en même temps tongue

Hors ligne

#2020 Le 20/09/2012, à 22:23

Shanx

Re : /* Topic des codeurs [7] */

Bah un gcc truc.c -o truc ça me suffisait. big_smile


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2021 Le 20/09/2012, à 22:56

Rolinh

Re : /* Topic des codeurs [7] */

Shanx a écrit :

Bah un gcc truc.c -o truc ça me suffisait. big_smile

Ca ne te suffira pas longtemps ^^
Dès que tu as plusieurs fichiers ça devient énervant. Sans compter les flags que tu veux passer au compilo, etc. (et évidemment, je ne mentionne que des choses basiques là).

Hors ligne

#2022 Le 20/09/2012, à 23:12

Pylades

Re : /* Topic des codeurs [7] */

(Je crois que je préférerais encore les autohells à CMake… tongue)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2023 Le 20/09/2012, à 23:34

Elzen

Re : /* Topic des codeurs [7] */

Bon, le truc idiot à propos de mes histoires de faux menus : si je passe par gtk.gdk.pointer_grab() pour récupérer les clics effectués à l'extérieur de la fenêtre pour fermer la fenêtre dans ce cas-là, la souris est tellement capturée que les widgets contenus dans la fenêtre ne réagissent plus non plus hmm J'ai fais quoi de travers, encore ?

Hors ligne

#2024 Le 20/09/2012, à 23:45

tshirtman

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Du genre ?
Pas que j’ai spécialement envie de bosser pour eux, mais je suis curieux.

mail de google a écrit :

As a friendly reminder, please bear in mind that all interview questions and information disclosed at interview stage with Google, whether it is a phone interview or face-to-face interview, is confidential and must not be disclosed on any sites/blogs. Any information relating to interview questions disclosed online will result in the disqualification from the interview process and any future positions with Google.

sad

je vais pas pouvoir être très précis sur le web…

Hors ligne

#2025 Le 20/09/2012, à 23:47

The Uploader

Re : /* Topic des codeurs [7] */

logique, mais pas très friendly.


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne