【问题标题】:How to name tabs in pdf export to xls如何将pdf导出到xls中的标签命名
【发布时间】:2019-10-03 05:57:00
【问题描述】:

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

我遇到的问题是:

  1. 我需要专门命名工作表,以便进程正确处理 xls 文件。
  2. 我需要在不提示用户的情况下将信息保存到网络驱动器,下面的代码就是这样做的。
  3. 字段名称在导出到 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。

下面是我的代码的一个小sn-p:

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});

我们将不胜感激任何帮助或建议!

【问题讨论】:

    标签: acrobat acrobat-sdk


    【解决方案1】:

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

    我确定使用上述方法的选项卡名称与保存名称相同。我遇到的另一个问题是 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) 以静默输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2015-01-30
      相关资源
      最近更新 更多