Saya menggunakan openxml di aplikasi seluler HTML5 saya untuk menghasilkan dokumen Word di perangkat seluler. Secara umum openxml berfungsi dengan baik dan mudah, tetapi saya mengalami masalah yang mengganggu. Pembuatan dokumen hanya berfungsi pertama kali setelah saya memulai aplikasi. Kali ini saya dapat membuka dan melihat dokumen tersebut. Memulai ulang aplikasi berarti: - Menyebarkan ulang dari mesin pengembangan - Menghapus aplikasi dari panel tugas (menyingkirkannya; saya berasumsi aplikasi tersebut dihapus?)
Kali kedua saya menerima pesan bahwa dokumen tersebut rusak dan saya tidak dapat melihat file tersebut
PEMBARUAN: Saya tidak dapat mereproduksi perilaku ini ketika saya menjalankan aplikasi yang terhubung ke debugger jarak jauh tanpa menetapkan breakpoint. Melakukannya dengan cara ini saya selalu mendapatkan dokumen kerja.
Saya tidak membuat perbedaan apakah saya melakukan perubahan apa pun pada dokumen atau tidak. Cukup buka dan simpan, ulangi kesalahan ini.
Setelah melakukan beberapa penelitian saya menemukan bahwa struktur file docx.zip yang berfungsi dan file yang rusak adalah sama. Mereka juga memiliki panjang file yang sama. Tetapi di docx yang rusak ada beberapa file. Saya menemukan beberapa file memiliki CRC yang salah/tidak valid. Lihat di sini contoh ketika mencoba mengeluarkan file yang rusak dari zip. File lain berfungsi seperti yang diharapkan.
Properti untuk file ini adalah-> (CRC dalam versi yang berfungsi adalah: 44D3906C)
Kode untuk memproses template dokumen:
/*
* Process the template
*/
function processTemplate(doc64, callback)
{
"use strict";
console.log("PROCESS TEMPLATE");
var XAttribute = Ltxml.XAttribute;
var XCData = Ltxml.XCData;
var XComment = Ltxml.XComment;
var XContainer = Ltxml.XContainer;
var XDeclaration = Ltxml.XDeclaration;
var XDocument = Ltxml.XDocument;
var XElement = Ltxml.XElement;
var XName = Ltxml.XName;
var XNamespace = Ltxml.XNamespace;
var XNode = Ltxml.XNode;
var XObject = Ltxml.XObject;
var XProcessingInstruction = Ltxml.XProcessingInstruction;
var XText = Ltxml.XText;
var XEntity = Ltxml.XEntity;
var cast = Ltxml.cast;
var castInt = Ltxml.castInt;
var W = openXml.W;
var NN = openXml.NoNamespace;
var wNs = openXml.wNs;
var doc = new openXml.OpenXmlPackage(doc64);
// add a paragraph to the beginning of the document.
var body = doc.mainDocumentPart().getXDocument().root.element(W.body);
var tpl_row = ((doc.mainDocumentPart().getXDocument().descendants(W.tbl)).elementAt(1).descendants(W.tr)).elementAt(2);
var newrow = new XElement(tpl_row);
doc.mainDocumentPart().getXDocument().descendants(W.tbl).elementAt(1).add(newrow);
// callback(doc);
var mod_file = null;
var newfile;
var path;
if (doc != null && doc != undefined ) {
mod_file = doc.saveToBlob();
// Start writing document
path = "Templates";
newfile = "Templates/Bau.docx";
console.log("WRITE TEMPLATE DOCUMENT");
fs.root.getFile("Templates/" + "MyGenerated.docx", {create: true, exclusive: false},
function(fileEntry)
{
fileEntry.createWriter(
function(fileWriter)
{
fileWriter.onwriteend = function(e) {
console.log("TEMPLATE DOCUMENT WRITTEN:"+e.target.length);
};
fileWriter.onerror = function(e) {
console.log("ERROR writing DOCUMENT:" + e.code + ";" + e.message);
};
var blobreader = new FileReader();
blobreader.onloadend = function()
{
fileWriter.write(blobreader.result); // reader.result contains the contents of blob as a typed array
};
blobreader.readAsArrayBuffer(mod_file);
},
null);
}, null);
};
Adakah ide apa yang saya lakukan salah?