98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2007 Elie CHAFTARI
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								!
							 | 
						||
| 
								 | 
							
								! Tested with libharu2 2.0.8 on Mac OS X 10.4.9 PowerPC
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								USING: assocs continuations hashtables kernel math namespaces pdf.libhpdf ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IN: pdf
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SYMBOL: pdf
							 | 
						||
| 
								 | 
							
								SYMBOL: page
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								! Error handling routines
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: check-status ( status -- )
							 | 
						||
| 
								 | 
							
								    dup zero? [ 
							 | 
						||
| 
								 | 
							
								        drop
							 | 
						||
| 
								 | 
							
								    ] [
							 | 
						||
| 
								 | 
							
								        error-code >hashtable at throw   
							 | 
						||
| 
								 | 
							
								    ] if ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								! Document handling routines
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: new-pdf ( error-handler user-data -- )
							 | 
						||
| 
								 | 
							
								    HPDF_New pdf set ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: free-pdf ( -- )
							 | 
						||
| 
								 | 
							
								    pdf get HPDF_Free drop ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: with-pdf ( quot -- )
							 | 
						||
| 
								 | 
							
								    [ f f new-pdf [ free-pdf ] [ ] cleanup ] with-scope ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: set-compression-mode ( mode -- )
							 | 
						||
| 
								 | 
							
								    pdf get swap HPDF_SetCompressionMode check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: set-page-mode ( mode -- )
							 | 
						||
| 
								 | 
							
								    pdf get swap HPDF_SetPageMode check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: add-page ( -- )
							 | 
						||
| 
								 | 
							
								    pdf get HPDF_AddPage page set ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: save-to-file ( filename -- )
							 | 
						||
| 
								 | 
							
								    pdf get swap HPDF_SaveToFile check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: get-font ( fontname encoding -- font )
							 | 
						||
| 
								 | 
							
								    pdf get -rot HPDF_GetFont ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								! Page Handling routines
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: get-page-height ( -- height )
							 | 
						||
| 
								 | 
							
								    page get HPDF_Page_GetHeight ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: get-page-width ( -- width )
							 | 
						||
| 
								 | 
							
								    page get HPDF_Page_GetWidth ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-text-width ( text -- width )
							 | 
						||
| 
								 | 
							
								    page get swap HPDF_Page_TextWidth ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								! Graphics routines
							 | 
						||
| 
								 | 
							
								! =========================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: set-page-line-width ( linewidth -- )
							 | 
						||
| 
								 | 
							
								    page get swap HPDF_Page_SetLineWidth check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-rectangle ( x y width height -- )
							 | 
						||
| 
								 | 
							
								    >r >r >r >r page get r> r> r> r> HPDF_Page_Rectangle check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-stroke ( -- )
							 | 
						||
| 
								 | 
							
								    page get HPDF_Page_Stroke check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: set-page-font-and-size ( font size -- )
							 | 
						||
| 
								 | 
							
								    page get -rot HPDF_Page_SetFontAndSize check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-begin-text ( -- )
							 | 
						||
| 
								 | 
							
								    page get HPDF_Page_BeginText check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-text-out ( xpos ypos text -- )
							 | 
						||
| 
								 | 
							
								    page get -roll HPDF_Page_TextOut check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-end-text ( -- )
							 | 
						||
| 
								 | 
							
								    page get HPDF_Page_EndText check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: with-text ( -- )
							 | 
						||
| 
								 | 
							
								    [ page-begin-text [ page-end-text ] [ ] cleanup ] with-scope ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-move-text-pos ( x y -- )
							 | 
						||
| 
								 | 
							
								    page get -rot HPDF_Page_MoveTextPos check-status ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: page-show-text ( text -- )
							 | 
						||
| 
								 | 
							
								    page get swap HPDF_Page_ShowText check-status ;
							 |