downloading a docx file from ajaxResponse
up vote
3
down vote
favorite
So I tried to download a docx document as a report . by converting ajax response to a blob then an url ! the result is a document word that display a message , " we're sorry . we can't open because we found a problem with it's content .
there the main :
onDownloadReport: function (oEvent) {
var oAjaxBody = {
SessionId: this.getModel("sessionModel").getData().SessionId,
CustomerName: encodeURIComponent(this.getModel("sessionModel").getData().CustomerName.split("n")[0]),
TenantInfo: encodeURIComponent(this.getModel("sessionModel").getData().TenantInfo)
};
var sServiceUrl = "/SDC_XS_TEMP/APPL/SDC/services/serviceRuntime/xsjs/SDC_REPORT_GENERATE_MM.xsjs";
var me = this;
$.ajax({
url: sServiceUrl,
type: "POST",
responseType:'arraybuffer',
contentType: "application/json",
data: JSON.stringify(oAjaxBody),
// dataType: "json",
success: function (oAjaxResponse) {
var content = oAjaxResponse;
var fileName = 'rapport.docx'; // You can use the .txt extension if you want
me.downloadwithpost(fileName, content);
},
error: function (oError) {
console.log("failure");
}
});
and this is the function
downloadwithpost: function (filename, content) {
var link = document.createElement('a');
var bytes = new Array(content.length);
// var bytes = new Array(content.length);
for (var i = 0; i < content.length; i++) {
bytes[i] = content.charCodeAt(i);
}
var byteArray = new Uint8Array(bytes);
var blob = new Blob([byteArray], {
type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
});
var url = URL.createObjectURL(blob);
var oItem = {
documentId: url,
fileName: "rapport.docx",
thumbnailUrl: "",
url: url,
selected: true
};
var oUploadCollection = this.getView().byId("uploadCollection");
var newItem = new sap.m.UploadCollectionItem(oItem);
oUploadCollection.addItem(newItem);
oUploadCollection.downloadItem(newItem, true);
}
javascript ajax sapui5
add a comment |
up vote
3
down vote
favorite
So I tried to download a docx document as a report . by converting ajax response to a blob then an url ! the result is a document word that display a message , " we're sorry . we can't open because we found a problem with it's content .
there the main :
onDownloadReport: function (oEvent) {
var oAjaxBody = {
SessionId: this.getModel("sessionModel").getData().SessionId,
CustomerName: encodeURIComponent(this.getModel("sessionModel").getData().CustomerName.split("n")[0]),
TenantInfo: encodeURIComponent(this.getModel("sessionModel").getData().TenantInfo)
};
var sServiceUrl = "/SDC_XS_TEMP/APPL/SDC/services/serviceRuntime/xsjs/SDC_REPORT_GENERATE_MM.xsjs";
var me = this;
$.ajax({
url: sServiceUrl,
type: "POST",
responseType:'arraybuffer',
contentType: "application/json",
data: JSON.stringify(oAjaxBody),
// dataType: "json",
success: function (oAjaxResponse) {
var content = oAjaxResponse;
var fileName = 'rapport.docx'; // You can use the .txt extension if you want
me.downloadwithpost(fileName, content);
},
error: function (oError) {
console.log("failure");
}
});
and this is the function
downloadwithpost: function (filename, content) {
var link = document.createElement('a');
var bytes = new Array(content.length);
// var bytes = new Array(content.length);
for (var i = 0; i < content.length; i++) {
bytes[i] = content.charCodeAt(i);
}
var byteArray = new Uint8Array(bytes);
var blob = new Blob([byteArray], {
type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
});
var url = URL.createObjectURL(blob);
var oItem = {
documentId: url,
fileName: "rapport.docx",
thumbnailUrl: "",
url: url,
selected: true
};
var oUploadCollection = this.getView().byId("uploadCollection");
var newItem = new sap.m.UploadCollectionItem(oItem);
oUploadCollection.addItem(newItem);
oUploadCollection.downloadItem(newItem, true);
}
javascript ajax sapui5
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
So I tried to download a docx document as a report . by converting ajax response to a blob then an url ! the result is a document word that display a message , " we're sorry . we can't open because we found a problem with it's content .
there the main :
onDownloadReport: function (oEvent) {
var oAjaxBody = {
SessionId: this.getModel("sessionModel").getData().SessionId,
CustomerName: encodeURIComponent(this.getModel("sessionModel").getData().CustomerName.split("n")[0]),
TenantInfo: encodeURIComponent(this.getModel("sessionModel").getData().TenantInfo)
};
var sServiceUrl = "/SDC_XS_TEMP/APPL/SDC/services/serviceRuntime/xsjs/SDC_REPORT_GENERATE_MM.xsjs";
var me = this;
$.ajax({
url: sServiceUrl,
type: "POST",
responseType:'arraybuffer',
contentType: "application/json",
data: JSON.stringify(oAjaxBody),
// dataType: "json",
success: function (oAjaxResponse) {
var content = oAjaxResponse;
var fileName = 'rapport.docx'; // You can use the .txt extension if you want
me.downloadwithpost(fileName, content);
},
error: function (oError) {
console.log("failure");
}
});
and this is the function
downloadwithpost: function (filename, content) {
var link = document.createElement('a');
var bytes = new Array(content.length);
// var bytes = new Array(content.length);
for (var i = 0; i < content.length; i++) {
bytes[i] = content.charCodeAt(i);
}
var byteArray = new Uint8Array(bytes);
var blob = new Blob([byteArray], {
type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
});
var url = URL.createObjectURL(blob);
var oItem = {
documentId: url,
fileName: "rapport.docx",
thumbnailUrl: "",
url: url,
selected: true
};
var oUploadCollection = this.getView().byId("uploadCollection");
var newItem = new sap.m.UploadCollectionItem(oItem);
oUploadCollection.addItem(newItem);
oUploadCollection.downloadItem(newItem, true);
}
javascript ajax sapui5
So I tried to download a docx document as a report . by converting ajax response to a blob then an url ! the result is a document word that display a message , " we're sorry . we can't open because we found a problem with it's content .
there the main :
onDownloadReport: function (oEvent) {
var oAjaxBody = {
SessionId: this.getModel("sessionModel").getData().SessionId,
CustomerName: encodeURIComponent(this.getModel("sessionModel").getData().CustomerName.split("n")[0]),
TenantInfo: encodeURIComponent(this.getModel("sessionModel").getData().TenantInfo)
};
var sServiceUrl = "/SDC_XS_TEMP/APPL/SDC/services/serviceRuntime/xsjs/SDC_REPORT_GENERATE_MM.xsjs";
var me = this;
$.ajax({
url: sServiceUrl,
type: "POST",
responseType:'arraybuffer',
contentType: "application/json",
data: JSON.stringify(oAjaxBody),
// dataType: "json",
success: function (oAjaxResponse) {
var content = oAjaxResponse;
var fileName = 'rapport.docx'; // You can use the .txt extension if you want
me.downloadwithpost(fileName, content);
},
error: function (oError) {
console.log("failure");
}
});
and this is the function
downloadwithpost: function (filename, content) {
var link = document.createElement('a');
var bytes = new Array(content.length);
// var bytes = new Array(content.length);
for (var i = 0; i < content.length; i++) {
bytes[i] = content.charCodeAt(i);
}
var byteArray = new Uint8Array(bytes);
var blob = new Blob([byteArray], {
type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
});
var url = URL.createObjectURL(blob);
var oItem = {
documentId: url,
fileName: "rapport.docx",
thumbnailUrl: "",
url: url,
selected: true
};
var oUploadCollection = this.getView().byId("uploadCollection");
var newItem = new sap.m.UploadCollectionItem(oItem);
oUploadCollection.addItem(newItem);
oUploadCollection.downloadItem(newItem, true);
}
javascript ajax sapui5
javascript ajax sapui5
edited Nov 19 at 10:31
Eugene Mihaylin
9621424
9621424
asked Nov 19 at 9:59
Alexis sanchez
161
161
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30
add a comment |
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
Take a look at this example, I worked with an hexadecimal data format, but you can change it as you see fit. Let me know if you need any help with this example or have any questions.
doAfterSuccess: function(result, fileName, fileType) {
var filedata = result.ARRAY[0].FILEDATA; // get data from response
// ------------------------------- hex data, rapport, docx
var createdFile = this.createFile(filedata, fileName, fileType);
this.downloadFile(createdFile, fileName, fileType);
},
createFile: function(hexContent, filename, type) {
var data = this.convertHexToBinary(hexContent); // skip if your data is not hex
var file = new Blob([data], {
name: filename,
type: type
});
return file;
},
convertHexToBinary: function(hexContent) {
return new Uint8Array(hexContent.match(/.{2}/g).map(function(e)
{
return parseInt(e, 16);
}));
},
downloadFile: function(file, filename, type){
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename + "." + type;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
},
add a comment |
up vote
0
down vote
function downloadDoc(filename, sServiceUrl, oAjaxBody){
var xhr = new XMLHttpRequest();
xhr.open('POST', sServiceUrl, true);
xhr.responseType = 'blob';
xhr.send(JSON.stringify(oAjaxBody));
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
//$.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, filename);
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = filename;
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else {
console.log("failure");
}
}
}
}
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Take a look at this example, I worked with an hexadecimal data format, but you can change it as you see fit. Let me know if you need any help with this example or have any questions.
doAfterSuccess: function(result, fileName, fileType) {
var filedata = result.ARRAY[0].FILEDATA; // get data from response
// ------------------------------- hex data, rapport, docx
var createdFile = this.createFile(filedata, fileName, fileType);
this.downloadFile(createdFile, fileName, fileType);
},
createFile: function(hexContent, filename, type) {
var data = this.convertHexToBinary(hexContent); // skip if your data is not hex
var file = new Blob([data], {
name: filename,
type: type
});
return file;
},
convertHexToBinary: function(hexContent) {
return new Uint8Array(hexContent.match(/.{2}/g).map(function(e)
{
return parseInt(e, 16);
}));
},
downloadFile: function(file, filename, type){
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename + "." + type;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
},
add a comment |
up vote
0
down vote
Take a look at this example, I worked with an hexadecimal data format, but you can change it as you see fit. Let me know if you need any help with this example or have any questions.
doAfterSuccess: function(result, fileName, fileType) {
var filedata = result.ARRAY[0].FILEDATA; // get data from response
// ------------------------------- hex data, rapport, docx
var createdFile = this.createFile(filedata, fileName, fileType);
this.downloadFile(createdFile, fileName, fileType);
},
createFile: function(hexContent, filename, type) {
var data = this.convertHexToBinary(hexContent); // skip if your data is not hex
var file = new Blob([data], {
name: filename,
type: type
});
return file;
},
convertHexToBinary: function(hexContent) {
return new Uint8Array(hexContent.match(/.{2}/g).map(function(e)
{
return parseInt(e, 16);
}));
},
downloadFile: function(file, filename, type){
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename + "." + type;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
},
add a comment |
up vote
0
down vote
up vote
0
down vote
Take a look at this example, I worked with an hexadecimal data format, but you can change it as you see fit. Let me know if you need any help with this example or have any questions.
doAfterSuccess: function(result, fileName, fileType) {
var filedata = result.ARRAY[0].FILEDATA; // get data from response
// ------------------------------- hex data, rapport, docx
var createdFile = this.createFile(filedata, fileName, fileType);
this.downloadFile(createdFile, fileName, fileType);
},
createFile: function(hexContent, filename, type) {
var data = this.convertHexToBinary(hexContent); // skip if your data is not hex
var file = new Blob([data], {
name: filename,
type: type
});
return file;
},
convertHexToBinary: function(hexContent) {
return new Uint8Array(hexContent.match(/.{2}/g).map(function(e)
{
return parseInt(e, 16);
}));
},
downloadFile: function(file, filename, type){
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename + "." + type;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
},
Take a look at this example, I worked with an hexadecimal data format, but you can change it as you see fit. Let me know if you need any help with this example or have any questions.
doAfterSuccess: function(result, fileName, fileType) {
var filedata = result.ARRAY[0].FILEDATA; // get data from response
// ------------------------------- hex data, rapport, docx
var createdFile = this.createFile(filedata, fileName, fileType);
this.downloadFile(createdFile, fileName, fileType);
},
createFile: function(hexContent, filename, type) {
var data = this.convertHexToBinary(hexContent); // skip if your data is not hex
var file = new Blob([data], {
name: filename,
type: type
});
return file;
},
convertHexToBinary: function(hexContent) {
return new Uint8Array(hexContent.match(/.{2}/g).map(function(e)
{
return parseInt(e, 16);
}));
},
downloadFile: function(file, filename, type){
if (window.navigator.msSaveOrOpenBlob)
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename + "." + type;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
},
answered Nov 20 at 6:34
Matthijs Mennens
1,039216
1,039216
add a comment |
add a comment |
up vote
0
down vote
function downloadDoc(filename, sServiceUrl, oAjaxBody){
var xhr = new XMLHttpRequest();
xhr.open('POST', sServiceUrl, true);
xhr.responseType = 'blob';
xhr.send(JSON.stringify(oAjaxBody));
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
//$.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, filename);
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = filename;
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else {
console.log("failure");
}
}
}
}
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
add a comment |
up vote
0
down vote
function downloadDoc(filename, sServiceUrl, oAjaxBody){
var xhr = new XMLHttpRequest();
xhr.open('POST', sServiceUrl, true);
xhr.responseType = 'blob';
xhr.send(JSON.stringify(oAjaxBody));
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
//$.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, filename);
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = filename;
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else {
console.log("failure");
}
}
}
}
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
add a comment |
up vote
0
down vote
up vote
0
down vote
function downloadDoc(filename, sServiceUrl, oAjaxBody){
var xhr = new XMLHttpRequest();
xhr.open('POST', sServiceUrl, true);
xhr.responseType = 'blob';
xhr.send(JSON.stringify(oAjaxBody));
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
//$.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, filename);
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = filename;
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else {
console.log("failure");
}
}
}
}
function downloadDoc(filename, sServiceUrl, oAjaxBody){
var xhr = new XMLHttpRequest();
xhr.open('POST', sServiceUrl, true);
xhr.responseType = 'blob';
xhr.send(JSON.stringify(oAjaxBody));
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
//$.unblockUI();
if(xhr.status == 200) {
var blob = new Blob([xhr.response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
if (navigator.msSaveOrOpenBlob)
navigator.msSaveOrOpenBlob(blob, filename);
else {
var link = document.createElement('a');
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
link.href = downloadUrl;
link.style = "display: none";
link.download = filename;
document.body.appendChild(link);
link.click();
setTimeout(function(){
document.body.removeChild(link);
window.URL.revokeObjectURL(downloadUrl);
}, 100);
}
}
else {
console.log("failure");
}
}
}
}
edited Nov 20 at 8:10
answered Nov 19 at 10:19
Miller Cy Chan
1669
1669
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
add a comment |
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
so as params , we don't have an url , just an oAjaxResponse .
– Alexis sanchez
Nov 19 at 10:27
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
the major problem is to convert an oajax reponse to blob
– Alexis sanchez
Nov 19 at 10:40
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
Why use XMLHttpRequest? Please refer to stackoverflow.com/questions/17657184/…
– Miller Cy Chan
Nov 20 at 7:28
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372174%2fdownloading-a-docx-file-from-ajaxresponse%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Just wondering if the document is an existing document, or if you're generating it?
– Jorg
Nov 20 at 11:30