получить мутантный URL с помощью JavaScript - PullRequest
1 голос
/ 28 марта 2012

У меня следующий вопрос:

В настоящее время я работаю с программным обеспечением (MicroStrategy, BI), которое имеет функцию, которая экспортирует отчеты в PDF, работает примерно так:

каждый отчет имеет уникальный идентификатор, поэтому вы выбираете отчет для экспорта, и с помощью jsp я отправляю идентификатор этого отчета в инструмент экспорта, и он генерирует полный URL-адрес с некоторыми параметрами, которые сервер MicroStrategy будет считывать для создания PDF.

Я пытаюсь перехватить этот PDF-URL и отправить его в метод Java, который сохранит этот PDF-файл на жестком диске, ничего не запрашивая у пользователя.

Моя проблема в том, чтоЭтот URL-адрес не генерируется мгновенно, требуется некоторое время, И, в процессе выполняются некоторые перенаправления.

Итак, после всего этого разговора, как я могу захватить этот чертов URL?

Что я делаю, так это загружаю pdf в iframe, а затем извлекаю url с помощью js-кода, который я нашел при поиске, присваиваю его переменной JSP и затем, когда у меня есть pdf url,вызовите метод Java.Но это не работает.

Функция JavaScript такова:

<script language="text/javascript">
    function getSrc()
    {
        var CurrentUrl = document.getElementById('miframe').contentWindow.location.href;
        if(currentUrl.substr(length-5)==".pdf")
        {
           return currentUrl;
        }
        else
        {
           setTimeout(getSrc(),5000);
        }
    }
</script>

, и я обращаюсь к ней с таким вызовом:

<% jsp code
    String currentUrl="<script>document.writeln(getSrc();)</script>";
more jsp code %>

ОстальныеКод на самом деле в порядке, попробовал его с обычным PDF-URL, и он сохранил PDF на диск.

Надеюсь, что это понятно, и спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 12 мая 2012

Я не знаю, какой у вас доступ к MicroStrategy, но есть Java-API MicroStrategy, которое позволит вам выполнить документ и получить pdf без захвата URL. Посмотрите их базу знаний для примеров.

0 голосов
/ 17 октября 2013

Почему бы просто не сохранить отчет / документ в формате PDF по умолчанию, при этом при открытии отчета он будет автоматически создан в формате PDF.

Если вам не нравится идеясохраняя отчет в формате PDF (например, поскольку он также необходим как обычный отчет и вы не хотите поддерживать две версии одного и того же объекта), вы можете использовать URLAPI для создания PDF-файла, используя &executionMode=3 и &currentViewMedia=32.

Не уверен насчет этих параметров, лучший способ выяснить, какими они являются (помимо некоторых MicroStrategy TN), - экспортировать отчет в PDF и проверить URL.

0 голосов
/ 28 марта 2012

Ваша основная проблема заключается в том, что вы звоните getSrc, не передавая его на setTimeout (фактически вы передаете null на setTimeout, если только не произойдет второй вызов getSrc, и в этом случаевы передаете строку, которую setTimeout не может обработать из-за «синтаксических ошибок».

Вместо этого используйте setTimeout(getSrc,5000); - без скобок после getSrc. Это передает функцию, а не ее результат.

Кроме того, currentUrl.substr(length-5) неверно, отчасти потому, что length не определено (вам нужно currentUrl.length там), а отчасти потому, что вам нужно -4, чтобы получить последние четыре символа.

...