Javascript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript相关的知识,希望对你有一定的参考价值。

我已经从Bluebeam(强大的PDF编辑器)创建现有邮票的成功案例中受益匪浅。我有一个带有一个自定义文本字段的图章,该文本字段具有一个带有预定选项的下拉菜单。戳记还具有其他几个文本字段,其中一些字段允许用户输入数据,而另一些文本字段可以提取数据-当前日期和用户名。

所有这些都很好,但是我想添加带有预定选项的第二个文本字段,似乎没有办法做到这一点。

该软件的工作方式,每当将图章首次放置到PDF上时,都会运行一个“计算” javascript。计算代码创建UI,供用户输入日期。计算代码引用了“ stampcode” javascript。“ stampcode”引用了图章本身中的特定元素(也是PDF文件)。

我想我已经正确设置了印章代码。我认为计算代码是需要编辑的。我觉得这是一个相当简单的过程,我只是一个相当新手的编码人员,真的不知道从哪里开始。我花了大约4个小时来尝试调整计算代码,但运气不佳。任何帮助将不胜感激。 (我正在使用Visual Studio代码进行编辑)。

邮政编码:

    var builder = 

 // These map to Text Fields in the Stamp
 textBoxes :
 [
   field:"Client", description:"Client:", default:function()  return "";  ,
   field:"Project_Number", description:"Project No.:", default:function()  return "";  ,
   field:"Expense_Date", description:"Date of Exp.:", default:function()  return "";  ,
   field:"Markup", description:"Markup %:", default:function()  "";  ,
   field:"CheckedBy", description:"Checked by:", default:function()  return Collab.user;  ,
   field:"Date", description:"Date:", default:function() 
    
  var curDate = new Date();
  return (curDate.getMonth() + 1) + "/" + curDate.getDate() + "/" + curDate.getFullYear();
   
  , 
 ],
  // This maps to a Radio Group in the PDF named 'Status'
 radioGroup : "Status", 
 radioButtons :
 [
  // value maps to the 'Choice' of each radio button in the group, description will show on the dialog
   value:"Approved", description:"Approved" , 
   value:"Revise", description:"Revise" ,
   value:"Rejected", description:"Rejected" 
 ],
 // This maps to a Popup Group in the PDF named 'Reimburse' 
 popupGroup: "Reimburse",
 listItems :
 [
  popupItems :
   
    //list of items of Popup menu, positive number indicates default selection
    "XXX": -1,
    "XXX": -1,
    "DC": -1,
    "CC": -1
   
  
 ],
 // This maps to a Popup Group in the PDF named 'Service' 
 popupGroup: "Service",
 listItems :
 [
  popupItems :
   
    //list of items of Popup menu, positive number indicates default selection
    "00": -1,
    "10": -1,
    "20": -1,
    "30": -1,
    "40": -1,
    "50": -1,
    "51": -1,
    "55": -1,
    "60": -1,
    "65": -1,
    "70": -1,
    "80": -1,
    "81": -1,
    "90": -1,
    "91": -1,
    "99": -1
   
  
 ],
  // This maps to a Radio Group in the PDF named 'Status'
 radioGroup : "Status", 
 radioButtons :
 [
  // value maps to the 'Choice' of each radio button in the group, description will show on the dialog
   value:"Billable", description:"Billable" , 
   value:"Not Billable", description:"Not Billable" 
 ],
 radioErrorMsg : "Please select a status",

计算代码:

// WARNING: DO NOT EDIT
// SEE GLOBAL JAVASCRIPT SECTION FOR CUSTOMIZATION

if (event.source.forReal)

 var stampDialog = CreateDialog(builder);
 app.execDialog(stampDialog); 

 this.getField(builder.radioGroup).value = stampDialog.radioselection;
 this.getField(builder.popupGroup).value = stampDialog.popupSelection;

 for (var i = 0; i < builder.textBoxes.length; ++i)
 
  var t = builder.textBoxes[i];
  this.getField(t.field).value = stampDialog.textBoxResults[i];
 


