Имя: Пароль:
1C
1С v8
Как получить из web pdf документ
, ,
0 FeeL86
 
24.11.14
15:32
Добрый день.

Люди добрые помогите разобраться, сервер возвращает файл pdf в виде строки:
%PDF-1.4
%âãÏÓ
3 0 obj
<</Type /Page
/Parent 1 0 R
/MediaBox [0 0 595.280 841.890]
/TrimBox [0.000 0.000 595.280 841.890]
/Resources 2 0 R
/Group << /Type /Group /S /Transparency /CS /DeviceRGB >>
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 6074>>
stream
x&#156;&#237;]&#235;&#175;·q?&#246;&#147;>&#185;F&#210;N*&#175;&#229; &#149;[k&#205;7&#185;&#146;­«&#135;m&#165;&#178;&#193;±&#144;~&#136;&#163;&#200;&#195;­a5µS &#255;~g&#184;$&#151;&#228;ry&#184;{&#206;&#185;&#150;®&#238;&#213;&#220;&#225;&#188;8g&#134;&#228;r&#234;Y&#255;&#244;¤&#210;&#253;&#223;o<z&#222;&#240;&#252;!&#253;@&#197;&#239;On&#188;&#243;&#228;S&#218;&#241;·&#192;E&#250;&#231;&#223;&#220;&#248;&#253;z&#210;&#255;)&#252;&#238;&#200;&#247;&#254;&#235;~F9 "&#189;`&#131;d¤§j&#208;&#154;&#247;Z&#235;&#129;&#142;&#186;&#255;&#227;&#139;&#254;&#157;§&#253;&#251;&#237;?Y&#136;&#195;&#222;&#249;&#144;&#247;l2&#233;&#249;_&#208;&#204;&#175;&#251;&#233;__&#244;=Z&#212;&#227;t&#208;D&#244;z¤&#131;&#144;&#186;&#254;§&#190;&#191;&#221;&#221;&#236;&#222;&#237;vw&#223;&#234;&#159;    &#227;"&#233;&#147;»V6&#235;&#199;H&#180; d&#224;&#132;&#245;&#134;&#201;&#129;R&#221;Sm&#191;&#189;&#227;,&#255;&#230;&#207;&#253;_&#162;°f0,.l&#130;&#210;&#129;F&#131;&#217;@U6TP1p&#201;&#136;Y°&#232;A&#154;: c&#195;x&#140;E
&#140;&#205;,|`"g&#129;?)V7&#151;&#139;&#193;&#168;&#186;"n§K&#138;&#224;&#226;&#136;")q$.bL&#156;.)&#146;r&#224;¦®H&#154;&#163;N+&#136;®&#168;+R&#230;&#232;4j&#248;&#212;&#137;&#139;&#134;&#232;&#178;#R&#204;@T&#221;\&#195;§KR&#140;L&#156;.&#217;b&#198;&#196;&#233;&#146;&#162;Q &#236;H2&#140;&#250;?&#211;&#146;&#208;&#196;&#233;&#130;"I&#212;@&#235;¶HJQ·ER%&#161;n &#133;&#232;&#214;'@2&#154;8]&#146;5U&#159;#&#201; &#186;&#245;&#202; &#225;&#163;v&#228;+&#249;?Lc&#201;\u°&#158; R@&#213;=&#198;2&&#233;]2W&#242;&#163;N&#203;1&#201;&#221;&#146;G&#138;&#203;]©&#228; &#143;&#216;&#162;t2&#211;S=&#222;&#202;&#226;&#155;&#156;o&#130;&#133;.#&#212;&#228;&#180;&#134;.®&#203;&#232;&#129;&#192;;&#248;N^v&#156;&#180;&#243;d&#221;m¬77&#232;&#219;%&#248;0&#142;&#163;&#235;m&#175;u¬3&#221;&#163;&#142;t&#239;u&#194;O&#207;}w&#190;~&#148;»&#240;&#165;»&#199;&#135;&#254;&#141;&#180;&#214;&#225;&#198;&#131;;&#251;&#238;~&#247;&#232;&#208;&#195;O&#248;&#243;?&#195;&#191;&#158;u&#180;{&#128;&#128;&#130;&#190;&#136;V&#251;W&#186;u&#236;&#140;&#128;&#230;??Q&#192;&#223;&#163;&#251;o&#190;&#184;A%|&#238; [C<%&#208;%&#216;&#211;jC¦&#233;&#232;Kqp&#163; &#202;S&#237;&#227;&#240;z&#215;C&#159;&#255;I&#247;J&#247;j&#247;&#211;&#238;W&#179;&#229;~ ]&#190;1&#236;N&#157;&#128;&#196;%s&#216;&#239;&#195;&#162;&#226;&#202;&#134;&#131;!&#159;UT&#228;&#194;4
&#146;&#201;=&#220;H&#135;[&#135;·aZ&#248;a

