Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2023, 14:35   #1
ras82
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 4
По умолчанию доработка кода

камрады, приветствую!
есть вот такой код, выводящий в хтмл страницу пдф документ:
Код:
	"<!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>";
где СтрокаPDFФайла - это строка формата Base64, полученная из двоичных данных файла пдф.
код рабочий, и один документ пдф выводит без проблем, даже из нескольких страниц.
но если выводить 2 многостраничных документов, то от первого выводит только первую страницу.

можно ли преобразовать код, чтобы выводить произвольное количество многостраничных пдф, один за другим, подскажите пжл?)
спасибо)
п.з. и еще при выводе страницы над первым документом остается пустое пространство, которое при печати считается как отдельная страница, это как то можно убрать?)
ras82 вне форума Ответить с цитированием
Старый 24.01.2023, 14:50   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

все дело в библиотеке pdf - читайте мануал по ней, делайте как надо вам (если это возможно)
ADSoft вне форума Ответить с цитированием
Старый 24.01.2023, 14:57   #3
ras82
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 4
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
все дело в библиотеке pdf - читайте мануал по ней, делайте как надо вам (если это возможно)
как я писал, можно вывести 2 пдф документа подряд, если продублировать блок script, с функцией вывода пдф, но от первого документа остается только первая страница.
средствами хтмл можно как то разделить вывод в разные разделы, последовательно?
ras82 вне форума Ответить с цитированием
Старый 25.01.2023, 06:00   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

По поводу пустого места, удалите the-canvas:
Код:
<!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>
    </head>
    <body>
        <script>
...
        </script>
    </body>
</html>
По поводу двух документов, а точно от первого документа только первая страница, а не страницы первого и второго документов перемешались? Не знаю, как правильно делать, но можно попробовать поколдовать со строкой "document.body.appendChild( canvas );", чтобы добавлять страницы каждого документа к своему div, например.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 25.01.2023 в 06:09.
BDA на форуме Ответить с цитированием
Старый 25.01.2023, 07:09   #5
ras82
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 4
По умолчанию

спасибо, про "the-canvas" помогло)

по поводу второго документа, вывел два разных дока, от первого вывел первую страницу, второй вывел нормально...

к сожалению, не разбираюсь в архитектуре js...
ras82 вне форума Ответить с цитированием
Старый 25.01.2023, 08:20   #6
ras82
Новичок
Джуниор
 
Регистрация: 24.01.2023
Сообщений: 4
По умолчанию

нашел, что метод getDocument() выполняется асинхронно.
в этом видимо и проблема, что читаются параллельно оба документа пдф и выводятся, по мере чтения страниц.
а можно как то эту асинхронность отключить?
ras82 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка кода программы Deyner C# (си шарп) 2 15.04.2018 15:31
Доработка кода mogo C# (си шарп) 12 18.02.2014 02:04
Доработка VBA кода MaxxVer Microsoft Office Excel 6 19.04.2012 15:38
Доработка кода авторизации Fastah БД в Delphi 1 22.03.2011 12:25
Доработка кода авторизации Fastah Помощь студентам 7 22.03.2011 11:45