r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[PDF-Maker] discuss Gabriele's pdf-maker

Gabriele
29-Sep-2006
[443]
hmm, rereading the spec, it may work just putting the jpg file there. 
i will try that, eventually. :)
Gabriele
4-Oct-2006
[444]
update: changes to tables, now can calculate the column widths automatically. 
(it does so *much* better than web browsers.)
Anton
5-Oct-2006
[445]
I see your embedded image. Very nice. Can you explain briefly how 
the column width calculation is better ?
Gabriele
5-Oct-2006
[446x5]
classic example: you are doing a definition list with a table, so 
you have a column with words and a column with the description.
this means that the description is usually long, while the first 
column only has a word or two.
what you get in web browsers is that if you have two words in the 
first column, they are very likely to be broken into two lines
i.e. the first column is forced to be very small by the second column 
having long text
in the pdf maker, two words in the first column would not be broken, 
since shrinking a column with text that is already more that one 
line is better than shrinking a column with text which can fit in 
one line.
Anton
5-Oct-2006
[451x2]
Ah.. I have experienced this problem. That is a good improvement.
I'm looking for a definition-list example in the test document ...
Gabriele
5-Oct-2006
[453]
it's not there, but the pdf-emitter for qml creates them :)
Anton
5-Oct-2006
[454x2]
.. but doesn't appear to be one. Maybe you could add it ?
Ok.
Gabriele
5-Oct-2006
[456]
let me add one for you...
Anton
5-Oct-2006
[457]
You want to show off your technology don't you ? :)
Gabriele
5-Oct-2006
[458x2]
:) it's uploading...
...done. last page of test.pdf.
Anton
6-Oct-2006
[460]
Looks great. Good work.
http://www.colellachiara.com/soft/PDFM2/test.pdf
Oldes
6-Oct-2006
[461x2]
The link above just crashed my Firefox
But it's working now, strange
james_nak
6-Oct-2006
[463]
Maybe the acrobat driver wasn't running. In any case, nice work Gabriele.
Oldes
8-Oct-2006
[464]
It must be related to acrobat as I have same problems with other 
PDF documents sometimes if I open them in Firefox - I must say that 
I don't like PDFs at all
Henrik
8-Oct-2006
[465]
oldes, depends on the viewer. I use PDF's under OSX all the time. 
:-)
Oldes
8-Oct-2006
[466]
Of course, PDF is the main format for everything on Mac:-)
Henrik
8-Oct-2006
[467]
so you shouldn't hate PDF, but the viewer :-)
Oldes
8-Oct-2006
[468x2]
I know people who are able to send me PDF where is only one image 
(they are Mac users of course)
But maybe you are right.
Henrik
8-Oct-2006
[470]
some day someone will write a PDF viewer for REBOL that will rival 
Preview.app for mac, so things will be good. :-)
Anton
23-Nov-2006
[471x4]
Gabriele, I have patched pdf-maker.r  1.27.1  of  3-Aug-2006  to 
make the dialect a little easier with images.
Starting at line 1051, the changed lines are commented:
| 'image (
                push new
                gfx: none

                insert tail new/contents new: make default-space []

            ) opt [opt 'at [copy val1 2 number! | set val1 pair!] (if pair? val1 
            [val1: reduce [val1/x val1/y]] new/translate: val1)] ; <-- now translation 
            is optional, and can be a pair too

            opt [opt 'size [copy val1 2 number! | set val1 pair!] (if pair? val1 
            [val1: reduce [val1/x val1/y]] new/scale: val1)] ; <-- now scale 
            is optional, and can be a pair too
            any [
                'rotated set val1 number! (new/rotate: val1)

              | 'skew [copy val1 2 number! | set val1 pair!] (if pair? val1 [val1: 
              reduce [val1/x val1/y]] new/skew: val1) ; <-- now accepts a pair
            ]  set val1 [image! | file! | word!] (
                if word? val1 [val1: get val1]
                if file? val1 [val1: load val1]

                ;if none? new/translate [new/translate: [0 0]] ; <- default position 
                (could set this to "current layout position")

                if none? new/scale [new/scale: reduce [val1/size/x val1/size/y]] 
                ; <- default size

                insert insert tail used-images val2: join "Img" length? used-images 
                val1
                gfx-emit [to-refinement val2 'Do]
                new: pop gfx: none
            )
(5 changed lines.)
Aha... images are not compressed. Two images of 1.34 MB made a 67MB 
pdf ... Onward pdf-maker-2 ... :)
Gabriele
23-Nov-2006
[475]
so 0 0 1 1 are reasonable defaults? hmm.
Anton
23-Nov-2006
[476]
Sorry, defaults for what ?
The above changes allow eg:
	layout-pdf [ [ image logo.gif ] ]
	layout-pdf [ [ image 20x150 200x96 logo.gif ] ]
