Как назвать вкладки в pdf экспорт в xls - PullRequest
0 голосов
/ 03 октября 2019

У меня есть PDF-форма, в которой много полей формы. Мое требование - экспортировать данные формы (некоторые из них в любом случае) в формат excel (xls) на сетевом диске, который выбирается и используется другим процессом (к которому у меня нет доступа или кода для изменения) для загрузки вбаза данных с использованием Acrobat Javascript при нажатии кнопки в PDF. Поскольку это распределенная форма и сетевой диск является обычным, настраивать соединения ODBC с базой данных не имело смысла, и у меня не было доступа для этого.

Проблемы, с которыми я сталкиваюсь:

  1. Мне нужно указать имя рабочей таблицы, чтобы процесс правильно обрабатывал файл xls.
  2. Мне нужно сохранить информацию на сетевой диск без запроса пользователя, как показано в приведенном ниже коде.
  3. Кажется, что поля fieldNames теряют пробелы при экспорте в xls.

Пока что ничего из того, что я пробовал, не сработало, и ни одна из ссылок, на которые я ходил, не дает такой информации. Я могу поместить данные в файлы .csv и .txt и попытаться создать новый отчет, например, такой:

var rep = new Report();
var values = "";
...
rep.writeText(values);

var docRep = rep.open("myreport.pdf");
docRep.saveAs("/c/temp/Upload.txt","com.adobe.acrobat.plain-text")
docRep.closeDoc(true);
app.alert("Upload File Saved", 3);

, но он допускает только расширение .txt, но не расширение xls или csv. Мне удалось экспортировать CSV другим способом.

Ниже приведен небольшой фрагмент моего кода:

var fieldNames = [];
var result ="";
fieldNames.push("Inn Code");
fieldValues.push('"' + this.getField("Hotel Info Inn Code").value + '"');
fieldNames.push("Business Unit");
fieldValues.push('"' + this.getField("Hotel Info Business Unit").value + '"');
for ( var i=0; i < fieldNames.length; i++ ) {
    result += (fieldNames[i] + "\t");
}
for ( var i=0; i < fieldValues.length; i++ ) {
    result += (fieldValues[i] + "\t");
}
this.createDataObject({cName: "Upload.xls", cValue: cMyC});
this.exportDataObject({cName: "Upload.xls", nLaunch: 0});

Буду признателен за любую помощь или предложения!

1 Ответ

0 голосов
/ 04 октября 2019

Обновление (для всех, кто сталкивается с этой необходимостью).

Я определил, что имя вкладки с помощью описанного выше метода совпадает с именем сохранения. Другая проблема, с которой я столкнулся, заключалась в том, что файл xls был действительно csv с расширением xls. Чтобы решить эту проблему, я решил экспортировать форматированный CSV-файл или текстовый файл и внешний процесс для переформатирования файла в формат xls.

var fieldNames = [];
var fieldValues = [];
var result = '';

// FIELD VALUES
fieldNames.push('"Column Name 1"');
fieldValues.push('\r\n' + '"' + this.getField("Field Name 1").value + '"');

fieldNames.push('"Column Name 2"');
fieldValues.push('"' + this.getField("Field Name 2").value + '"');

for ( var i=0; i < fieldNames.length; i++ ) {
    if (i != fieldNames.length-1){
        result += (fieldNames[i] + ",");
    } else {
        result += (fieldNames[i]);
    }
}

for ( var i=0; i < fieldValues.length; i++ ) {
    if (i != fieldValues.length-1){
        result += (fieldValues[i] + ",");
    } else {
        result += (fieldValues[i]);
    }
}

Для вывода файла CSV я использовал следующее:

this.createDataObject('UploadFile.csv', result);
this.exportDataObject({ cName:'UploadFile.csv', nLaunch:'0'});

Проблема заключается в том, что это подсказывает пользователю, где сохранить файл, и я хотел указать конкретное место в беззвучном режиме, поэтому вместо описанного выше объекта создания и экспорта я сделал следующее, чтобы вывести текстовый файл в автоматическом режиме без запросапользователь:

var rep = new Report();
rep.writeText(result);
var docRep = rep.open("myreport.pdf");
docRep.saveAs("/c/temp/UploadFile.txt","com.adobe.acrobat.plain-text")
docRep.closeDoc(true);

Вам нужно будет перейти в меню «Редактирование»> «Установки»> «Безопасность» («Улучшено»), а затем выбрать папку вывода (C: \ Temp) в моем случае для вывода без вывода сообщений, если вы решили использовать этот метод. .

...