Can anyone assist me with programmatically adding image to and RTF. I have read through RTF spec and when it comes to the pict and image sections it all turns into Greek. Ideally, I would simply point to a graphic file and call it a day. My environment is ASP, IIS 5/6. I have had great success formatting documents, inserting DB info but I need to add a logo to the header and can’t get past it. Any help would be greatly appreciated.
![]() |
Patch reliability is unclear. Unless you have an immediate, pressing need to install a specific patch, don't do it. |
SIGN IN | Not a member? | REGISTER | PLUS MEMBERSHIP |
-
Programmatically Add Image to RTF (2000)
Home » Forums » AskWoody support » Productivity software by function » Visual Basic for Applications » Programmatically Add Image to RTF (2000)
- This topic has 7 replies, 3 voices, and was last updated 21 years ago.
AuthorTopicWSverticalanswer
AskWoody LoungerJune 3, 2004 at 9:17 pm #405753Viewing 0 reply threadsAuthorReplies-
WSjscher2000
AskWoody Lounger -
WSverticalanswer
AskWoody Lounger -
WSAndrew77
AskWoody LoungerJune 4, 2004 at 3:38 am #836257From “RTF: Pocket Guide,” published by (who else) O’Reilly & Associates:
[indent]
Embedding Images
In an ideal world, RTF would allow you to insert a picture into a document by simply dropping a hex-encoded GIF, JPEG, or PNG file into your RTF code. But RTF doesn’t do things that way. The RTF specification, on the subject of pictures, explains a {pict…} construct that contains picture data (typically as a long series of hexadecimal digits). But the picture data encoded in the {pict…} construct is in a binary format that can’t be converted to easily from a conventional image format (i.e., GIF, JPEG, or PNG).
If you want to insert images in an RTF file, you have three options.The first option is to give up and do without the image. In many cases, the image isn’t necessary (as with a company logo on an invoice document).
The second option is to produce the binary encoding of the image by copying it out of an RTF file generated by a word processor. So if you want to insert a logo in an invoice that you’re autogenerating as RTF, you could start AbiWord (for example), start a new blank file, insert a picture from disk, save the file as .rtf, and then open the .rtf file in a text editor. For example, inserting a 2 x 2 blue dot in AbiWord produces an RTF file that ends like this:
pardplainltrpars15{*shppict {pictpngblippicw2pich2picwgoal28pichgoal28 bliptag10000{*blipuid 00000000000000000000000000002710} 89504e470d0a1a0a0000000d4948445200000002000000020403000000809810 1700000030504c54450000008000000080008080000000808000800080808080 80c0c0c0ff000000ff00ffff000000ffff00ff00ffffffffff7b1fb1c4000000 0c49444154789c6338c3700600033401997bc924ce0000000049454e44ae4260 82}}{f4fs24lang1033{*listtag0}}}
This image could be copied into other documents by copying the {pict…} group and inserting it directly into another document as needed. (Note that it must be copied from {pict up to the next matching }, not just the next }. Otherwise, you end up stopping prematurely, at the end of the third line above.)
The third way to insert images in an RTF file is to use this quite nonstandard code to have the word processor insert an arbitrary external image file into the document:{fieldfldedit{*fldinst { INCLUDEPICTURE d "PicturePath" * MERGEFORMATINET }}{fldrslt { }}}
In the PicturePath, path separators must either be a forward slash, like so:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:/stuff/Group_x/images/alaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
or must be a double-backslash, escaped (either as ‘5c’5c or as ), like so:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:'5c'5cstuff'5c'5cGroup_x'5c'5cimages'5c'5calaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
or:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:stuffGroup_ximagesalaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
At time of this writing, this whole image-via-field construct seems to be particular to MSWord versions, beginning with Word 2000. Other word processors either just ignore the construct (as AbiWord, Wordpad, and others do), or they throw an error (like MSWord Viewer 97, which replaces the image with the text “Error! Unknown switch argument”).
You can control exact positioning of an image on the page by simply making it the content of an exact-positioned paragraph, as discussed at the end of the “Basic RTF Syntax” section. For example, this image’s top-left corner starts 2,160 twips across and 3,600 twips down from the page’s top-left corner:{pard pvpgphpg posx2160 posy3600 field...} or {pict...} par}
[/indent]
Sounds like Option 2 might work for you.
BTW, I highly recommend that book if you regulary work in RTF. (Hey, it’s only $12.95)
HTH!
-
WSverticalanswer
AskWoody Lounger -
WSverticalanswer
AskWoody Lounger
-
-
WSAndrew77
AskWoody LoungerJune 4, 2004 at 3:38 am #836258From “RTF: Pocket Guide,” published by (who else) O’Reilly & Associates:
[indent]
Embedding Images
In an ideal world, RTF would allow you to insert a picture into a document by simply dropping a hex-encoded GIF, JPEG, or PNG file into your RTF code. But RTF doesn’t do things that way. The RTF specification, on the subject of pictures, explains a {pict…} construct that contains picture data (typically as a long series of hexadecimal digits). But the picture data encoded in the {pict…} construct is in a binary format that can’t be converted to easily from a conventional image format (i.e., GIF, JPEG, or PNG).
If you want to insert images in an RTF file, you have three options.The first option is to give up and do without the image. In many cases, the image isn’t necessary (as with a company logo on an invoice document).
The second option is to produce the binary encoding of the image by copying it out of an RTF file generated by a word processor. So if you want to insert a logo in an invoice that you’re autogenerating as RTF, you could start AbiWord (for example), start a new blank file, insert a picture from disk, save the file as .rtf, and then open the .rtf file in a text editor. For example, inserting a 2 x 2 blue dot in AbiWord produces an RTF file that ends like this:
pardplainltrpars15{*shppict {pictpngblippicw2pich2picwgoal28pichgoal28 bliptag10000{*blipuid 00000000000000000000000000002710} 89504e470d0a1a0a0000000d4948445200000002000000020403000000809810 1700000030504c54450000008000000080008080000000808000800080808080 80c0c0c0ff000000ff00ffff000000ffff00ff00ffffffffff7b1fb1c4000000 0c49444154789c6338c3700600033401997bc924ce0000000049454e44ae4260 82}}{f4fs24lang1033{*listtag0}}}
This image could be copied into other documents by copying the {pict…} group and inserting it directly into another document as needed. (Note that it must be copied from {pict up to the next matching }, not just the next }. Otherwise, you end up stopping prematurely, at the end of the third line above.)
The third way to insert images in an RTF file is to use this quite nonstandard code to have the word processor insert an arbitrary external image file into the document:{fieldfldedit{*fldinst { INCLUDEPICTURE d "PicturePath" * MERGEFORMATINET }}{fldrslt { }}}
In the PicturePath, path separators must either be a forward slash, like so:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:/stuff/Group_x/images/alaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
or must be a double-backslash, escaped (either as ‘5c’5c or as ), like so:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:'5c'5cstuff'5c'5cGroup_x'5c'5cimages'5c'5calaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
or:
{fieldfldedit{*fldinst { INCLUDEPICTURE d "C:stuffGroup_ximagesalaska_map.gif" * MERGEFORMATINET }}{fldrslt { }}}
At time of this writing, this whole image-via-field construct seems to be particular to MSWord versions, beginning with Word 2000. Other word processors either just ignore the construct (as AbiWord, Wordpad, and others do), or they throw an error (like MSWord Viewer 97, which replaces the image with the text “Error! Unknown switch argument”).
You can control exact positioning of an image on the page by simply making it the content of an exact-positioned paragraph, as discussed at the end of the “Basic RTF Syntax” section. For example, this image’s top-left corner starts 2,160 twips across and 3,600 twips down from the page’s top-left corner:{pard pvpgphpg posx2160 posy3600 field...} or {pict...} par}
[/indent]
Sounds like Option 2 might work for you.
BTW, I highly recommend that book if you regulary work in RTF. (Hey, it’s only $12.95)
HTH!
-
-
WSverticalanswer
AskWoody Lounger
-
Viewing 0 reply threads -

