Имя: Пароль:
1C
1С v8
Некорректное масштабирование PDF при отображении в поле HTML документа
0 __radar__
 
08.02.23
13:44
Добрый день.
Для отображения PDF использую библиотеку PDFJS. У отображаемого документа смазываются шрифты и портится масштаб, т.к. если выгрузить его в файл, то он будет меньше исходного.
Сначала загружаю PDF из временного файла в двоичные данные. Потом преобразовываю в строку Base64.
Код использую следующий:

Строка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=yes"">
|        <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>                
|       <body style=""margin: 0; padding: 0;"">
|      <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;
|            
|                    var viewport = page.getViewport({scale: scale});
|            
|                    var canvas = document.createElement( ""canvas"" );
|                    canvas.style.display = ""block"";
|                    canvas.height = viewport.height;
|                    canvas.width = viewport.width;
|                    var context = canvas.getContext('2d');
|            
|                    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>";
1 Garykom
 
гуру
08.02.23
14:16
ДокументPDF (PDFDocument)
Доступен, начиная с версии 8.3.21.
Свойства:
Вложения (Attachments)
ТипФайла (FileType)
Методы:
ДобавитьОтображаемыйОбъект (AddRepresentationObject)
ДобавитьОтображаемыйОбъектАсинх (AddRepresentationObjectAsync)
ДобавитьПодпись (AddSignature)
ДобавитьПодписьАсинх (AddSignatureAsync)
Записать (Write)
ЗаписатьАсинх (WriteAsync)
КоличествоСтраниц (PageCount)
Напечатать (Print)
Показать (Show)
ПолучитьОписанияПодписей (GetSignatureDescriptions)
ПолучитьОписанияПодписейАсинх (GetSignatureDescriptionsAsync)
ПреобразоватьВОттенкиСерого (ConvertToGrayScale)
ПреобразоватьВОттенкиСерогоАсинх (ConvertToGrayScaleAsync)
ПроверитьПодписи (VerifySignatures)
ПроверитьПодписиАсинх (VerifySignaturesAsync)
ПроверитьПодпись (VerifySignature)
ПроверитьПодписьАсинх (VerifySignatureAsync)
Прочитать (Read)
ПрочитатьАсинх (ReadAsync)
Конструкторы:
По умолчанию
Описание:
Предназначен для работы с PDF-документом.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.21.
Описание изменено в версии 8.3.22.
2 __radar__
 
08.02.23
14:23
У меня версия 8.3.17.
3 Garykom
 
гуру
08.02.23
14:30
(2) Обновиться все равно придется
4 __radar__
 
08.02.23
14:49
Как можно решить проблему до этого момента. Средствами javascript ? Я знаю что можно использовать html тег <embeded>, но тогда придётся задействовать просмотрщик pdf которого в системе может не быть.
5 Garykom
 
гуру
08.02.23
14:53
(4) что происходит если в ПолеHTML открыть https://mozilla.github.io/pdf.js/web/viewer.html ?
6 __radar__
 
08.02.23
15:08
(5) Вы имеете ввиду pdfjsLib.getDocument("https://mozilla.github.io/pdf.js/web/viewer.html") ? Если да, то он его вообще не открывает.
7 Garykom
 
гуру
08.02.23
15:26
(6) эээ подучить 1С бы

имел ввиду
ПолеHTML = "https://mozilla.github.io/pdf.js/web/viewer.html"
8 Garykom
 
гуру
08.02.23
15:28
(7)+ если там корректно масштабирует то остается только разобрать
https://mozilla.github.io/pdf.js/web/viewer.js
чтобы понять что изменить для подсовывания твоего файлика pdf
9 Garykom
 
гуру
08.02.23
15:32
есть подозрения что ты скопипастил какое то старье и пытаешься юзать

уверен что
|        <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>      

не устарело вусмерть?

и да тянуть из возможно недоступных cdn это так себе
лучше со своего ресурса или встроить
Основная теорема систематики: Новые системы плодят новые проблемы.