1### 2## * << Haru Free PDF Library 2.0.0 >> -- link_annotation.c 3## * 4## * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp> 5## * 6## * Permission to use, copy, modify, distribute and sell this software 7## * and its documentation for any purpose is hereby granted without fee, 8## * provided that the above copyright notice appear in all copies and 9## * that both that copyright notice and this permission notice appear 10## * in supporting documentation. 11## * It is provided "as is" without express or implied warranty. 12## * 13## 14 15## port to python by Li Jun 16## http://groups.google.com/group/pythoncia 17 18import os, sys 19 20from ctypes import * 21up=2 22def setlibpath(up): 23 import sys 24 path=os.path.normpath(os.path.split(os.path.realpath(__file__))[0]+'\..'*up) 25 if path not in sys.path: 26 sys.path.append(path) 27 28setlibpath(up) 29 30from haru import * 31from haru.c_func import * 32from haru.hpdf_errorcode import * 33 34@HPDF_Error_Handler(None, HPDF_UINT, HPDF_UINT, c_void_p) 35def error_handler (error_no, detail_no, user_data): 36 global pdf 37 printf ("ERROR: %s, detail_no=%u\n", error_detail[error_no], 38 detail_no) 39 HPDF_Free (pdf) 40 sys.exit(1) 41 42 43 44def print_page (page, font, page_num): 45 46 HPDF_Page_SetWidth (page, 200) 47 HPDF_Page_SetHeight (page, 200) 48 49 HPDF_Page_SetFontAndSize (page, font, 20) 50 51 HPDF_Page_BeginText (page) 52 HPDF_Page_MoveTextPos (page, 50, 150) 53 54 buf= "Page:%d" % page_num 55 56 HPDF_Page_ShowText (page, buf) 57 HPDF_Page_EndText (page) 58 59def main(): 60 61 global pdf 62 63 fname=os.path.realpath(sys.argv[0]) 64 fname=fname[:fname.rfind('.')]+'.pdf' 65 66 page=[None for i in range(9)] 67 rect=HPDF_Rect() 68 69 uri = "http://libharu.org" 70 71 72 73 pdf = HPDF_New (error_handler, NULL) 74 if (not pdf): 75 printf ("error: cannot create PdfDoc object\n") 76 return 1 77 78 # create default-font 79 font = HPDF_GetFont (pdf, "Helvetica", NULL) 80 81 # create index page 82 index_page = HPDF_AddPage (pdf) 83 HPDF_Page_SetWidth (index_page, 300) 84 HPDF_Page_SetHeight (index_page, 220) 85 86 # Add 7 pages to the document. 87 for i in range(7): 88 page[i] = HPDF_AddPage (pdf) 89 print_page(page[i], font, i + 1) 90 91 HPDF_Page_BeginText (index_page) 92 HPDF_Page_SetFontAndSize (index_page, font, 10) 93 HPDF_Page_MoveTextPos (index_page, 15, 200) 94 HPDF_Page_ShowText (index_page, "Link Annotation Demo") 95 HPDF_Page_EndText (index_page) 96 97 ## 98 # * Create Link-Annotation object on index page. 99 # 100 HPDF_Page_BeginText(index_page) 101 HPDF_Page_SetFontAndSize (index_page, font, 8) 102 HPDF_Page_MoveTextPos (index_page, 20, 180) 103 HPDF_Page_SetTextLeading (index_page, 23) 104 105 # page1 (HPDF_ANNOT_NO_HIGHTLIGHT) 106 tp = HPDF_Page_GetCurrentTextPos (index_page) 107 108 HPDF_Page_ShowText (index_page, "Jump to Page1 (HilightMode=HPDF_ANNOT_NO_HIGHTLIGHT)") 109 rect.left = tp.x - 4 110 rect.bottom = tp.y - 4 111 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 112 rect.top = tp.y + 10 113 114 HPDF_Page_MoveToNextLine (index_page) 115 116 dst = HPDF_Page_CreateDestination (page[0]) 117 118 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 119 120 HPDF_LinkAnnot_SetHighlightMode (annot, HPDF_ANNOT_NO_HIGHTLIGHT) 121 122 123 # page2 (HPDF_ANNOT_INVERT_BOX) 124 tp = HPDF_Page_GetCurrentTextPos (index_page) 125 126 HPDF_Page_ShowText (index_page, "Jump to Page2 (HilightMode=HPDF_ANNOT_INVERT_BOX)") 127 rect.left = tp.x - 4 128 rect.bottom = tp.y - 4 129 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 130 rect.top = tp.y + 10 131 132 HPDF_Page_MoveToNextLine (index_page) 133 134 dst = HPDF_Page_CreateDestination (page[1]) 135 136 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 137 138 HPDF_LinkAnnot_SetHighlightMode (annot, HPDF_ANNOT_INVERT_BOX) 139 140 141 # page3 (HPDF_ANNOT_INVERT_BORDER) 142 tp = HPDF_Page_GetCurrentTextPos (index_page) 143 144 HPDF_Page_ShowText (index_page, "Jump to Page3 (HilightMode=HPDF_ANNOT_INVERT_BORDER)") 145 rect.left = tp.x - 4 146 rect.bottom = tp.y - 4 147 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 148 rect.top = tp.y + 10 149 150 HPDF_Page_MoveToNextLine (index_page) 151 152 dst = HPDF_Page_CreateDestination (page[2]) 153 154 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 155 156 HPDF_LinkAnnot_SetHighlightMode (annot, HPDF_ANNOT_INVERT_BORDER) 157 158 159 # page4 (HPDF_ANNOT_DOWN_APPEARANCE) 160 tp = HPDF_Page_GetCurrentTextPos (index_page) 161 162 HPDF_Page_ShowText (index_page, "Jump to Page4 (HilightMode=HPDF_ANNOT_DOWN_APPEARANCE)") 163 rect.left = tp.x - 4 164 rect.bottom = tp.y - 4 165 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 166 rect.top = tp.y + 10 167 168 HPDF_Page_MoveToNextLine (index_page) 169 170 dst = HPDF_Page_CreateDestination (page[3]) 171 172 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 173 174 HPDF_LinkAnnot_SetHighlightMode (annot, HPDF_ANNOT_DOWN_APPEARANCE) 175 176 177 # page5 (dash border) 178 tp = HPDF_Page_GetCurrentTextPos (index_page) 179 180 HPDF_Page_ShowText (index_page, "Jump to Page5 (dash border)") 181 rect.left = tp.x - 4 182 rect.bottom = tp.y - 4 183 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 184 rect.top = tp.y + 10 185 186 HPDF_Page_MoveToNextLine (index_page) 187 188 dst = HPDF_Page_CreateDestination (page[4]) 189 190 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 191 192 HPDF_LinkAnnot_SetBorderStyle (annot, 1, 3, 2) 193 194 195 # page6 (no border) 196 tp = HPDF_Page_GetCurrentTextPos (index_page) 197 198 HPDF_Page_ShowText (index_page, "Jump to Page6 (no border)") 199 rect.left = tp.x - 4 200 rect.bottom = tp.y - 4 201 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 202 rect.top = tp.y + 10 203 204 HPDF_Page_MoveToNextLine (index_page) 205 206 dst = HPDF_Page_CreateDestination (page[5]) 207 208 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 209 210 HPDF_LinkAnnot_SetBorderStyle (annot, 0, 0, 0) 211 212 213 # page7 (bold border) 214 tp = HPDF_Page_GetCurrentTextPos (index_page) 215 216 HPDF_Page_ShowText (index_page, "Jump to Page7 (bold border)") 217 rect.left = tp.x - 4 218 rect.bottom = tp.y - 4 219 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 220 rect.top = tp.y + 10 221 222 HPDF_Page_MoveToNextLine (index_page) 223 224 dst = HPDF_Page_CreateDestination (page[6]) 225 226 annot = HPDF_Page_CreateLinkAnnot (index_page, rect, dst) 227 228 HPDF_LinkAnnot_SetBorderStyle (annot, 2, 0, 0) 229 230 231 # URI link 232 tp = HPDF_Page_GetCurrentTextPos (index_page) 233 234 HPDF_Page_ShowText (index_page, "URI (") 235 HPDF_Page_ShowText (index_page, uri) 236 HPDF_Page_ShowText (index_page, ")") 237 238 rect.left = tp.x - 4 239 rect.bottom = tp.y - 4 240 rect.right = HPDF_Page_GetCurrentTextPos (index_page).x + 4 241 rect.top = tp.y + 10 242 243 HPDF_Page_CreateURILinkAnnot (index_page, rect, uri) 244 245 HPDF_Page_EndText (index_page) 246 247 # save the document to a file 248 HPDF_SaveToFile (pdf, fname) 249 250 # clean up 251 HPDF_Free (pdf) 252 253 return 0 254 255main() 256