Hello Svante,
no problem, but I don't know how to add an enhancement request for this
project, but I do think, a high-level API should at least allow to set
the flow properties of an image.
Kind regards
Peter
Am 12.01.2017 um 21:48 schrieb Svante Schubert:
Hi Peter,
The solution is indeed that you get from the Simple API layer to the ODFDOM
layer.
If this is not working you need to either add access from Simple API to
ODFDOM layer or add the functionality to the Simple API level.
We might add this to the library afterwards, just suggest a patch! :)
As I said, I am not so familiar with the Simple API, but others might help
if you get stucked or I might try it myself if you get lost ;)
Good luck with it,
Svante
PS: I am sorry, the train ride was already packed with business stuff, so I
was not able to fulfil my aim of assistance..
ᐧ
2017-01-12 12:59 GMT+01:00 Peter Nabbefeld <[email protected]>:
Hello Svante,
sorry, did't notice Your example code before, but I've tried sth. similar
already.
The point is: I need to set "style:flow-with-text='false'".
The Layout is as follows:
1) A headline at the beginning of the page.
2) A table, containing 6 rows and 2 columns; first row merged.
3) An image bound to the paragraph in the first table cell, spanning about
5 rows.
With "style:flow-with-text='true'" (which is obviously the default
setting) the first row is expanded to fit to the bounds of the image, which
is not the desired behaviour.
With "style:flow-with-text='false'" (which I cannot set using Simple API,
but only using ODFDOM layer directly), the table is correctly displayed,
but the image is in the background (so rows are visible in front of the
image).
In my case, I've set the following properties to get my layout working:
String drawStyleName = image.getFrame().getDrawFrameE
lement().getDrawStyleNameAttribute();
OdfStyle style = image.getOwnerDocument().getCo
ntentDom().getAutomaticStyles().getStyle(drawStyleName,
OdfStyleFamily.Graphic);
style.setProperty(StyleGraphicPropertiesElement.Wrap,
StyleWrapAttribute.Value.RUN_THROUGH.toString());
style.setProperty(StyleGraphicPropertiesElement.WrapInfluenceOnPosition,
DrawWrapInfluenceOnPositionAttribute.Value.ONCE_CONCURRENT.toString());
style.setProperty(StyleGraphicPropertiesElement.RunThrough,
StyleRunThroughAttribute.Value.FOREGROUND.toString());
style.setProperty(StyleGraphicPropertiesElement.Height,
"5.279cm");
style.setProperty(StyleGraphicPropertiesElement.X,
StringUtils.toMetricAttribute(img.getX()));
style.setProperty(StyleGraphicPropertiesElement.Y,
StringUtils.toMetricAttribute(img.getX()));
style.setProperty(StyleGraphicPropertiesElement.Red, "3%");
style.setProperty(StyleGraphicPropertiesElement.Green, "2%");
style.setProperty(StyleGraphicPropertiesElement.Blue, "0%");
style.setProperty(StyleGraphicPropertiesElement.Gamma, "95%");
style.setProperty(StyleGraphicPropertiesElement.Clip,
"rect(1.82cm, 0cm, 0.91cm, 0cm)");
style.setProperty(StyleGraphicPropertiesElement.FlowWithText, "false");
Most of those properties are not changeable via Simple API.
Kind regards
Peter
Am 11.01.2017 um 16:08 schrieb Svante Schubert:
Hello Peter,
Does the example helped you already?
If not, can you sent a document (for example the one being generated)
adjusted manuualy in LibreOffice with the image as you like to have it?
Regards,
Svante
ᐧ
2017-01-11 12:23 GMT+01:00 Peter Nabbefeld <[email protected]>:
Hello Svante,
my original problem was not inserting the image (that's been easy), but
setting the property - the image should not "explode" the table cell.
My first appoach was creating a new StyleGraphicPropertiesElement
instance
- similar to some tutorial I've found about inserting tab stops.
After I saw, it didn't work, I noticed there had already been such an
element in the style, which would have to be changed. I could achieve
editing the properties using ODFDOM, but not using Simple API. I've also
looked into the sources, but the API has not been extended, yet.
Kind regards
Peter
Am 11.01.2017 um 10:58 schrieb Svante Schubert:
Hello Peter,
What was the original problem you like to solve?
You started with inserting an image within the the paragraph of a cell.
It works for me, I added an automated test for it, which is yet not
testing
just inserting the images, but it works. :)
NOTE: I usually do not work on releases and I recommend to work on the
latest sources, as I aim to use automated tests for all my fixes, I can
be
quite certain that the sources are better than the previous releases.
As mentioned on http://incubator.apache.org/odftoolkit/source.html
you may get the sources from by the following SVN comand:
svn co https://svn.apache.org/repos/asf/incubator/odf/trunk
odftoolkit20170111
NOTE: The best way to find a solution for a problem is to take a look
into
existing regression tests of the project you are focused on.
As you are working on the simple API level you may find regression tests
here:
odftoolkit20170111/simple/src/test/java/org/odftoolkit/simple
I combined two tests from the Simple API:
One for the cell within a text table from
odftoolkit20170111/simple/src/test/java/org/odftoolkit/simpl
e/table/TableCellTest.java
and one for the image:
odftoolkit20170111/simple/src/test/java/org/odftoolkit/simpl
e/common/navigation/ImageSelectionTest.java
And appened the following test to one of those test files:
@Test
public void testGraphicStyle() {
try {
Table table1 = odtdoc.getTableByName("Table1");
Cell fcell2 = table1.getCellByPosition(0, 1);
String text = fcell2.getDisplayText();
Assert.assertEquals("Aa\nbb\ncc\ndd\nee", text);
// Caution there are two cells with the same content in
the
document..
Paragraph para = fcell2.getParagraphByIndex(0, true);
Image image = null;
image = Image.newImage(para,
ResourceUtilities.getURI("testA.jpg"));
image.setName("this image 1");
image.setHyperlink(new URI("http://odftoolkit.org"));
// As I have overseen the image within the first table, I
added
a new paragraph (not in a table) to the end of the document and inserted
the image there
Paragraph para2 = odtdoc.addParagraph("MyImage");
Image image2 = null;
image2 = Image.newImage(para2,
ResourceUtilities.getURI("testA.jpg"));
image2.setName("this image 2");
image2.setHyperlink(new URI("http://odftoolkit.org"));
odtdoc.save(ResourceUtilities.newTestOutputFile("_newImageIn
ParaCell.odt"));
} catch (Exception ex) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, null,
ex);
}
}
By executing the test in an IDE with mouse context, you may run your new
test solely to be able to debug some lines of interests.
Finally, for reviewing the test resuslt, you may find the new created
output document I called '_newImageInParaCell.odt' at
odftoolkit20170111/simple/target/test-classes
And to easily view into the zipped ODF document, I am using JEdit with
the
Archive extension and to indent the XML document the XML extension
(that I
aligned to a key short cut) making life much easier :)
NOTE: that the Simple API was donated once by IBM, but when IBM
withdrawn
from Apache OpenOffice it withdraw from this project as well. I would
need
to debug myself, perhaps you can give it a try.
Going to be on a train ride Thursday evening, if there are any question
I
may answer them at that time.
Good luck! :)
Svante
2017-01-10 23:04 GMT+01:00 Peter Nabbefeld <[email protected]>:
Hello,
I've found out now, that I'm duplicating the
StyleGraphicPropertiesElement.
Using
GraphicProperties writableGraphicsProperties =
styleHandler.getGraphicPropertiesForWrite();
I can get access to some very basic attributes, but the
StyleGraphicPropertiesElement is not accessible.
How can I get it, so I don't have to create my own?
Kind regards
Peter
Am 10.01.2017 um 13:41 schrieb Peter Nabbefeld:
Hello all,
I'm new to this list, I've joined the list because I've seen the
following misbehaviour related to images:
In my document I add an image to a paragraph contained to a table
cell:
Image image = Image.newImage(para, new
URI(imgParams.get("uri")));
FrameStyleHandler styleHandler = image.getStyleHandler();
OdfContentDom styles = para.getOwnerDocument().getCon
tentDom();
StyleGraphicPropertiesElement gProperties = new
StyleGraphicPropertiesElement(styles);
[...]
gProperties.setStyleFlowWithTextAttribute(false);
writableStyleProperties.appendChild(gProperties);
Though the property is set to "false", the resulting content includes
the
property as "true". I'm even more uncomfortable with this, as
LibreOffice
does not behave correctly after unsetting this property manually, but
only
after reloading. As I'm new to the toolkit, it's also possible that
I've
misconfigured sth. - If so, do You probably know what?
Another problem I've noticed: When creating the odt file
programmatically, I can open the properties dialog only for some "card
tabs", but not for the image details alltogether. Do I have to do some
special configuration?
Kind regards
Peter
ᐧ