You are not logged in.
Pages: 1
Have been playing with
pdfDoc.Canvas.DrawXObject(0, 0 , 250 , 300, objectname);
which appears to place objects in the "natural" position rather than their standard Delphi/Windows position. That is the code above would place the bottom left of the object at the ** bottom ** left corner, rather than placing the top left of the object at the top left corner of the canvas as with other Delphi items including for example:
pdfDoc.VCLCanvas.TextOut( 0,0, 'The quick brown fox jumped over the lazey dog');
which places the top left of the text at the top left of the canvas.
In order to place the object at the top left corner use:
pdfDoc.Canvas.DrawXObject(0, pdfpage.PageHeight - Objectheight , 250 , 300, objectname);
Last edited by Gemsys (2011-06-12 14:30:58)
Offline
As stated by the documentation, the Canvas property is a PDF Canvas, whereas VCLCanvas property is a VCL Canvas.
The Canvas property uses the standard Adobe PDF coordinate space. The origin of this space is at the bottom left of the document. Distances are measured up and to the right in points. Points are a traditional measure for print work - there are 72 points in an inch. Since the PDF Canvas use double as coordinates, you have virtually an infinite DPI.
So you are correct: the PDF Canvas has not the same orientation as with the VCL/Windows way.
The bottom-up PDF coordinate space is different from the top-down coordinate system often used in Windows.
It means that everything is based around the bottom left of objects - not the top left.
Offline
OK, my main problem is not knowing where the documentation is. Could somebody give me a reference please. At the moment I am simply working by using examples given in this forum!
Thanks in advance
Geoff
Offline
There is no documentation dedicated to the SynPdf unit yet.
In fact, the SynPdf documentation is all the comments in the source code, which are retrieved and made as document in the corresponding part of our ORM framework documentation (SAD document).
See http://synopse.info/forum/viewtopic.php?id=55
The Canvas and VCLCanvas comments in the code (in the interface part of the unit) should be detailed enough as reference.
For samples, you've got those in the forum.
IMHO the main gate to SynPdf is to use a TMetaFileCanvas and render it into a pdf.
So you'll use regular TCanvas methods to make the drawing (following the official documentation from the VCL), then you render it into a pdf file via the TPdfCanvas.RenderMetaFile method.
You could use also VCLCanvas if you don't have a TMetaFile content at hand (it will use in fact an hidden TMetaFile and expose its canvas).
But to use directly the Canvas property is not so easy: in this case, you'll have to read the official pdf reference document from Adobe, and check all the available TPdfCanvas methods comment.
You should know what you are doing.
But the resulting pdf won't be "better" than via a TMetaFile, IMHO.
Offline
Pages: 1