Gabriele
23-Nov-2006
[477x2]
image logo.gif would be at position 0 0 and 1 mm high, 1 mm wide 
(unless there's another transformation involved)
the reason i don't accept pairs is consistency; since values are 
decimal, and pair is integer only, i don't allow them to avoid confusion 
and complicating the rules even more (in v2 this would be even more 
complicated because of evaluation)
Anton
23-Nov-2006
[479x2]
I agree the above code is more complicated. You could, however, easily 
add a small helper rule to accept 2 numbers or a pair.
With the above patch, this:
	layout-pdf [ [ image logo.gif ] ]

shows the image with the size of  100x24 mm.

When rendered by Adobe Reader at 100%, that appears about 3.5 times 
larger in each direction than
	view layout [ image logo.gif ]


Actually, it would be better to multiply by the pixels/mm  ratio. 
Let me have a look...
Gabriele
24-Nov-2006
[481x2]
still, 0 0 does not seem a reasonable default for the position to 
me, unless you want the image to cover the whole page. anyway, "You 
could, however, easily add a small helper rule to accept 2 numbers 
or a pair": it's not so in v2 (because of evaluation), and I don't 
intend to do anything except necessary bug fixes for v1 :)
there's also to say, that the layout-pdf dialect is still meant to 
be rather low level. a human would write in QML or makedoc or some 
high level dialect, not layout-pdf; thus the defaults for image would 
be useless (even if a human was to write it, they'd only cover some 
10-20% of the cases, since not all images have the same dpi, and 
99% of the time you don't want the image at the bottom left corner 
of the page).
Anton
24-Nov-2006
[483]
I see, and I understand and accept your position regarding the "low-level-ness" 
of the dialect.

Sorry for the confusion, but I left the line setting the default 
position commented so you could uncomment it *if* you already had 
a "current layout position" variable handy. I thought any position 
would be better than no position.
Gabriele
24-Nov-2006
[484]
note, of course you are free to do these changes and distribute them. 
v1 is public domain actually :) (not even bsd)
Anton
24-Nov-2006
[485x3]
Ah, but I don't want to do it if you don't think it's a good idea.
I was thnking of having pdf-maker as an output format for bubble-doc.
Hmm...
Gabriele
25-Nov-2006
[488]
well, i always output pdf from programs, and the default size does 
not help much there, but i'm not saying it does harm either. if everyone 
else wants that, then go for it.
Anton
25-Nov-2006
[489x2]
You have, of course, the benefit of knowing how the dialect works 
inside out. People new to the dialect would like to find out how 
it works by experimenting. Then it would be good to be more friendly, 
not causing error on missing parameters, similar to LAYOUT.
On balance, (and since I discovered the resuling PDF was a bit large), 
I think it's not worth me forking and complicating the dialect.
Gabriele
25-Nov-2006
[491]
there's also the issue, that if we allow specifying a binary! instead 
of image! and interpert it as a jpeg file, then the dialect will 
have no default to use for the size, unless we go on and parse the 
jpeg header, or load the jpeg into a image! temporarily just to get 
its size. (binary! would have the added benefit to work also in Core, 
however that would only be for jpeg images)
Anton
25-Nov-2006
[492]
Those are details. Any default is still better than an error (if 
trying to make the dialect forgiving and friendly). At least the 
user will see something appear, even if it has the wrong size and 
in the wrong position.