%!PS % Getting Started Exploring the Acrobat 5 SDK % =========================================== % by Don Lancaster % Copyright c 2002 by Don Lancaster & Synergetics, Box 809, Thatcher, AZ, 85552 % (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com % Consulting services available http://www.tinaja.com/info01.html % Linking welcome. Reposting expressly forbidden. % All commercial rights and all electronic media rights ~fully~ reserved. % Linking usually welcome. Reposting expressly forbidden. Version 1.5 % A tutorial review of PostScript's internaldict access with a check of the % pdfmark instructin set. % IMPORTANT NOTE: Don Lancaster's file gonzo.ps is required for this program. % After obvious location mods, uncomment ONE of the following two lines: (C:\\windows\\desktop\\gonzo\\gonzo.ps) run % use internal gonzo % (A:\\gonzo.ps) run % use external gonzo % NOTE THAT ALL PS FILENAME STRINGS !!!DEMAND!!! DOUBLE REVERSE SLASHES. % GONZO20A Guru Gonzo PostScript power tools (Interim release) % Includes gonzo justification and layout utilities. % Copyright c 1990, 1996, 2001 by Don Lancaster and Synergetics, Box 809, % Thatcher Arizona, 5552 (928) 428-4073 don@tinaja.com support % via http://www.tinaja.com All commercial rights and all electronic % media rights **FULLY** reserved. Reposting is expressly forbidden. %%%%%%%%%%% links menu directory %%%%%%%%%%%% % This code locks pdfmark commands out of a PostScript printer. /pdfmark where {pop}{userdict /pdfmark /cleartomark load put} ifelse % /surl "start url" marks the beginning of a text sequence to be urled. % It also paints the text blue... /surl {mark /blue cvx 0.33 /setgray cvx % change text to blue /currentpoint cvx % remember box start /urly /exch cvx /store cvx /urlx /exch cvx /store cvx ] cvx % complete deferred command printlist exch 3 index exch put % stuff into gonzo printlist exch 1 add exch % increment gonzo list count } def % /eurl "end url" unmarks the end of a text sequence and sets up % the pdfmark needed to define the Acrobat web link. /eurl {mark % start deferred proc exch % position url string % /black cvx 0 /setgray cvx % turn blue marker off % maintextcolor /setrgbcolor cvx % reset to main text color??? /aqua cvx /black cvx /makeurl cvx % defer call of url builder ] cvx % complete deferred proc printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch % increment gonzo list count } def % /makeurl generates the pdfmark, receiving a {(urlstring) makeurl}. % Note that it is not called until formatted printlist time... /urlover 0.2 def % fraction of hot area over bounds /makeurl { /cururlname exch store % save the url string mark % start pdfmark currentfont /ScaleMatrix get 3 get /fsize exch store % guess height /Rect [ urlx fsize urlover mul sub % set box left x urly fsize urlover mul sub % set box left y currentpoint exch fsize urlover mul add exch fsize add ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def % /makeurlx generates the box specific pdfmark, receiving % a {(urlstring) makeurl}. % Note that it is not called until formatted printlist time... /makeurlx { /cururlnamex exch store % save the url string mark % start pdfmark /Rect [ xpos % set box left x ypos 0.9 sub % set box left y xpos 2.8 add % box right x ypos 0.9 sub 2.8 add % box right y ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def /maintextcolor {0 0 0 } def % text link specific data -- use dictionary instead below { /cubic01 {(http://www.tinaja.com/cubic01.asp) eurl} def /hack62 {(http://www.tinaja.com/glib/hack62.pdf) eurl} def /increment {(http://www.tinaja.com/text/bezgen3.html) eurl} def /interpolate {(http://members.bellatlantic.net/~vze2vrva/design.html) eurl } def /bezmath {(http://www.tinaja.com/text/bezmath.html) eurl } def /table {(http://www.tinaja.com/psutils/imtable.psl) eurl } def } pop % dictionary method << %zzzzz %%%% unused links have been commented for gg9a simplicity /maildon (mailto:don@tinaja.com) /tinaja (http://www.tinaja.com) /adobe (http://www.adobe.com) /adobesdk (http://partners.adobe.com/asn/developer/acrosdk/main.html) /pstrans (http://www.tinaja.com/glib/pstrans.pdf) /borland (http://www.borland.com/products/downloads/download_cbuilder.html) /ebay (http://cgi6.ebay.com/ws/eBayISAPI.dll?ViewSellersOtherItems&userid=abeja&completed=0&sort=2&since=-1&include=0&page=1&rows=100) /aasdk (http://www.tinaja.com/plugins/AboutAcrobatSDK.api) /uncomp (http://www.tinaja.com/plugins/UncompressPDF.api) /addimage (http://www.tinaja.com/plugins/AddImage.api) /samplejpg (http://www.tinaja.com/plugins/sample.jpg) /transparency (http://www.tinaja.com/plugins/Transparency.api) /threerects (http://www.tinaja.com/plugins/threerects.pdf) /watermark (http://www.tinaja.com/plugins/Watermark.api) /verifyurls (http://www.tinaja.com/plugins/VerifyURLS.api) /flate (http://www.tinaja.com/glib/flatvue.pdf) /pstrans (http://www.tinaja.com/glib/pstrans.pdf) /advt01 (http://www.tinaja.com/advt01.asp) /ng1 (news:///comp.text.pdf) /ng2 (news:///comp.lang.postscript) /msc++ (http://msdn.microsoft.com/visualc/productinfo/default.asp) /degub (http://www.tinaja.com/glib/degub.pdf) /ghostscript (http://www.artifex.com/pressreleases/GS70.htm) /demox.psl (http://www.tinaja.com/glib/g9demox.psl) /demox.pdf (http://www.tinaja.com/glib/g9demox.pdf) /demo.pdf (http://www.tinaja.com/glib/g9demo.pdf) /flatvue (http://www.tinaja.com/glib/flatvue.psl) /pdfrefman (http://partners.adobe.com/asn/developer/acrosdk/docs.html) /psrefman (http://partners.adobe.com/asn/developer/technotes/postscript.html) /pdfmrm (http://partners.adobe.com/asn/developer/acrosdk/docs.html) /tipdf (http://partners.adobe.com/asn/developer/acrosdk/docs.html) /asdk (http://partners.adobe.com/asn/developer/acrosdk) /mtcr (http://support.adobe.com/devsup/devsup.nsf/docs/51864.htm) /flatvue1 (http://www.tinaja.com/psutils/flatvue1.psl) /acrob01 (http://www.tinaja.com/acrob01.asp) /post01 (http://www.tinaja.com/post01.asp) /info01 (http://www.tinaja.com/info01.asp) /gurgrm01 (http://www.tinaja.com/gurgrm01.asp) { /tilley (http://www.tilleyfoundation.com) /mnglobal (http://www.mnglobal.com/energy/pg2.htm) /keely (http://www.keelynet.com) /evolve (http://www.evolvedtechnology.com) /hack64 (http://www.tinaja.com/glib/hack64.pdf) /hackar3 (http://www.tinaja.com/glib/hackar3.pdf) /resbn58 (http://www.tinaja.com/glib/resbn58.pdf) /bppt (http://www.batterypoweronline.com) /muse112 (http://www.tinaja.com/glib/muse112.pdf) /muse113 (http://www.tinaja.com/glib/muse113.pdf) /energfun (http://www.tinaja.com/glib/energfun.pdf) /bashpseu (http://www.tinaja.com/glib/bashpseu.pdf) /adobe (http://www.adobe.com) /netscape (http://www.netscape.com) /gallypsl (http://www.tinaja.com/galley1.psl) /gallypdf (http://www.tinaja.com/galley1.pdf) /atn5150 (http://partners.adobe.com/asn/developer/acrosdk/docs/createpdfapi/pdfmarkReference.pdf) /nutour (http://www.tinaja.com/bargains/nutour02.pdf) /nutoursource (http://www.tinaja.com/bargains/nutour02.psl) /bwhistle (http://www.tinaja.com/glib/bwhistle.pdf) /gonzo1 (http://www.tinaja.com/post01.asp#gonzo) /barg01 (http://www.tinaja.com/barg01.asp) /weblib01 (http://www.tinaja.com/weblib01.asp) /gurgrm01 (http://www.tinaja.com/gurgrm01.asp) /z1 (http://www.tinaja.com/bargains/thumb/albradz2.jpg) /z2 (http://www.tinaja.com/bargains/sbtesteq.asp) /z3 (http://www.tinaja.com/images/bargs/albrad02.jpg) /z4 (http://www.tinaja.com/bargains/thumb/tutenaz2.jpg) /z5 (http://www.tinaja.com/bargains/sbphone.asp) /z6 (http://www.tinaja.com/images/bargs/tutena02.jpg) /sourceme (http://www.tinaja.com/glib/gallery.psl) /sourceme2 (http://www.tinaja.com/glib/autourl.psl) } pop >> {mark exch /eurl cvx ] cvx def} forall %%%%%%%%%%%%%%%% New colorizer patches %%%%%%%%%%%%%%%%%% /boxgrays 0.899 def /grayshade boxgrays def /mastergray boxgrays def /staytint {0.33 setgray} def /staytint1 {0.25 setgray} def /showadgrays true def /red {0 settint} def /Zmacro {staytint /ypos ypos 2 add def 72 300 div setlinewidth xpos ypos moveto txtwide 0 rlineto stroke /ypos ypos -2 add def tintoff} def % hair rule /amacro {(zy0) stringmacro /ypos ypos ypara add def 0.33 setgray } def % start drop cap /bmacro {(iFy1) stringmacro /ypos ypos ypara add def black} def % finish drop cap % Gonzo character colorizer /blueon {mark /blue cvx 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /blueoff {mark /beige cvx 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton {mark 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1 {mark 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1b {mark beige cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1a {mark /aqua cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1p {mark /burple cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1r {mark /red cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1b {mark /beige cvx % try for beige after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tintoff {mark 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def %%%%%%%%%%%%%% COMPACT VERSION OF COLORIZER II %%%%%%%%%%%%%%%%%%%%%% /settint {dup /currenttint exch store 5.999 mul dup floor cvi /&cbar exch store dup floor sub /&cwt exch store [ {/setgray [ /dup cvx 0.3 &cwt 0.59 mul add /ge cvx [1 /exch cvx &cwt 0.59 mul 0.30 add /sub cvx 1 &cwt sub 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx /exch cvx ] cvx [ &cwt 0.59 mul 0.3 add /div cvx /dup cvx &cwt /mul cvx 0] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 1 &cwt sub 0.3 mul add /ge cvx [1 &cwt sub 0.3 mul 0.59 add /sub cvx &cwt 0.3 mul 0.11 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx /exch cvx 1 /exch cvx] cvx [1 &cwt sub 0.3 mul 0.59 add /div cvx /dup cvx 1 &cwt sub /mul cvx /exch cvx 0] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 &cwt 0.11 mul add /ge cvx [&cwt 0.11 mul 0.59 add /sub cvx 1 &cwt sub 0.11 mul 0.30 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx 1 /exch cvx] cvx [0 /exch cvx &cwt 0.11 mul 0.59 add /div cvx /dup cvx &cwt /mul cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 1 &cwt sub mul 0.11 add /ge cvx [1 &cwt sub 0.59 mul 0.11 add /sub cvx &cwt 0.59 mul 0.30 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx 1] cvx [0 /exch cvx 1 &cwt sub 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul cvx /exch cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.11 &cwt 0.30 mul add /ge cvx[&cwt 0.30 mul 0.11 add /sub cvx 1 &cwt sub 0.30 mul 0.59 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx /exch cvx 1] cvx [ &cwt 0.30 mul 0.11 add /div cvx /dup cvx &cwt /mul cvx /exch cvx 0 /exch cvx ] cvx /ifelse cvx /setrgbcolor cvx ] cvx /def cvx} {/setgray [ /dup cvx 0.30 1 &cwt sub 0.11 mul add /ge cvx[ 1 /exch cvx 1 &cwt sub 0.11 mul 0.30 add /sub cvx &cwt 0.11 mul 0.59 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx ] cvx [ 1 &cwt sub 0.11 mul 0.30 add /div cvx /dup cvx 1 &cwt sub /mul cvx 0 /exch cvx] cvx /ifelse cvx /setrgbcolor cvx ] cvx /def cvx} ] &cbar get exec exec} bind def /beige {0.10 settint} def % examples of convenience operators /aqua {0.52 settint} def /blue {0.67 settint} def /lime {0.44 settint} def /burple {0.75 settint} def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /guru { gonzo begin ps.util.1 begin printerror nuisance begin} def % guru % activate gonzo utilities 50 50 10 setgrid % create grid % 56 61 showgrid /setpagefonts { /cstretch 0.015 def /sstretch 0.015 def /font0 /StoneSans-Bold 1.6 gonzofont /font1 /StoneSans 0.95 gonzofont /font4 /StoneSans 0.85 gonzofont /font3 /StoneSans-Bold 0.85 gonzofont /font6 /StoneSans-Bold 0.85 gonzofont /font7 /StoneSans-Bold 1.05 gonzofont % subheaders /font8 /StoneSans-Bold [0.65 0 0 0.65 0 0.4] gonzofont /txtwide 36 store /yinc 1.2 store /kern 0.1 store /pm 1.5 store /tabs [7 -2] store aqua 0.33 setgray font1 black font2 /amacro { mark /aqua cvx 0.33 /setgray cvx ] cvx printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch } def /bmacro { mark /black cvx ] cvx printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch } def /shiftin {xpos /xposhold exch store /xpos xpos 3 add store} def /shiftout {/xpos xposhold store} def /texttop 51 store /textleft 3 store /cmacro {aqua 0.25 setgray (znhL7) stringmacro /xpos xpos 1.7 sub store /ypos ypos .1 sub def } def % left title /dmacro {black (pL1hz) stringmacro /xpos xpos 1.7 add store /ypos ypos .1 add def} def % normal text after centered title /fmacro % try and fake | {mark /gsave cvx /currentpoint cvx /moveto cvx 0.1 /setlinewidth cvx 0 0.65 /rlineto cvx /stroke cvx /grestore cvx ] cvx printlist exch 3 index exch put % stuff into gonzo printlist exch 1 add exch % increment gonzo list count } def } def setpagefonts % -2 50.5 (optional header here \274) cl %% Set document opening conventions. Note DOCVIEW limited. [/CropBox [0 0 520 620] % set the wierd size /PAGES pdfmark [ {Catalog} << /ViewerPreferences << /FitWindow true /CenterWindow true >> /PageLayout /OneColumn % continous /Pagemode /UseNone % no thumbs /View [/XYZ null null 1 ] % force 100% >> /PUT pdfmark %%%%%%%%%%%%%%%%% START DEMO ART (not in use) %%%%%%%%%%%%%%%% %%% Hand patching Info: % next available variable is /GS3 % transparency gstate is object 2 % contents stream is object 18 gets q /GS3 gs (xstuff) Q % be sure to q Q bracket to localize % resources stream is object 19 gets /GS3 2 0 R /transoverlay { % make a new graphics state [ /_objdef {newgsstate} /type /dict /OBJ pdfmark % fill the new overlay graphics state - See PDF manual for details [ {newgsstate} << /Type /ExtGState /ca 0.5 % fill transparency is 0.5 /CA 0.5 % stroke transparency is 0.5 /BM /Normal /AIS false /OP false /OPM 1 /op true >> /PUT pdfmark % start a Begin Picture graphics overlay subroutine... [ /BBox [0 0 1000 1000 ] /_objdef {overlaypix} /BP pdfmark % fill the Begin Picture graphics overlay Xobject subroutine... 0 0.5 1 setrgbcolor % on the aqua side of blue 4 4 6 6 rectfill % complete the Begin Picture graphics overlay Xobject... [ /EP pdfmark } def % Write a two squares program... /twosquares { gsave translate 1 0.5 0 setrgbcolor % red side of orange 2 2 6 6 rectfill % do background opaque box [ {overlaypix} /SP pdfmark % show foreground transparent box grestore} def % Distill the two squares program. Initially use a BARE Distiller Job % Options that has no compression, no embedded fonts, and little else save /snap1 exch store %%% transoverlay % create new objects %%% 14 17.5 twosquares snap1 restore %%%%%%%%%%%% END DEMO %%%%%%% /burpwide 29.5 store /burplebox3 {save /burp1 exch store xpos ypos translate -1 .2 mt 3.5 yinc mul .4 add pd burpwide pr 3.5 yinc mul .4 add pu closepath 0.9 setgray fill burp1 restore } def /burplebox2 {save /burp1 exch store xpos ypos translate -1 .2 mt 2.5 yinc mul .4 add pd burpwide pr 2.5 yinc mul .4 add pu closepath 0.9 setgray fill burp1 restore } def /burplebox4 {save /burp1 exch store xpos ypos translate -1 .2 mt 4.5 yinc mul .4 add pd burpwide pr 4.5 yinc mul .4 add pu closepath 0.9 setgray fill burp1 restore } def /tabs [8 16.5] def aqua 0.33 setgray font0 20 47.3 0.7 add (Initial Exploration of the Acrobat 5) cc 20 45.3 0.7 add (SDK Software Development Kit) cc black font2 textleft 43 (|3Don Lancaster Synergetics, Box 809, Thatcher, AZ 85552 copyright c2002 as |/surl |6GuruGram|1|/gurgrm01 |6#11 |/surl http://www.tinaja.com|/tinaja |/surl don@tinaja.com|/maildon (928) 428-4073 |h |a|0T|b|1|khe latest version of |/surl |6Acrobat 5|1|/acrob01 from |/surl |6Adobe Systems|1|/adobe provides some major new features and upgrades that include transparency, improved file import|j/|jexport, and internal text capture. To fully explore this release, a new and free |/surl |6Acrobat|/adobesdk |/surl SDK Software Development Kit|1|/adobesdk is available. |h Central to the kit is the ability to create your own |/tinton1 |6plugins|1|/tintoff that let you interact both with |/surl |6Acrobat|1|/acrob01 internals and your operating system to provide new and improved capabilities. I was (|jand remain|j) particularly interested in any ability to let raw |/surl |6PostScript|1|/post01 code directly generate |/surl |6transparency options|1|/pstrans . |h Because it took me much longer and cost a lot more than expected to get started, I thought I'd share some of my startup discoveries with you here. Especially the more frustrating and non-obvious gotchas. |h On bootup, Acrobat looks into its |/tinton1 |6Plug_ins|1|/tintoff folder (and all of its subdirectories) to find any code with a |/tinton1 |6.api|1|/tintoff plugin trailer. Under Windows, properly written plugins are a variant of a |/tinton1 |6.dll|1|/tintoff dynamic linking library module. These plugins are first installed and then initialized by Acrobat. |3|/shiftin |/burple |/staytint1 |/burplebox3 Note that all subdirectories are searched within the Acrobat plugin folder. If you want to hide or disable a plugin, you'll have to move it elsewhere! |1|/shiftout |/aqua |/black The more plugins you have, the greater the performance and flexibility. But the longer your startup time. |h Plugins obviously have to interact with their operating system, so they will wildly differ between Windows, Mac, and Unix systems. Adobe chose to provide platform independent sourcecode written in |/tinton1 |6c++|1|/tintoff for plugin support. This sourcecode is then compiled and linked by suitable software on the chosen system. After learning and using their example plugins, they can be modified or improved for your custom uses. ) cl black beige 0.35 setgray 21 -2.5 (|3\320|j1|j\320) cc aqua showpage %%%%%%%%% 222222222 %% start page two 50 50 10 setgrid % create grid setpagefonts /tabs [11.5] def textleft texttop (|3|/shiftin |/burple |/staytint1 |/burplebox2 With one exception, ready-to-run plugins are absent from the SDK. You have to compile and link your own to proceed! |1|/shiftout |/aqua |/black Not being either a Microsoft or a c-language enthusiast, I first tried installing the fine and free |/tinton1 |6Command Line c++ Compiler|1|/tintoff from |/surl |6Borland|1|/borland and later on their |/tinton1 |6c++ |/tinton1 Builder Trial Edition CD|1|/tintoff . Only to discover I was in way over my head on linking problems. Some newsgroup inquiry at |/surl |6comp.text.pdf|1|/ng1 and |/surl |6comp.lang.postscript|1|/ng2 pointed out that the Adobe SDK is specifically intended for use with the |/surl |6Microsoft|/msc++ |/surl Visual c++|1|/msc++ program. |3|/shiftin |/burple |/staytint1 |/burplebox2 Compiling and linking Win32 Acrobat plugins with anything but Microsoft Visual c++ appears to be enormously difficult! |1|/shiftout |/aqua |/black Which promptly led to another rude surprise. I first bought the Learning Edition of Visual c++, only to find that the words "full featured" clearly labeled on the product really mean "hopelessly crippled". You are allowed to compile code but not use it. Getting a blocking error message instead. |h Thus\274 |3|/shiftin |/burple |/staytint1 |/burplebox2 The "learning editions" of Visual c++ are utterly and totally useless for generating exportable code! |1|/shiftout |/aqua |/black Nowhere, anywhere was I able to find any mention of this. I then grudgingly found a standard edition of |/tinton1 |6Visual c++ 6.0|1|/tintoff on |/surl |6eBay|1|/ebay for around half list price. You have to uninstall the learning edition before you can install the standard edition. |h Once installed, things finally started to work... |3|/shiftin |/burple |/staytint1 |/burplebox4 To win32 compile a SDK plugin, go to the win32 folder inside your chosen SDK plugin folder. Click on the file that ends in .dsw. This should autoboot Visual c++. Go to the Build menu. Click on the line that starts with "Build" and ends with ".api" |1|/shiftout |/aqua |/black Which should auto compile and link everything you need, create the plugin, and install that plugin into a new or an already existing |/tinton1 |6AcrobatSDK|1|/tintoff subdirectory you'll find in the main Acrobat plugin folder. Any modified or custom plugins should, of course, go in your own new folder. |h A quick check can be run for successful installation by viewing the plugin name under |/tinton1 |6Help -> About Acrobat SDK Plugins|1|/tintoff in Acrobat. |h Naturally, once you start modifying your code, you'll get all sorts of arcane |/tinton1 |6"fails |/tinton1 to compile"|1|/tintoff error messages. Which leads you to another can of worms entirely. |h ) cl black beige 0.35 setgray 21 -2.5 (|3\320|j2|j\320) cc aqua showpage %%%%%%%%% 33333333333 %% start page three 50 50 10 setgrid % create grid setpagefonts /tabs [11.5] def textleft texttop (|c Some Ready-to-Use SDK Plugins |d I've gone ahead and compiled several of the SDK plugins for you. By using a Windows ME system. These plugins are quite useful in their own light and can be studied ahead of actually getting and using Visual c++. Note that these were all compiled |/tinton1 |6from|1|/tintoff Adobe sourcecode but are |/tinton1 |6not|1|/tintoff an Adobe product. The only warranty here is "approximate quantity \320 one". |h Note further that |/surl |6Adobe|1|/adobe places use restrictions on such compiled code. Details can be found on their SDK or on their main |/surl |6website|1|/adobe . |h Here are a few comments on some of the plugins available\274 |/surl |6AboutAcrobatSDK.api|1|/aasdk |h This is the only ready-to-use plugin on the SDK. It adds a new |/tinton1 |6About Acrobat |/tinton1 SDK Plugins|1|/tintoff menu item to the Acrobat |/tinton1 |6Help|1|/tintoff menu. It both summarizes and fully describes all other available SDK plugins. It also shows whether any particular plugin is installed and ready to use. |h While you can manually install this plugin ahead of time, it will automatically get added the first time you successfully compile any other SDK plugin. |/surl |6AddImage.api|1|/addimage |h This plugin lets you add |/tinton1 |6.jpg|1|/tintoff images to any pdf page. At present, the image has to be named |/surl |6sample.jpg|1|/samplejpg and has to be in the same folder as your PDF file. If you want to change the image name, size, resolution, position, or transparency, you'll have to recode and recompile from the SDK. Be sure to save separate instances to your own plugin folder. |h You add your image by clicking on |/tinton1 |6Add Image|1|/tintoff in the SDK pulldown menu. It is fun to repeatedly place transparent images on top of each other to watch them get darker and contrastier. But don't do this in your final code as your file sizes will get outrageous. |/surl |6Transparency.api|1|/transparency |h Gives you some really neat sliders that let you adjust the transparency of any already transparent object on a PDF page. You can use your own PDF files or this Adobe |/surl |6threerects.pdf|1|/threerects demo. |h You gain transparenty control by clicking on |/tinton1 |6Transparency|1|/tintoff in the SDK pulldown menu. Fill and stroke transparency is independently controllable. More on transparency in |/surl |6GuruGram|1|/gurgrm01 #9 as |/surl |6PSTRANS.PDF|1|/pstrans . ) cl black beige 0.35 setgray 21 -2.5 (|3-|j3|j-) cc aqua showpage %%%%%%%%% 4444444 %% start page four 50 50 10 setgrid % create grid setpagefonts /tabs [11.5] def textleft texttop ( |/surl |6VerifyURLs.api|1|/verifyurls |h This plugin is just plain wonderful. It will go through a PDF file and quickly and automatically check each and every URL by an actual online pinging. You access it from a new |/tinton1 |6Locate Web Addresses|1|/tintoff in the |/tinton1 |6Tools|1|/tintoff pulldown. You do, of course, have to be online for this feature to work. |h There is also an option to convert any single line PDF string that starts with |/tinton1 |6http://|1|/tintoff into an automatic url link. But I very much prefer my sourcecode-based |/surl |6Gonzo|1|/post01 Utilities instead since they let you link any text to any url. |/surl |6UncompressPDF.api|1|/uncomp |h This plugin lets you remove most compression from a PDF document. It appears as a |/tinton1 |6Uncompressed PDF Files (*.pdf)|1|/tintoff inside your |/tinton1 |6File/Save As|1|/tintoff menu option. |h Which is most handy for PDF code analysis. And considerably simpler than the methods we looked at back in |/surl |6GuruGram|1|/gurgrm01 #8 as |/surl |6FLATEVUE.PDF|1|/flate Note that font compression is |/tinton1 |6not|1|/tintoff removed by this plugin. |/surl |6Watermark.api|1|/watermark |h This plugin lets you place watermarks (|jsuch as "copyright 2002" or "confidential", or "file copy" or whatever|j) onto any and all pages of your .PDF document. At present, a one line, fixed font message is centered on the page. The font size and angle of rotation is adjustable. There is also a choice of four fixed colors. |h You add a watermark by clicking on |/tinton1 |6Watermark|1|/tintoff in the SDK pulldown menu. Consulting assistance on any and all of these topics can be found at |/surl |6http://www.tinaja.com/info01.asp|1|/info01 . |h Additional |/surl |6GuruGrams|1|/gurgrm01 wait your support as a |/surl |6Synergetics Partner|1|/advt01 . ) cl black beige 0.35 setgray 21 -2.5 (|3-|j4|j-) cc aqua showpage %%%%%%%%%%%%%%%%%%%% % EOF