Мое предположение: у вас есть интерактивный документ в формате PDF с полями AcroForm, похожими на submit_me.pdf :
[/g3]
Главное отличие состоит в том, что у меня есть разные кнопки в форме:
SubmitForm пример показывает, как кнопки были добавлены в существующую форму. Обратите внимание, что вариантов больше, чем описанных в этом примере.
Например:
Чтобы показать, чего ожидать, когда вы совершаете форму, я написал сервлет ShowData . Этот сервлет возвращает байты, отправленные на сервер.
В случае POST:
personal.loginname=jdoe&personal.name=John+Doe&personal.password=test&personal.reason=reason&post.x=29&post.y=7
Обратите внимание, что я также определил кнопку таким образом, чтобы координата мой клик передается на сервер. Вы, вероятно, не нуждаетесь в этом.
В случае FDF:
%FDF-1.2
%âãÏÓ
1 0 obj
<><><><><>]/T(personal)>>]/ID[<1205D069D1D6AE37665B6FF7EEA65414>]>>/Type/Catalog>>
endobj
trailer
<>
%%EOF
В случае XFDF:
jdoe John Doe test Reason
В идеальном мире, это было бы вашим решением. Он описан в ISO-32000-1, который является всемирным стандартом для PDF. Тем не менее: многие люди начали использовать дерьмовые средства просмотра PDF, которые не поддерживают эту функциональность, поэтому, если вы хотите использовать это решение, вам нужно будет убедиться, что люди используют достойный просмотрщик PDF в качестве своего браузера.
Другой альтернативный способ:
let newObj = JSON.parse(JSON.stringify(oldObj))
Вы можете попробовать использовать синтаксис распространения
var myObject = {
label: 'Table',
options: ['legs'],
params: {
colour: 'red',
feet: {
colour: 'white',
shape: 'round'
}
}
}
function newObject(obj) {
// sought-after syntax here
return ({...obj,params:{...obj.params,colour:"green",feet: {...obj.params.feet,shape:"square"}}})
}
console.log(newObject(myObject))
Без вложения, который можно легко сделать с помощью Object.assign
:
Object.assign({}, obj, { label: "New One" })
или с помощью расширения объектов:
{ ...obj, label: "New One" }
для поддержки вложенных объектов / массивов, вы должны вручную объединить объекты рекурсивно:
function merge(target, changes) {
const result = {};
for(const [key, value] of Object.entries(target).concat(Object.entries(changes))) {
if(Array.isArray(value)) {
// TODO
} else if(typeof value === "object") {
result[key] = merge(result[key] || {}, value);
} else {
result[key] = value;
}
}
return result;
}