私は、docxファイルを生成することができる従来のRailsアプリケーションを持っています。これはXMLテンプレートを使用しているだけで、宝石ではありません。テンプレートはERB構文を使用して記述されます。生成されたdocxファイルが壊れています
問題は、Linux上のLibreOfficeが完全に開いても、生成されたファイルがMS Office Wordによって「破損している」とマークされていることです。しかし、MS Office Wordをリカバリした後も、コンテンツを失うことなくファイルを開くことができます。
pastebinに完全なXMLテンプレートを貼り付けます。
デバッグ中に、ブロックなしで、602行目から開始すると、すべて正常に動作します。だから私は、その特定のXML部分に何が間違っているのかを知ることはできません。私は私が私のファイルを回復したファイルを比較してみましたが、私は任意の決定的な違いを見ていない利便
<% [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 %>
のために右ここに貼り付けます。私は今はdiffを持っていませんが、必要ならばそれを再現することができます。
誰かが私に道を示すことができますか? :)私は間違って何をしていますか?
更新 私はMartin P.が提案した修正を試みましたが、運はありませんでした。ここでは私の知る限り見るように私の生成されたファイル間の差分であり、バージョンを回復(右側の回復)
ユニコードのエスケープシーケンスが無効になると、ファイルが破損することがあります。生成されたXMLファイルに '\ uXXXX'が含まれているかどうかを確認してください。 (Xは16進数字です) –