开发者

How to add a text caption to an image with OpenOffice::OODoc?

开发者 https://www.devze.com 2023-03-14 08:37 出处:网络
I have the following code that creates an odf-document with a heading and a picture: #!/usr/bin/perl use strict;

I have the following code that creates an odf-document with a heading and a picture:

#!/usr/bin/perl 

use strict;
use warnings;
use OpenOffice::OODoc;

my $doc = odfDocument(
    file   => 'test.odt',
    create => 'text'
);

my $head = $doc->appendHeading(
    text  => "This is a Test",
    style => 'Heading 1'
);

my $style = $开发者_如何学Pythondoc->createImageStyle("Photo");
my $image = $doc->createImageElement(
    'some picture',
    style      => 'Photo',
    attachment => $head,
    size       => '4cm, 12cm',
    link       => '/full/path/to/picture.png'
);

$doc->save();

How can I add a text caption to the picture? When I create a text caption in LibreOffice the part of the 'content.xml' where a caption is created looks like this.

<draw:frame draw:style-name="fr1" draw:name="Frame1" text:anchor-type="as-char" svg:y="0cm" svg:width="4.001cm" draw:z-index="0">
  <draw:text-box fo:min-height="12cm">
    <text:p text:style-name="Caption">
      <draw:frame draw:style-name="fr2" draw:name="Eiffel Tower" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="4.001cm" style:rel-width="100%" svg:height="12cm" style:rel-height="scale" draw:z-index="1">
        <draw:image xlink:href="full/path/to/picture.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
      </draw:frame>
      test caption
    </text:p>
  </draw:text-box>
</draw:frame> 

I think it creates a frame and then puts the image and the caption text inside of it. I am lost at this point. I couldn't find something about adding elements to frames in the documentation either.


It would be interesting to see the xml that the perl creates, but other than that, you can use the Xpath module to amend the XML before writing it out. But really, we need to see the basic output to see what's going wrong. For example, maybe the frame nesting is wrong.

0

精彩评论

暂无评论...
验证码 换一张
取 消