Problems with import of shape type 'arc' from binary MS Office

Regina Henschel rb.henschel at t-online.de
Thu Mar 14 17:33:21 UTC 2019


Hi Mark, hi all,

Mark Hung schrieb am 13-Mar-19 um 12:45:
> Hi Regina,
> 
> In your first mail you mentioned that MSO has viewbox size 43200x43200,

that is the size of the full ellipse, not of the viewbox.

> while LibreOffice has viewbox size 21600x21600.
> And MSO viewbox only contains the current sector but LibreOffice 
> contains the eclipse.
> 
> I think it's correct that you want to make LibreOffice viewbox only 
> contain the current sector. But I think the problem is caused by 
> incorrect conversion of the draw:enhanced-path (see the content.xml in 
> saved odt file) instead of the incorrect viewbox size.

The enhanced-path uses the same kind of commands as in MS Office. (The 
change from W to V is included in https://gerrit.libreoffice.org/68941). 
Only, that no fixed values for start and end point are used but the 
values are calculated. That is necessary for to get adjust handles. It 
seems, that MS Office generates the handles from some internal defaults, 
there exist no records for equation or handles in the original file.

  I think it's
> important to find out why it failed to convert the enhanced-path so that 
> it only contains the sector.

The original file uses 'msopathEscapeClockwiseArc'. That corresponds to 
ODF command V. The current solution translates it directly.

MS Office 365 drops the ability to change the sector, when it converts 
the file from binary format to OOXML. The converted shape has no handles 
and its outline is generated by a Bézier-curve in OOXML.

> 
> Although changing the viewbox size might have the expected effect for 
> the arc shape msoSptArc, but I don't understand why it works and we 
> might also miss the chance to fix the conversion of problematic drawing 
> commands for other custom shapes.

In ODF, the svg:viewBox specifies a rectangle in values of the internal 
coordinate system of the shape. This rectangle is directly bound to the 
rectangle specified by the svg:x, svg:y, svg:width and svg:height 
attributes, which uses values from the outer coordinate system, where 
the shape is anchored. That is the rectangle which corresponds to the 
resize handles in the UI.

 From all shapes in MS Office 97, the mso_sptArc is the only one (I have 
tested it), where dragging an adjust handle changes the rectangle of the 
resize handles. I haven't got a MS Office 2003 to test it there. And I 
doubt there exist user defined shapes in binary format.

The 'arc'-shape from a current MS Office 365 does not behave this way. 
Here dragging the adjust handle does not change the rectangle of the 
resize handles. The 'arc'-shape from a current MS Office 365 behaves the 
same, as the shape in LO, which is currently generated from import of 
shape mso_sptArc.

The properties of the mso_sptArc seem to be more like the arc, sector 
and segment from the 'legacy ovals'. But they have different behavior in 
regard to filling. The arc from the example document of tdf#124029 
cannot be expressed by a 'legacy oval'.

You are right, perhaps a more general solution is needed. If the 
solution were so clear, I would not have ask on the list.

Problems are:
MS Office allows positions, so that parts of the shape are outside the 
page area. That allows e.g. a sector to be placed in the corner of a 
page. LibreOffice shows such, if the file is in docx format, but does 
not allow it in odt format.
I can try to change the position information (svg:x, svg:y) so that the 
sector of a mso_sptArc shape will be at the same position as in Word. 
But that works only as long as the entire underlying ellipse is still 
inside the page area.

The layout algorithm in Writer is fragile and implementing positions 
outside the page area for the rare cases of arcs in old binary documents 
looks too dangerous to me. (Besides the fact, that I do not understand 
enough about the algorithm and its implementation.)

Kind regards
Regina







More information about the LibreOffice mailing list