как этот текст преобразовать в pdf файл.

Делаю так:
ТекстОтвета = ПолучитьPDFССервера();
    Текст = Новый ЗаписьТекста("C:\Temp\Test.pdf", КодировкаТекста.ANSI);
    Текст.ЗаписатьСтроку(ТекстОтвета);
    Текст.Закрыть();

файл pdf получается пустой.
1 Рэйв
 
24.11.14
15:39
ты так, для иллюстрации, попробуй открыть в блокноте ехешник, сохранить как .exe и запустить:-)
2 Рэйв
 
24.11.14
15:40
со строки все сохраняется совсем не с теми кодами что поднималось.
3 Господин ПЖ
 
24.11.14
15:42
>сервер возвращает файл pdf в виде строки

не держи его так
4 FeeL86
 
24.11.14
15:46
ребят можете примером кода подсказать как ответ преобразовать в файл.
5 mehfk
 
24.11.14
15:46
А ты примером кода покажи как ты его получаешь.
6 FeeL86
 
24.11.14
15:48
Процедура СформироватьПечатнуюФормуКвитанции() Экспорт
    
    ДатаДокумента  = ДатаВНужномФормате(Дата("20141122"));
    
    // формирование XML-файла
    Запись = Новый ЗаписьXML;             
    Запись.УстановитьСтроку();
    Запись.ЗаписатьОбъявлениеXML();                
    
    //1.Корень DeliveryRequest
    Запись.ЗаписатьНачалоЭлемента("OrdersPrint");
    Запись.ЗаписатьАтрибут("Date", ДатаДокумента);
    Запись.ЗаписатьАтрибут("Account", ПараметрыИнтеграции.Пользователь);
    Запись.ЗаписатьАтрибут("Secure", РасчетХЭШ(ДатаДокумента + "&" + ПараметрыИнтеграции.Пароль));
    Запись.ЗаписатьАтрибут("OrderCount", "1");
    Запись.ЗаписатьАтрибут("CopyCount", "2");
    Запись.ЗаписатьНачалоЭлемента("Order");
    Запись.ЗаписатьАтрибут("DispatchNumber", "1012800412");
    Запись.ЗаписатьКонецЭлемента();
    Запись.ЗаписатьКонецЭлемента();
    СтрXML = Запись.Закрыть();
    ТекстОтвета = ОтправитьPOSTЗапросНаСервер(СтрXML, ПараметрыИнтеграции.АдресПечатнаяФормаКвитанцииКЗаказу);
    Текст = Новый ЗаписьТекста("C:\Temp\Test.pdf", КодировкаТекста.ANSI);
    Текст.ЗаписатьСтроку(ТекстОтвета);
    Текст.Закрыть();    
    
КонецПроцедуры
7 mehfk
 
24.11.14
15:51
А, ну тут все просто: обратись к автору функции ОтправитьPOSTЗапросНаСервер чтобы он тебе рассказал результат какого типа она возвращает.
8 Господин ПЖ
 
24.11.14
15:55
>Текст = Новый ЗаписьТекста("C:\Temp\Test.pdf", КодировкаТекста.ANSI);

бугага
9 Господин ПЖ
 
24.11.14
15:56
если тупой текст обозвать ".pdf" он им не станет
10 FeeL86
 
