When you insert an image into a document using the Insert - Image - From
File... function with the user interface, there is a check box that says
"Link". When you remove the check from the check box, OpenOffice embeds the
image. If you leave the check checked, then only a link to the image is
embedded. If you move or change a linked image, then the document does not
display your original image. The advantage of embedding a link over embedding a
file is that the document takes up less space.
One way to figure out what is going on with the application is to record the
action with the Macro recorder. The code that that the Macro Recorder generates
may use an inefficient programming style, but it does give you some insight how
the program processes requests and organizes content.
A couple of years ago, Ariel Del Valle came up with a basic extension that
substituted one image with another one resized to the same picture size. He
ended up using the following method to "break the link" so that the image was
stored in the OpenOffice document rather than referring to an external image.
Although the language here is StarBasic, it uses OpenOffice objects that are
accessible in the other languages supported by OpenOffice.
sub breakLink (byval oFirstFile,byval oGraph) 'Graphic handling based on code
(c) 2011 Ariel Del Valle 'This program is free software; you can
redistribute it and/or modify 'it under the terms of the GNU General Public
License as published by 'the Free Software Foundation; either version 2 of
the License, or '(at your option) any later version. ' 'This
program is distributed in the hope that it will be useful, 'but WITHOUT
ANY WARRANTY; without even the implied warranty of 'MERCHANTABILITY or FITNESS
for A PARTICULAR PURPOSE.See the 'GNU General Public License for more
details. ' 'You should have received a copy of the GNU General Public
License 'along with this program; if not, write to the Free Software
'Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA on
error resume next dim oBitmaps oBitmaps =
ThisComponent.createInstance("com.sun.star.drawing.BitmapTable")
oBitmaps.insertByName("Image", oFirstFile) ' we store the image in the bitmap
holder oGraph.GraphicURL = oBitmaps.getByName("Image") ' we give the image
the location of the picture which is stored within the document
oBitmaps.removeByName("Image") 'once that we have given the image a picture we
no longer need it inside of the oBitmapend sub
For some context, I use Ariel's sub to break the link when importing image
files in a directory to a impress presentation. It's in the modPhotoAlbum
module in the AbilityTools extension at https://code.google.com/p/ability-tools/
You can check an OpenDocument for what media it actually contains by renaming
the extension of your open document file to .zip. If you browse through the zip
compressed folders, you will find a media folder containing all the images
embedded in the document. If there are images in the folder, this will tell you
if you have successfully embedded your images rather than linking them.
I'm sorry I can't offer more help, but perhaps some of this information will
give you some clues that will help you solve your problem.
> From: [email protected]
> To: [email protected]; [email protected]
> Subject: RE: insert image into calc document
> Date: Tue, 6 Aug 2013 21:03:47 +0300
>
> Sorry, but i don't know english very well and i can't express my opinion in
> an affordable manner.<неиI want to leave image in file body of calc
> document. Code that i wrote here only leaves a link to image like
> 'D:\image.jpeg'.<неиBut i want to insert image how it insert OpenOffice.org.
> <неи<неиCan you help me in this
> question?<неи<неиThanks.<неи<неи-----Original Message-----<неиFrom: Andrew
> Douglas Pitonyak [mailto:[email protected]] <неиSent: Tuesday, August 06,
> 2013 6:58 PM<неиTo: [email protected]<неиSubject: Re: insert image
> into calc document<неи<неиInteresting question....<неи<неиWhen you insert
> your image into the document, it then has an internal <неиURL. The question
> is.... how to remove the image from the GUI and leave <неиit in the
> file.<неи<неи<неиOn 08/05/2013 12:21 PM, K.Misha wrote:<неи> <неи><неи>
> From: K.Misha [mailto:[email protected]]<неи> Sent: Monday, August 05, 2013
> 7:21 PM<неи> To: '[email protected]'<неи> Subject: insert image into calc
> document<неи><неи> <неи><неи> Hello!<неи><неи> <неи><неи> I have a
> problem with inserting image into calc document!<неи><неи> I'm doing it this
> way:<неи><неи> <неи><неи> void insertImage( imgPosition iPos, imgSize
> iSize, char * imgUrl )<неи><неи> {<неи><неи> Reference<
> com::sun::star::drawing::XDrawPagesSupplier ><неи>
> xDrawPagesSupplier(xCalcComponent, UNO_QUERY);<неи><неи> Reference<
> XDrawPages > xDrawPages(<неи> xDrawPagesSupplier->getDrawPages(), UNO_QUERY
> );<неи><неи> Reference< XDrawPage > xDrawPage(
> xDrawPages->getByIndex(irSheet),<неи> UNO_QUERY );<неи><неи>
> Reference< XShapes > xShapes(xDrawPage, UNO_QUERY);<неи><неи> <неи><неи>
> com::sun::star::awt::Point imgPoint;<неи><неи>
> com::sun::star::awt::Size imgSize;<неи><неи> <неи><неи>
> imgSize.Height = iSize.h;<неи><неи> imgSize.Width =
> iSize.w;<неи><неи> imgPoint.X = iPos.x;<неи><неи> imgPoint.Y =
> iPos.y;<неи><неи> ////////the size in 100/th mm<неи><неи>
> <неи><неи> Reference<XSpreadsheetDocument> xSheetDocument<неи>
> (xCalcComponent,UNO_QUERY);<неи><неи> Reference< XModel > aDrawDoc
> (xSheetDocument, UNO_QUERY);<неи><неи>
> Reference<XMultiServiceFactory> aFact(aDrawDoc,UNO_QUERY);<неи><неи>
> Reference< XShape > xShape(<неи>
> aFact->createInstance(OUString::createFromAscii("com.sun.star.drawing.Graphi
> <неи> cObjectShape")), UNO_QUERY);<неи><неи> //Reference< XShape >
> xShape( xShapes->getByIndex(0), UNO_QUERY);<неи><неи> <неи><неи>
> Reference<XPropertySet> rColProps(xShape, UNO_QUERY);<неи><неи> <неи><неи>
> char * img = imgUrl;//"file:///D:/getImage3.jpeg";<неи><неи> int
> nLenOfWideCharStr<неи>
> =MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,img,-1,NULL,0);<неи><неи>
> wchar_t *cImg = (PWSTR)HeapAlloc(GetProcessHeap(), 0,<неи> nLenOfWideCharStr
> * sizeof(WCHAR));<неи><неи> <неи>
> MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,img,-1,cImg,nLenOfWideCharStr);<не
> и><неи> <неи><неи> OUString sstring = cImg;<неи><неи> <неи><неи>
> <неи>
> rColProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicURL
> <неи> ")), makeAny(sstring));<неи><неи> <неи>
> //rColProps->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Name")),
> <неи> makeAny(sstring));<неи><неи> <неи><неи>
> xShape->setPosition(imgPoint);<неи><неи>
> xShape->setSize(imgSize);<неи><неи> xDrawPage->add(xShape);<неи><неи>
> }<неи><неи> <неи><неи> //////////////////////////////////////<неи><неи>
> But every time when i open this calc document, image must be in this path
> -<неи> imgUrl. How can i insert image into file body of calc
> document?<неи><неи> <неи><неи> Thanks!<неи><неи><неи<неи-- <неиAndrew
> Pitonyak<неиMy Macro Document:
> http://www.pitonyak.org/AndrewMacro.odt<неиInfo:
> http://www.pitonyak.org/oo.php<неи<неи<неи----------------------------------
> -----------------------------------<неиTo unsubscribe, e-mail:
> [email protected]<неиFor additional commands, e-mail:
> [email protected]<неи<неи
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>