Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 июл 2025, 05:46

PDF в HTML

Автор Funt432286, 22 мая 2025, 18:47

0 Пользователей и 1 гость просматривают эту тему.

Funt432286

всем доброго времени суток!

Пытаюсь на форме в элемент HTML вывести PDF
система выдает ошибку

PDFФайлСтрока = ПолучитьBase64СтрокуИзДвоичныхДанных("\\server\e\....\Контрплита_02-10-12.pdf");

HTMLДокумент = "<!DOCTYPE html>
|<html>
| <head>
| <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />
| <meta name=""viewport"" content=""width=device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=no"">
| <script src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.4.456/pdf.min.js""></script>
| <script src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.4.456/pdf.worker.min.js""></script>
| <canvas id=""the-canvas""></canvas>
| <script>
| var currPage = 1; //Pages are 1-based not 0-based
| var numPages = 0;
| var thePDF = null;
|
| var loadingTask = pdfjsLib.getDocument({data: atob(`" + PDFФайлСтрока + "`)});
| loadingTask.promise.then(function(pdf) {
|        
|      thePDF = pdf;
|      numPages = pdf.numPages;
|
|      pdf.getPage(1).then(handlePages);                     
|
|      function handlePages(page) {
|         var scale = 1.5;
|
|         var viewport = page.getViewport({scale: scale});
|
|         var canvas = document.createElement( ""canvas"" );
|         canvas.style.display = ""block"";
|         var context = canvas.getContext('2d');
|         canvas.height = viewport.height;
|         canvas.width = viewport.width;
|
|         var renderContext = {
|               canvasContext: context,
|               viewport: viewport
|         };
|         var renderTask = page.render(renderContext);
|
|          document.body.appendChild( canvas );
|
|         currPage++;
|         if ( thePDF !== null && currPage <= numPages )
|         {
|             thePDF.getPage( currPage ).then( handlePages );
|         }
|        };
|
| });
| </script>
| </body>
|</html>";

Ошибка при вызове метода контекста (ПолучитьBase64СтрокуИзДвоичныхДанных)
{Обработка.КБ_Оснастки.Форма.КБ_Оснастки.Форма(918)}: PDFФайлСтрока = ПолучитьBase64СтрокуИзДвоичныхДанных("\\server\e\WORK\D\WORK\Kroi\Контрплита_02-10-12.pdf");
по причине:
Несоответствие типов (параметр номер '1')

может кто подскажет что не так! Буду очень благодарен!

Максим75

Funt432286, ну там двоичные данные должны быть.
вначале сам файл надо в двоичные данные перевести, а потом уже базе строку получать.
погуглите, наверняка полно примеров, как файло в двоичные данные кидать.

Funt432286

Максим75,

нашел код который перегоняет PDF в двочные данные. Ошибок не выдает, но и файл с изображением не выводит.

Просто белый элемент

    ДвоичныйДанныеPDF = Новый ДвоичныеДанные("D:\6418-23.pdf");
   
    PDFФайлСтрока = ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныйДанныеPDF);

    HTMLДокумент = "<!DOCTYPE html>
                |<html>
                |    <head>
                |        <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />
                |        <meta name=""viewport"" content=""width=device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=no"">
                |        <script src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.4.456/pdf.min.js""></script>
                |        <script src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.4.456/pdf.worker.min.js""></script>
                |        <canvas id=""the-canvas""></canvas>
                |        <script>
                |            var currPage = 1; //Pages are 1-based not 0-based
                |            var numPages = 0;
                |            var thePDF = null;
                |           
                |            var loadingTask = pdfjsLib.getDocument({data: atob(`" + PDFФайлСтрока + "`)});

antoneus

а если в хтмл сохранить и в браузере открыть - работает?

Funt432286

antoneus, при сохранении открывается пустой файл html

oooo800

У меня через js и base64 открывается.
В макет загружен что-то вроде pdf.js.
В него в качестве параметров передается BAse64 строка полученная из файла.

Ну ив html поле все отображается.

Может и "муторно", но плюс в том, что: есть нормальное (по мне) масштабирование и пепреход по страницам для многостраничного pdf.

Теги:

Похожие темы (3)

Рейтинг@Mail.ru

Поиск