Как сохранить / скачать PDF, встроенный в веб-страницу без PDF-файла - PullRequest
1 голос
/ 30 марта 2012

Я пишу программу очистки веб-страниц на C #.До сих пор я смог войти на сайт, сохранить cookie и вернуть исходный код другой страницы.Из этого исходного кода я получаю ссылку, которая ведет меня в pdf, но страница не заканчивается расширением .pdf.В браузере на этой странице показано изображение PDF, и в браузере есть элементы управления, в том числе кнопка сохранения.

Я считаю, что страница PDF была создана с помощью ColdFusion, поскольку в URL-адресе содержатся файлы .cfm, CFID и CFTOKEN.

Как сохранить этот файл PDF программно?

В двух ответах предлагается сохранить двоичный поток в формате PDF.Как я могу получить двоичные данные в первую очередь?Я пробовал следующее:

        byte[] result;
        byte[] buffer = new byte[4096];

        WebRequest wr = WebRequest.Create(billURL);

        using (WebResponse response = wr.GetResponse())
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    int count = 0;
                    do
                    {
                        count = responseStream.Read(buffer, 0, buffer.Length);
                        memoryStream.Write(buffer, 0, count);

                    } while (count != 0);

                    result = memoryStream.ToArray();
                }
            }
        }

Хочу ли я сохранить результат в формате PDF или я что-то там не так делаю?

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Общий метод в CF для потоковой передачи PDF в браузер использует этот метод:

<cfheader name="Content-Disposition" value="attachment;filename=#PDFFileName#">
<cfcontent type="application/pdf" reset="true" variable="#toBinary(PDFinMemory)#">

Используйте C # WebRequest, чтобы получить URL-адрес PDF. Затем проверьте заголовок ответа для «Content-Type» «application / pdf». Если это так, сохраните двоичный поток в файл PDF на диске.

1 голос
/ 01 апреля 2012

Я получаю ссылку, которая ведет меня в PDF, но страница не заканчивается расширение .pdf .. Как я могу получить двоичные данные в первую очередь?

В дополнение к другим предложениям, одно маленькое уточнение. Расширение файла не имеет большого значения. Что важно, так это содержание . Скрипт .cfm может возвращать любой тип контента , а не только text/html. Таким образом, он может имитировать PDF, изображения и так далее. Пока ваша ссылка возвращает тип application/pdf, вы должны возвращать двоичный поток (т. Е. Pdf), который можете сохранить в файл. Исходное имя файла можно получить из WebResponse заголовков .

1 голос
/ 30 марта 2012

Предполагая, что CFID и CFTOKEN на самом деле не нужны (вы можете проверить URL без CFID и CFTOKEN и посмотреть, сможете ли вы по-прежнему успешно извлекать PDF)

  1. Используйте WebRequest, чтобы сделать запрос GET на этот URL (см .: http://support.microsoft.com/kb/307023)

  2. Сохранение двоичного потока в виде файла PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...