pembuatan dokumen hanya berfungsi pertama kali

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. masukkan deskripsi gambar di sini

Properti untuk file ini adalah-> (CRC dalam versi yang berfungsi adalah: 44D3906C) masukkan deskripsi gambar di sini

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?


person Karl    schedule 28.05.2014    source sumber
comment
Bisakah Anda memberikan rincian lebih lanjut tentang apa yang sebenarnya terjadi? Apa CRC yang salah? Apakah Anda mematikan aplikasi atau hanya memindahkannya ke latar belakang? dll, dll, dll... Sangat sulit untuk membantu mengatasi masalah yang tidak dapat kita lihat.   -  person Cerbrus    schedule 28.05.2014


Jawaban (2)


Terima kasih telah memposting tentang kesalahan tersebut. Ada beberapa masalah dengan jszip.js yang saya temui ketika saya mengembangkan Open XML SDK untuk JavaScript.

Di tautan berikut, terdapat contoh aplikasi javascript yang mendemonstrasikan pembuatan dokumen.

Buka XML SDK untuk Demo JavaScript

Dalam aplikasi tersebut Anda dapat menyimpan beberapa DOCX, satu demi satu, dan tidak rusak.

Untuk mengatasi masalah ini, saya harus dapat memproduksi ulang secara lokal. Mungkin Anda dapat menggunakan aplikasi web kecil yang berfungsi itu dan mengganti bagian-bagiannya dengan bagian-bagian Anda hingga menghasilkan file yang tidak valid?

Selamat, Eric

P.S. Saya bepergian dan memiliki akses terputus-putus ke internet. Jika Anda dapat melanjutkan utas di OpenXmlDeveloper.org, maka ini akan membantu saya menjawab lebih cepat. :-)

person Eric White    schedule 29.05.2014

Apa yang membuatnya berhasil bagi saya adalah mengubah cara menambahkan gambar (Bagian) ke dokumen. Saya menggunakan tipe "biner" untuk menambahkan gambar ke dokumen. Saya mengubahnya menjadi "base64"
Jadi saya mengubah sumbernya dari:

mydoc.addPart( "/word/"+reltarget, openXml.contentTypes.png, "binary", fotodata );  // add Image Part to doc

to:

mydoc.addPart( "/word/"+reltarget, openXml.contentTypes.png, "base64", window.btoa(fotodata) );                 // add Image Part to doc
person Karl    schedule 06.06.2014