Plus Membership
Donations from Plus members keep this site going. You can identify the people who support AskWoody by the Plus badge on their avatars.
AskWoody Plus members not only get access to all of the contents of this site -- including Susan Bradley's frequently updated Patch Watch listing -- they also receive weekly AskWoody Plus Newsletters (formerly Windows Secrets Newsletter) and AskWoody Plus Alerts, emails when there are important breaking developments.
Get Plus!
Welcome to our unique respite from the madness.
It's easy to post questions about Windows 11, Windows 10, Win8.1, Win7, Surface, Office, or browse through our Forums. Post anonymously or register for greater privileges. Keep it civil, please: Decorous Lounge rules strictly enforced. Questions? Contact Customer Support.
Search Newsletters
Search Forums
View the Forum
Search for Topics
Recent Topics
-
Recommended watching : Mountainhead movie
by
Alex5723
3 hours ago -
End of support for Windows 10
by
Old enough to know better
19 minutes ago -
What goes on inside an LLM
by
Michael Covington
2 hours, 49 minutes ago -
The risk of remote access
by
Susan Bradley
1 hour, 55 minutes ago -
The cruelest month for many Office users
by
Peter Deegan
2 hours, 17 minutes ago -
Tracking protection and trade-offs in Edge
by
Mary Branscombe
5 hours, 14 minutes ago -
Supreme Court grants DOGE access to confidential Social Security records
by
Alex5723
11 hours, 51 minutes ago -
EaseUS Partition Master free 19.6
by
Alex5723
3 hours, 47 minutes ago -
Microsoft : Edge is better than Chrome
by
Alex5723
1 day, 1 hour ago -
The EU launched DNS4EU
by
Alex5723
1 day, 13 hours ago -
Cell Phone vs. Traditional Touchtone Phone over POTS
by
280park
1 day, 4 hours ago -
Lost access to all my networked drives (shares) listed in My Computer
by
lwerman
1 day, 19 hours ago -
Set default size for pasted photo to word
by
Cyn
2 days, 1 hour ago -
Dedoimedo tries 24H2…
by
Cybertooth
1 day, 13 hours ago -
Windows 11 Insider Preview build 27871 released to Canary
by
joep517
3 days ago -
Windows 11 ad from Campaign Manager in Windows 10
by
Jim McKenna
17 hours, 2 minutes ago -
Small desktops
by
Susan Bradley
16 hours, 8 minutes ago -
Totally disable Bitlocker
by
CWBillow
1 day, 17 hours ago -
Phishers extract Millions from HMRC accounts..
by
Microfix
2 days, 21 hours ago -
Windows 10 22H2 Update today (5 June) says up-to-date but last was 2025-04
by
Alan_uk
4 days, 4 hours ago -
Thoughts on Malwarebytes Scam Guard for Mobile?
by
opti1
1 day, 22 hours ago -
Mystical Desktop
by
CWBillow
4 days, 7 hours ago -
Meta and Yandex secretly tracked billions of Android users
by
Alex5723
3 days, 12 hours ago -
MS-DEFCON 2: Do you need that update?
by
Susan Bradley
1 day ago -
CD/DVD drive is no longer recognized
by
WSCape Sand
4 days, 22 hours ago -
Windows 11 24H2 Default Apps stuck on Edge and Adobe Photoshop
by
MikeBravo
5 days, 1 hour ago -
North Face and Cartier customer data stolen in cyber attacks
by
Alex5723
4 days, 23 hours ago -
What is wrong with simple approach?
by
WSSpoke36
2 days, 21 hours ago -
Microsoft-Backed Builder.ai Set for Bankruptcy After Cash Seized
by
Alex5723
5 days, 11 hours ago -
Location, location, location
by
Susan Bradley
4 days, 1 hour ago
Recent blog posts
Key Links
Want to Advertise in the free newsletter? How about a gift subscription in honor of a birthday? Send an email to sb@askwoody.com to ask how.
Mastodon profile for DefConPatch
Mastodon profile for AskWoody
Home • About • FAQ • Posts & Privacy • Forums • My Account
Register • Free Newsletter • Plus Membership • Gift Certificates • MS-DEFCON Alerts
Copyright ©2004-2025 by AskWoody Tech LLC. All Rights Reserved.