2016-10-17 8 views
0

Я работаю для друга, которому нужно манипулировать интерактивным PDF-файлом со следующими потребностями: есть 2 основных «слоя» и 2 кнопки. Когда я нажимаю кнопку1, отображается только слой1, когда я нажимаю кнопку2, слой2 является единственным видимым.Получение и обработка интерактивного документа PDF с помощью JS

Он может загружать javascript для каждой кнопки с действием, которое должно начинаться с щелчка, и это код, который я написал для него.

var layerToHideLabel = "testlayer1"; 
var layerToShowLabel = "testlayer2"; 

showField(layerToShowLabel); 
hideField(layerToHideLabel); 

function showField(fieldName){ 
    var field = null; 
    field = FindOCG(fieldName); 
    if(field != null){ 
     setVisibility(field,true); 
    } 
} 

function hideField(fieldName){ 
    var field = null; 
    field = FindOCG(fieldName); 
    if(field != null){ 
     setVisibility(field,false); 
    } 
} 

function setVisibility(field, status){ 
    field.state=status; 
} 

function FindOCG(cName) { 
    var aOCGs = this.getOCGs(); 
    for(var i=0; aOCGs && i<aOCGs.length;i++) { 
     if(aOCGs[i].name == cName) return aOCGs[i]; 
    } 
    return null; 
} 

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

this.getOCGs is not a function 

Я думаю, что проблема контекст связана, поскольку скрипт запускается нажатием кнопки, поэтому, возможно, this относится к кнопке, а не к документу.

Я пробовал много комбинаций, чтобы получить документ из OCG, без везения. Я пробовал документ, $ doc, doc, Document, но ничего. Я боюсь, что это даже не возможно, может быть, я должен попытаться загрузить некоторый код на уровне документа, но я не знаю, могу ли я добавить некоторые функции onchange.

Это руководство я следовал до сих пор: https://acrobatusers.com/tutorials/create_use_layers

Заранее спасибо

+0

Непрофессиональный JavaScript в формате PDF, но когда я сталкиваюсь с подобными проблемами, я обычно пытаюсь получить информацию от обработчика событий. Могу ли я угадать, что у вас есть onclick где-нибудь, вызывающее поле show/hide? – Fylax

+0

Проблема в том, что весь документ генерируется программным обеспечением, которое «обертывает» все, поэтому я могу просто поместить мой js-код, нажимая на кнопку, но у меня нет видимости кода! – lateralus

+0

Я вижу. Думаю, у вас нет контроля над 'document.addEventListener (« click », myfunction (this))'? – Fylax

ответ

0

вместо 'this.getOCGs()', попробуйте вызвать «event.target.doc.getOCGs ().

В функции, определенной в одном из файлов JavaScripts на уровне папок, «это» не определено. Функции вызова должны передавать Doc любой функции на этом уровне, который ей нужен.

Объект Doc часто можно получить через объекты событий, которые создаются для каждого события, с помощью которого выполняется JavaScript: ● Для мыши, фокусировки, размытия, вычисления, проверки и форматирования событий event.target возвращает Объект поля, инициировавший событие. Затем вы можете получить доступ к объекту Doc с помощью метода Doc объекта Field.

+0

даже событие не определено ... – lateralus