首页 > 解决方案 > 如何将pdf导出到xls中的标签命名

问题描述

我有一个包含许多表单域的 PDF 表单。我的要求是将表单数据(其中一些)导出为网络驱动器上的 excel(xls)格式,该驱动器正在被另一个进程(我无权访问或更改代码)拾取并使用以加载到单击 PDF 上的按钮时使用 Acrobat Javascript 的数据库。由于这是一种分布式形式并且网络驱动器很常见,因此设置与数据库的 ODBC 连接没有意义,我也无权这样做。

我遇到的问题是:

  1. 我需要专门命名工作表,以便该过程正确处理 xls 文件。
  2. 我需要在不提示用户的情况下将信息保存到网络驱动器,下面的代码就是这样做的。
  3. 导出到 xls 时,fieldNames 似乎丢失了空格。

到目前为止,我尝试过的任何事情都没有奏效,我所提供的任何参考资料都没有提供此类信息。我可以将数据推送到 .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});

提供的任何帮助或建议将不胜感激!

标签: acrobatacrobat-sdk

解决方案


更新(对于遇到此需求的任何其他人)。

我确定使用上述方法的选项卡名称与保存名称相同。我遇到的另一个问题是 xls 文件实际上是一个带有 xls 扩展名的 csv。为了解决这个问题,我决定导出一个我正在格式化的 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'});

问题是这会提示用户将文件保存在哪里,我想要一个静默的特定位置,所以我最终做了以下操作来代替上面的创建和导出对象,以静默输出一个 txt 文件而不提示用户:

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) 以静默输出。


推荐阅读