function CreateDialog(dialogBuilder)

 var sd = new Object();
 sd.builder = dialogBuilder;
 sd.radioSelection = "";
 sd.popupSelection = "";
 sd.textBoxResults = new Array();

 var popupElements = new Array();

 popupElements[0] =
 
  type: "popup",
  item_id: "popupItems",
  field: sd.builder.popupGroup,
  width: 250
 ;

 var popupCluster =
 
  type: "cluster",
  name: builder.popupGroup,
  elements: popupElements
 ;

 var stateElements = new Array();

 for (var i = 0; i < dialogBuilder.radioButtons.length; ++i)
 
  var c = dialogBuilder.radioButtons[i];
  stateElements[i] = 
   
    type: "radio",
    name: c.description,
    item_id: "rad" + i,
    group_id: "grp1"    
   ;  
  

 var stateCluster = 
 
  type: "cluster",
  name: "Status",
  alignment: "align_center",
  align_children: "align_distribute",  
  elements: stateElements
 ;

 var optionsElements = new Array(); 

 for (var i = 0; i < dialogBuilder.textBoxes.length; ++i)
 
  var view = new Object();  
  view.type = "view";
  view.align_children = "align_row";
  view.elements = new Array();

  var t = dialogBuilder.textBoxes[i];

  var s = new Object();
  s.type = "static_text";
  s.item_id = "sta" + i;
  s.name = t.description;
  s.width = 90;  

  var e = new Object();
  e.type = "edit_text";
  e.item_id = "edt" + i;
  e.width = 150;

  view.elements[0] = s;
  view.elements[1] = e;  

  optionsElements[i] = view;
 

 var optionsCluster = 
 
  type: "cluster",
  name: "Options",
  elements: optionsElements
 ;

 sd.initialize = function(dialog)
 
  var init = new Object();

  for (var i = 0; i < this.builder.textBoxes.length; ++i)
  
   var t = this.builder.textBoxes[i];
   var id = "edt" + i;   
   init[id] = t.default();
  

  dialog.load(init);
  dialog.load(this.builder.listItems[0]);  
 ;

 sd.commit = function(dialog)
 
  var res = dialog.store();

  for (var i = 0; i < this.builder.radioButtons.length; ++i)
  
   var c = this.builder.radioButtons[i];
   var id = "rad" + i;
   if (res[id] == true)
   
    this.radioSelection = c.value;
    break;
   
    

  for (var i = 0; i < this.builder.textBoxes.length; ++i)
  
   var t = this.builder.textBoxes[i];
   var id = "edt" + i;
   this.textBoxResults[i] = res[id];
  

  for (var i in res["popupItems"])
  if (res["popupItems"][i] >0)
  
   this.popupSelection = i;
  
 ;

 sd.validate = function(dialog)
 
  var res = dialog.store();
  for (var i = 0; i < this.builder.radioButtons.length; ++i)
  
   var c = this.builder.radioButtons[i];
   var id = "rad" + i;
   if (res[id] == true)
    return true;
  

  app.alert(this.builder.radioErrorMsg);
  return false;
 ;

 sd.description = 
 
  name: "Stamp Dialog",
  elements:
  [
   
    type: "view",
    align_children: "align_fill",
    elements:
    [
     popupCluster,
     stateCluster,
     optionsCluster
    ]
   ,
   
    type: "ok"
   
  ]
 ;

 return sd;

答案

我也很难理解Bluebeam中的Stamps API。对我来说,最大的帮助就是跌入了Adobe Javascript API reference。这些图章的大多数API是Adobe标准的一部分。它不特定于Blubeam。

我将您的代码恢复为Bluebeam网站上提供的custom stamp template的参考代码。

计算脚本

// WARNING: DO NOT EDIT
// SEE GLOBAL JAVASCRIPT SECTION FOR CUSTOMIZATION

if (event.source.forReal) 
  var stampDialog = CreateDialog(builder);
  app.execDialog(stampDialog);

  this.getField(builder.radioGroup).value = stampDialog.radioSelection;
  //Popup1
  this.getField(builder.popupGroup).value = stampDialog.popupSelection;
  //Popup2
  this.getField(builder.popupGroup2).value = stampDialog.popupSelection2;

  for (var i = 0; i < builder.textBoxes.length; ++i) 
    var t = builder.textBoxes[i];
    this.getField(t.field).value = stampDialog.textBoxResults[i];
  


