Das etwas erweiterte Beispiel zeigt, wie man eine Grafik mit einem einfachen Dreieck über Cairo mit OCaml als PDF-, PNG- und als PostScript-Datei abspeichert.
(* OCaml with Cairo bindings. Based on the sample on the Cairo website:
* http://www.cairographics.org/cairo-ocaml/
*
* Compile with:
*
* ocamlopt -I +cairo cairo.cmxa -o cairosample cairosample.ml
*)
let draw_triangle cr =
Cairo.set_line_width cr 15. ;
Cairo.move_to cr 200. 100. ;
Cairo.line_to cr 300. 300. ;
Cairo.rel_line_to cr (-200.) 0. ;
Cairo.close_path cr ;
Cairo.stroke cr
let create_png filename =
let img = Cairo.image_surface_create Cairo.FORMAT_ARGB32 400 400 in
let cr = Cairo.create img in
draw_triangle cr;
Cairo_png.surface_write_to_file img filename
let create_ps filename =
let out = open_out filename in
let ps = Cairo_ps.surface_create_for_channel out 400. 400. in
let cr = Cairo.create ps in
draw_triangle cr;
Cairo.surface_finish ps;
close_out out
let create_pdf filename =
let out = open_out filename in
let ps = Cairo_pdf.surface_create_for_channel out 400. 400. in
let cr = Cairo.create ps in
draw_triangle cr;
Cairo.surface_finish ps;
close_out out
let main =
create_png "triangle.png";
create_ps "triangle.ps";
create_pdf "triangle.pdf"
Subtil ist der Aufruf an Cairo.surface_finish. Ohne ihn wird der Puffer nicht in die Datei geschrieben und das PDF/PS-Dokument bleibt leer oder gar korrupt.