Of course it is possible; there is necessarily always a projection from object>screen coords and there is always a projection from screen>a subset of object coords on a plane parallel with the view plane (notice the difference). If you want a 1:1 mapping between screen and object coords, use an orthographic projection (which you are), and make sure that the args to glOrtho are the ACTUAL width and height of your viewport, and remember that opengl puts 0,0 (in screencoords) in the bottom left rather than the top left, and 0,0 (in object coords) in the center of the screen.. so, something like:
glMatrixMode ( GL_PROJECTION );
glLoadIdentity( );
gluOrtho2D ( 0, w, 0, h );
glScalef ( 1, -1, 1 );
glTranslatef ( 0, -h, 0 );
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity( );
/* draw stuff here */
Now, x,y in the screen will be x,y,0 in object coords.
If you use a projective view transform, you can use gluProject/gluUnproject to move between object space and screen space coords. You probably don't (although maybe you do) need to convert between screen&object coordinate systems though, the only time you'd usually need to do that is if you want to be able to 'pick' (with a mouse or similar) some point on the card.
If you want correct relative positions, just work on the assumption that object units are e.g. millimeters, therelative position/sizes of things will always be correct, and you can then pre-scale the modelview matrix to get either an acceptable (in perspective) or exact (in orthographic) size on screen.. you need to know the screen's DPI to get the same size on screen as in the real world.
But anyway, if you set up an orthographic projection correctly, there is always a linear relationship between screen x,y and x,y on a view-parallel plane in object space.