procedure TForm6.Button1Click(Sender: TObject);
var
pdfContext : CGConTextRef;
Path : CFStringRef;
URL : CFURLRef;
myDictionary : CFMutableDictionaryRef;
PageRect : CGRect;
Filename,
Title,
Creator :
String;
DPI : Integer;
begin
DPI := 72;
PageRect.origin.x := 0;
PageRect.origin.y := 0;
PageRect.size.width := 8*DPI;
PageRect.size.height := 11*DPI;
Filename := GetHomePath + PathDelim + '
Documents' + PathDelim+'
MyPDF.PDF';
path := CFStringCreateWithCString (
NIL, MarshaledAString(utf8Encode(Filename)),kCFStringEncodingUTF8);
url := CFURLCreateWithFileSystemPath (
Nil, path, kCFURLPOSIXPathStyle, false);
CFRelease(path);
// This dictionary contains extra options mostly for 'signing' the PDF
myDictionary := CFDictionaryCreateMutable(
NIL, 0,
NIL,
NIL);
// @kCFTypeDictionaryKeyCallBacks,
// @kCFTypeDictionaryValueCallBacks);
Title := '
kCGPDFContextTitle';
Creator := '
kCGPDFContextCreator';
CFDictionarySetValue(myDictionary, @Title, CFSTR('
My PDF File'));
CFDictionarySetValue(myDictionary, @Creator, CFSTR('
Mavarik'));
// Create our PDF Context with the CFURL, the CGRect we provide, and the above defined dictionary
pdfContext := CGPDFContextCreateWithURL(
url, @pageRect, CFDictionaryRef(myDictionary));
CFRelease(
url);
// Done creating our PDF Context, now it's time to draw to it
// Starts our first page
CGContextBeginPage (pdfContext, @pageRect);
// Draws a black rectangle around the page inset by 50 on all sides
CGContextStrokeRect(pdfContext, CGRectMake(50, 50, pageRect.size.width - 100, pageRect.size.height - 100));
CGContextSelectFont (pdfContext, '
Helvetica', 16, kCGEncodingMacRoman);
CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
CGContextSetRGBFillColor (pdfContext, 0, 0, 0, 1);
CGContextShowTextAtPoint (pdfContext, 100, 100, '
Hallo World PDF1', strlen('
Hallo World PD1'));
CGContextShowTextAtPoint (pdfContext, 100, 200, '
Hallo World PDF2', strlen('
Hallo World PD2'));
CGContextShowTextAtPoint (pdfContext, 200, 300, '
Hallo World PDF3', strlen('
Hallo World PD3'));
CGContextEndPage (pdfContext);
// We are done with our context now, so we release it
CGContextRelease (pdfContext);
CFRelease(MyDictionary);
{
// This code block will create an image that we then draw to the page
const char *picture = "Picture";
CGImageRef image;
CGDataProviderRef provider;
CFStringRef picturePath;
CFURLRef pictureURL;
picturePath = CFStringCreateWithCString (NULL, picture,
kCFStringEncodingUTF8);
pictureURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), picturePath, CFSTR("png"), NULL);
CFRelease(picturePath);
provider = CGDataProviderCreateWithURL (pictureURL);
CFRelease (pictureURL);
image = CGImageCreateWithPNGDataProvider (provider, NULL, true, kCGRenderingIntentDefault);
CGDataProviderRelease (provider);
CGContextDrawImage (pdfContext, CGRectMake(200, 200, 207, 385),image);
CGImageRelease (image);
// End image code
// Adding some text on top of the image we just added
CGContextSelectFont (pdfContext, "Helvetica", 16, kCGEncodingMacRoman);
CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
CGContextSetRGBFillColor (pdfContext, 0, 0, 0, 1);
const char *text = "Hello World!";
CGContextShowTextAtPoint (pdfContext, 260, 390, text, strlen(text));
// End text
}
// We are done drawing to this page, let's end it
// We could add as many pages as we wanted using CGContextBeginPage/CGContextEndPage
Webbrowser1.Navigate('
file://'+GetHomePath + PathDelim + '
Documents' + PathDelim+'
MyPDF.PDF');
end;