24.11.14
16:06
Хорошо, как тупой текст преобразовать в pdf?
функции ОтправитьPOSTЗапросНаСервер всего лишь отправляет http post запрос с параметром xml. Сервер в ответ возвращает файл pdf (http://imgur.com/WZO8ojv). Проблема в том как этот ответ превратить в файл pdf средствами платформы 1С 8.1
11 Господин ПЖ
 
24.11.14
16:10
через ДвоичныеДанные?

скриншот больше похож на какой-то "слепок" из хранилищазначений
12 FeeL86
 
24.11.14
16:23
ТекстОтвета = ОтправитьPOSTЗапросНаСервер(СтрXML, ПараметрыИнтеграции.АдресПечатнаяФормаКвитанцииКЗаказу);
    ДвоичныеДанные = Base64Значение(ТекстОтвета);
    ДвоичныеДанные.Записать("C:\Temp\Test.pdf");

Так?
13 FeeL86
 
24.11.14
16:32
Господин ПЖ, Вы похоже сами не знаете как это сделать.
14 Господин ПЖ
 
24.11.14
16:37
сделать что? сохранить хз что как pdf средствами 1С? понятия не имею... "текст" != "двоичный поток" из хранилища, и табличного документа с "save as" тоже не вижу

но

>Текст = Новый ЗаписьТекста("C:\Temp\Test.pdf", КодировкаТекста.ANSI);

явный бред
15 FeeL86
 
24.11.14
16:40
ваш ответ = "я не знаю как это сделать"
16 mehfk
 
24.11.14
17:05
читал (7) ?
17 FeeL86
 
24.11.14
17:08
Я автор этой функции, возвращает тип строка
18 Господин ПЖ
 
24.11.14
17:11
(17) >Я автор этой функции

поздравляю... и какого ... ты нас тогда спрашиваешь как сохранить?

тебе в (1) и (2) все написали...

>возвращает тип строка

толково
19 Господин ПЖ
 
24.11.14
17:13
двоичный поток затолкать в текст, а потом текст сохранить  ".pdf"
20 FeeL86
 
24.11.14
17:25
Функция ОтправитьPOSTЗапросНаСервер(СтрXML, АдресСтраницы)
    
    СтрURL = ПреобразоватьКURL(СтрXML);    
    
    // Заголовок POST запроса говорит о том что отправляется УРЛ кодированная форма
    Заголовки = Новый Соответствие();    
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");    
    
    Попытка
        WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");        
        WinHttp.Option(2,"utf-8");
        WinHttp.Open("POST","http://"; + ПараметрыИнтеграции.Сервер + ":" + ПараметрыИнтеграции.Порт + АдресСтраницы, 0);        
        WinHttp.SetRequestHeader("Accept-Language", "ru");
        WinHttp.SetRequestHeader("Accept-Charset","utf-8");
        WinHttp.setRequestHeader("Content-Language", "ru");
        WinHttp.setRequestHeader("Content-Charset", "utf-8");
        WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
        ПараметрыПОСТ = "&xml_request=" + СтрURL;
        WinHttp.Send(ПараметрыПОСТ);
        ТекстОтвета = WinHttp.ResponseText();
        Возврат ТекстОтвета;
    Исключение
        Сообщить("Ошибка WinHttp запроса: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;    
    
КонецФункции
21 mehfk
 
24.11.14
17:50
22 FeeL86
 
24.11.14
17:50
У COM объекта WinHttp.WinHttpRequest.5.1 есть метод ResponseStream() который вернет не строку а поотк, как дальше с этим потоком работать?
23 mehfk
 
24.11.14
17:53
24 FeeL86
 
24.11.14
17:58
не понятно что дальше делать. mehfk можешь кусок кода в пример привести?
25 mehfk
 
24.11.14
18:30
в (21) оно есть
26 FeeL86
 
25.11.14
11:37
Получилось вот так:

Процедура ОтправитьPOSTЗапросНаСервер(СтрXML, АдресСтраницы)
    
    СтрURL = ПреобразоватьКURL(СтрXML);    
    
    // Заголовок POST запроса говорит о том что отправляется УРЛ кодированная форма
    Заголовки = Новый Соответствие();    
    Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");    
    
    Попытка
        WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");        
        WinHttp.Option(2,"utf-8");
        WinHttp.Open("POST","http://"; + ПараметрыИнтеграции.Сервер + ":" + ПараметрыИнтеграции.Порт + АдресСтраницы, 0);        
        WinHttp.SetRequestHeader("Accept-Language", "ru");
        WinHttp.SetRequestHeader("Accept-Charset","utf-8");
        WinHttp.setRequestHeader("Content-Language", "ru");
        WinHttp.setRequestHeader("Content-Charset", "utf-8");
        WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
        ПараметрыПОСТ = "&xml_request=" + СтрURL;
        WinHttp.Send(ПараметрыПОСТ);
    Буфер = WinHttp.ResponseBody();
        Поток = Новый COMОбъект("ADODB.Stream");
    Поток.Type = 1;  //Бинарный
    Поток.Mode = 3;
    Поток.Open();
    Поток.Write(Буфер);
    Поток.SaveToFile("C:\Temp\Test.pdf");
    Поток.Close();
        
    Исключение
        Сообщить("Ошибка WinHttp запроса: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;    
    
КонецПроцедуры

mehfk, спасибо за помощь