Ich habe eine Legacy-Rails-App, die docx-Datei generieren kann. Es ist nur XML-Vorlage, kein Juwel. Vorlage wird mit ERB-Syntax geschrieben.Generierte docx-Datei ist beschädigt
Das Problem ist, dass generierte Datei von MS Office Word als "beschädigt" markiert wird, obwohl LibreOffice unter Linux es einwandfrei öffnet. Nach der Wiederherstellung von MS Office scheint Word jedoch die Datei ohne irgendwelche Inhaltsverluste zu öffnen.
Ich füge vollständige XML-Vorlage auf pastebin.
Während des Debugging habe ich herausgefunden, dass ohne den Block, ausgehend von der Leitung 602, alles gut funktioniert. Ich kann also nicht verstehen, was mit dieser bestimmten XML-Datei falsch ist. Ich werde es der Einfachheit halber hier einfügen
<% [task[:design_front], task[:design_back]].compact.each do |img_data| %>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:eastAsia="Times New Roman" w:hAnsi="Arial" w:cs="Arial" />
<w:noProof />
<w:sz w:val="18" />
<w:szCs w:val="18" />
<w:lang w:eastAsia="ru-RU" />
</w:rPr>
<w:drawing>
<wp:inline distT="0" distB="0" distL="0" distR="0">
<wp:extent cx="<%= img_data[:width] * 7400 %>" cy="<%= img_data[:height] * 7400 %>" />
<wp:effectExtent l="0" t="0" r="0" b="0" />
<wp:cNvGraphicFramePr>
<a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="0" />
</wp:cNvGraphicFramePr>
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:nvPicPr>
<pic:cNvPicPr>
<a:picLocks noChangeAspect="0" noChangeArrowheads="0" />
</pic:cNvPicPr>
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="<%= img_data[:id] %>" cstate="print">
<a:extLst>
<a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
<a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0" />
</a:ext>
</a:extLst>
</a:blip>
</pic:blipFill>
<pic:spPr bwMode="auto">
<a:xfrm>
<a:off x="0" y="0" />
<a:ext cx="<%= img_data[:width] * 7400 %>" cy="<%= img_data[:width] * 7400 %>" />
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst />
</a:prstGeom>
<a:noFill />
<a:ln>
<a:noFill />
</a:ln>
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</wp:inline>
</w:drawing>
</w:r>
<% end %>
Ich habe versucht, wiederhergestellte Datei mit meiner Datei zu vergleichen, aber ich habe keine entscheidenden Unterschiede. Ich habe diesen Unterschied jetzt nicht, aber ich kann ihn bei Bedarf reproduzieren.
Kann mir jemand den Weg zeigen? :) Was mache ich falsch?
UPDATE Ich habe versucht, Korrekturen vorzunehmen, vorgeschlagen von Martin P., aber kein Glück. Hier ist ein diff zwischen meiner generierte Datei und wiederhergestellter Version (rechts gestellt)
Ich habe festgestellt, dass einige ungültige Unicode-Escape-Sequenzen die Datei ruinieren können. Überprüfen Sie, ob Ihre generierten XML-Dateien "\ uXXXX" enthalten. (wobei X hexadezimal ist, natürlich) –