function CreateDialog(dialogBuilder) 
  var sd = new Object();
  sd.builder = dialogBuilder;
  sd.radioSelection = "";
  //Popup1
  sd.popupSelection = "";
  //Popup2
  sd.popupSelection2 = "";
  sd.textBoxResults = new Array();

  var popupElements = new Array();
  var popupElements2 = new Array();

  //Popup1
  popupElements[0] = 
    type: "popup",
    item_id: "ppi1",
    field: sd.builder.popupGroup,
    width: 250
  ;

  //Popup2
  popupElements2[0] = 
    type: "popup",
    item_id: "ppi2",
    field: sd.builder.popupGroup2,
    width: 250
  ;

  var popupCluster = 
    type: "cluster",
    name: builder.popupGroup,
    elements: popupElements
  ;

  var popupCluster2 = 
    type: "cluster",
    name: builder.popupGroup2,
    elements: popupElements2
  ;

  var stateElements = new Array();

  for (var i = 0; i < dialogBuilder.radioButtons.length; ++i) 
    var c = dialogBuilder.radioButtons[i];
    stateElements[i] = 
      type: "radio",
      name: c.description,
      item_id: "rad" + i,
      group_id: "grp1"
    ;
  

  var stateCluster = 
    type: "cluster",
    name: "Status",
    alignment: "align_center",
    align_children: "align_distribute",
    elements: stateElements
  ;

  var optionsElements = new Array();

  for (var i = 0; i < dialogBuilder.textBoxes.length; ++i) 
    var view = new Object();
    view.type = "view";
    view.align_children = "align_row";
    view.elements = new Array();

    var t = dialogBuilder.textBoxes[i];

    var s = new Object();
    s.type = "static_text";
    s.item_id = "sta" + i;
    s.name = t.description;
    s.width = 90;

    var e = new Object();
    e.type = "edit_text";
    e.item_id = "edt" + i;
    e.width = 150;

    view.elements[0] = s;
    view.elements[1] = e;

    optionsElements[i] = view;
  

  var optionsCluster = 
    type: "cluster",
    name: "Options",
    elements: optionsElements
  ;

  sd.initialize = function(dialog) 
    var init = new Object();

    for (var i = 0; i < this.builder.textBoxes.length; ++i) 
      var t = this.builder.textBoxes[i];
      var id = "edt" + i;
      init[id] = t.default();
    

    dialog.load(init);
    dialog.load(this.builder.listItems[0]);
    dialog.load(this.builder.listItems2[0]);
  ;

  sd.commit = function(dialog) 
    var res = dialog.store();

    for (var i = 0; i < this.builder.radioButtons.length; ++i) 
      var c = this.builder.radioButtons[i];
      var id = "rad" + i;
      if (res[id] == true) 
        this.radioSelection = c.value;
        break;
      
    

    for (var i = 0; i < this.builder.textBoxes.length; ++i) 
      var t = this.builder.textBoxes[i];
      var id = "edt" + i;
      this.textBoxResults[i] = res[id];
    

    //Popup1
    for (var i in res["ppi1"])
      if (res["ppi1"][i] > 0) 
        this.popupSelection = i;
      

    //Popup2
    for (var i in res["ppi2"])
      if (res["ppi2"][i] > 0) 
        this.popupSelection2 = i;
      
  ;

  sd.validate = function(dialog) 
    var res = dialog.store();
    for (var i = 0; i < this.builder.radioButtons.length; ++i) 
      var c = this.builder.radioButtons[i];
      var id = "rad" + i;
      if (res[id] == true) return true;
    `enter code here`

    app.alert(this.builder.radioErrorMsg);
    return false;
  ;

  sd.description = 
    name: "Stamp Dialog",
    elements: [
      
        type: "view",
        align_children: "align_fill",
        elements: [popupCluster, popupCluster2, stateCluster, optionsCluster]
      ,
      
        type: "ok"
      
    ]
  ;

  return sd;

邮递区号

    var builder = 
  // These map to Text Fields in the Stamp
  textBoxes: [
    
      field: "CheckedBy",
      description: "Checked by:",
      default: function() 
        return Collab.user;
      
    ,
    
      field: "Date",
      description: "Date:",
      default: function() 
        var curDate = new Date();
        return (
          curDate.getMonth() +
          1 +
          "/" +
          curDate.getDate() +
          "/" +
          curDate.getFullYear()
        );
      
    ,
    
      field: "Submittal",
      description: "Submittal #:",
      default: function() 
        return "";
      
    ,
    
      field: "Spec",
      description: "Spec #:",
      default: function() 
        return "";
      
    
  ],
  // This maps to a Radio Group in the PDF named 'Status'
  radioGroup: "Status",
  radioButtons: [
    // value maps to the 'Choice' of each radio button in the group, description will show on the dialog
     value: "Approved", description: "Approved" ,
     value: "Revise", description: "Revise" ,
     value: "Rejected", description: "Rejected" 
  ],
  radioErrorMsg: "Please select a status",
  // This maps to a Popup Group in the PDF named 'Project'
  popupGroup: "Project",
  listItems: [
    
      ppi1: 
        //list of items of Popup menu, positive number indicates default selection
        "Project 1": -1,
        "Project 2": -1,
        "Project 3": -1,
        "Project 4": -1,
        "Project 5": -1
      
    
  ],
  popupGroup2: "Service",
  listItems2: [
    
      ppi2: 
        //list of items of Popup menu, positive number indicates default selection
        "1": -1,
        "2": -1,
        "3": -1,
        "4": -1,
        "5": -1
      
    
  ]
;

以上是关于Javascript的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript 对下拉列表进行排序

javascript中怎样添加下拉列表框的option到指定位置

使用 javascript 在下拉列表中保存值

如何使用Javascript根据先前的下拉值显示第二个下拉列表

使用下拉列表的 Javascript 计算

如何创建多个从同一个数组中获取值的动态下拉列表,而无需更改 Javascript 中的其他下拉列表