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 >>>>>> >>>>>> >>>>>> ᐧ >>>>> >>>> >>>> >
