Открытие PDF в новом поле HTML на WebKit

1. Bonov 08.05.19 12:50 Сейчас в теме
Коллеги, в связи с внедрением WebKit в поле HMTL документа в платформе 8.3.14 появились новые возможности, но и перестали работать старые.
К сожалению, я не спец в WebKit и прошу помощи, как теперь отобразить PDF на поле HTML документа. Желательно без сохранения файла.

Раньше код был следующий:

				HTMLДокумент = "<ht ml>
								|	<head>
								|	</head>
								|	<body>
								|		<EMB ED width=100% height=100% type=""application/pdf"" src=""" + АдресФайла + """></EMBED>
								|	</body>
								|</html>";
Показать

Теперь же он уже не работает, а попытки его модификации ни к чему пока не привели. У кого какие есть идеи по решению вопроса?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
10. EVKash 8 30.05.19 12:39 Сейчас в теме
(1) самое интересное, что этот код -
                HTMLДокумент = "<ht ml>
                                |    <head>
                                |    </head>
                                |    <body>
                                |        <EMB ED width=100% height=100% type=""application/pdf"" src=""" + АдресФайла + """></EMBED>
                                |    </body>
                                |</html>";
РАБОТАЕТ!!!

Но криво работает. 1С как всегда в своем репертуаре...
Если в отладчике в событии ПолеХТМЛДокументаДокументСформирован в "вычислить выражение" посмотреть Элементы.ПолеХТМЛДокумента.Документ,
то при продолжении отладки содержимое pdf отлично показывается. НО!!! До перезапуска предприятия ломается сохранение любых табличных документов в pdf. Т.е. документ сохраняется, но просмотреть его не получается. Битый файл сохраняется.
Им бы баг репорт накатать... Кто может?
2. Sergitax 08.05.19 13:38 Сейчас в теме
Движок WebKit не поддерживает работу с PDF. В тонком клиенте для Windows раньше использовался Internet Explorer, который также не поддерживал работу с pdf-файлами. Однако при установке Adobe Acrobar Reader дополнительно устанавливался плагин к Internet Explorer, который и позволял просматривать pdf-файлы в полях HTML.
В случае веб-клиента 1С все будет зависеть от браузера. К примеру тот же хром поддерживает работу с pdf-файлами и вы сможете увидеть содержимое. Хромиум и Опера эту возможность не поддерживают.
3. Bonov 08.05.19 14:17 Сейчас в теме
(2) Да, я понимаю, что напрямую не поддерживает. Поэтому интересны пути обхода. Любые пути для решения вопроса.
4. Bonov 08.05.19 14:56 Сейчас в теме
Раз теперь есть поддержка HTML5 и JS, то, может, как-то можно прикрутить pdf.js?
https://github.com/mozilla/pdf.js
5. Bonov 08.05.19 17:15 Сейчас в теме
Я не силён в web, поэтому ни черта не понимаю... Должен, по идее, работать такой код, но не работает... Пример взят с сайта выше по ссылке.

HTMLДокумент = "<!DO CTYPE html>
|<ht ml>
|<head>
|<met a http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />
|<met a name=""viewport"" content=""width=device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=no"">
|<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.min.js""></sc ript>
|<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.worker.min.js""></sc ript>
|<canvas id=""the-canvas""></canvas>

|<sc ript>
|// atob() is used to convert base64 encoded PDF to binary-like data.
|// (See also https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/
|// Base64_encoding_and_decoding.)
|var pdfData = atob(" + ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьИзВременногоХранилища(АдресФайла)) + ");
|  
|// Loaded via <sc ript> tag, create shortcut to access PDF.js exports.
|var pdfjsLib = window['pdfjs-dist/build/pdf'];

|// The workerSrc property shall be specified.
|pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';

|// Using DocumentInitParameters object to load binary data.
|var loadingTask = pdfjsLib.getDocument({data: pdfData});
|loadingTask.promise.then(function(pdf) {
|  console.log('PDF loaded');
|  
|  // Fetch the first page
|  var pageNumber = 1;
|  pdf.getPage(pageNumber).then(function(page) {
|    console.log('Page loaded');
|    
|    var scale = 1.5;
|    var viewport = page.getViewport({scale: scale});

|    // Prepare canvas using PDF page dimensions
|    var canvas = document.getElementById('the-canvas');
|    var context = canvas.getContext('2d');
|    canvas.height = viewport.height;
|    canvas.width = viewport.width;

|    // Render PDF page into canvas context
|    var renderContext = {
|      canvasContext: context,
|      viewport: viewport
|    };
|    var renderTask = page.render(renderContext);
|    renderTask.promise.then(function () {
|      console.log('Page rendered');
|    });
|  });
|}, function (reason) {
|  // PDF loading error
|  console.error(reason);
|});
|</sc ript>
|</body>
|</html>";
Показать
Bosanya; KPAMOP; +2 Ответить
11. KPAMOP 11 22.10.19 08:28 Сейчас в теме
(5)
|var pdfData = atob(`" + ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьИзВременногоХранилища(АдресФайла)) + "`);

Вашему примеру не хватает тильды в функции atob(``), без них на 8.3.15.1700 изображение не появлялось. А так: спасибо, был избавлен он мучительного поиска в сети.
Bosanya; Devi; Bonov; +3 Ответить
12. EVKash 8 22.10.19 09:03 Сейчас в теме
(11) насколько понимаю, без интернета не взлетит?
13. KPAMOP 11 22.10.19 09:17 Сейчас в теме
(12)Я уже не помню, когда на компьютере не было интернета. Не проверял такую ситуацию.
14. SlavaKron 22.10.19 09:21 Сейчас в теме
(12) Можно скопировать текст скриптов по указанным ссылкам и вставить в тело HTML документа.
15. Bonov 22.10.19 11:58 Сейчас в теме
(11) Да ладно?! Т.е. заработало?! Ура! Иду пробовать! :)
16. Bonov 22.10.19 13:01 Сейчас в теме
(11) Да, про то, что нужно тильды вставлять вместо апострофов, я бы никогда не догадался. Действительно, так заработало, но с большими ограничениями! Показывается только первая страница PDF, а так же недоступно масштабирование. Имейте в виду те, кто будет внедрять. А решение по полному отображению PDF со всеми страницами, масштабированию, да возможностью выделения/копирования текста - пока продолжаем искать.
18. KPAMOP 11 22.10.19 16:15 Сейчас в теме
(16)(9) Есть предложенное решение, но на печать попадают кнопки управления страницами.(9)
19. Bonov 22.10.19 19:36 Сейчас в теме
(18) Уверен, как-то можно частично портировать этот функционал: https://mozilla.github.io/pdf.js/web/viewer.html
21. deGreese 25.10.19 12:11 Сейчас в теме
(18)
Нужно добавить на страницу небольшую таблицу стилей

@media print{
  .noprint {
    display:none;
  }
}


и кнопкам, которые не нужно печатать присвоить соответствующие классы вот так

... <input type=button class=noprint ...
vankacal; acanta; KPAMOP; +3 Ответить
22. KPAMOP 11 25.10.19 13:12 Сейчас в теме
(21)Тогда может найдёте время и силы и выложите окончательный скрипт?
Я очень не силён в них, а потенциал вашей работы виден.
23. deGreese 28.10.19 11:02 Сейчас в теме
(22) Дописал немного. При печати скрывается блок с кнопками и номером страницы.
Прикрепленные файлы:
Смотрелка PDF.epf
Bosanya; vankacal; Dosperanso; lokli; KPAMOP; +5 Ответить
6. Bonov 08.05.19 17:33 Сейчас в теме
Скопировал код напрямую в текст, страничка стала отображаться, причем, даже в веб-клиенте(!), так что решение возможно, нужны только познания в этой области, чтобы правильно прописать код странички, да наладить взаимодействие.
Web-спецы, ауу!! :)
7. Sergitax 13.05.19 10:54 Сейчас в теме
(6)
Я не веб спец, но как уже писал выше в веб-клиенте оно и будет работать при поддержке pdf самим браузером. Мои коллеги (веб-программисты) посмотрели этот скрипт и сказали, что здесь идет преобразование pdf в картинку и только 1 листа. Для вывода много страничного документа необходимо сделать цикл.
8. Bonov 13.05.19 12:46 Сейчас в теме
(7) Ваши коллеги могут посмотреть исходный код библиотеки выше по ссылке на github? Там есть примеры онлайн просмотра и многостраничного документа с кучей элементов управления, т.е. аналог Acrobat Reader на JS. Нужно преобразовать этот код под реалии 1С, т.е. запихнуть всё в один файл. Выше я привел лишь пример одностраничного кода, не говорил же, что это результат.

И да, работать будет во всех современных браузерах вне зависимости от поддержки PDF.

Вот прямая ссылка на онлайн просмотр PDF силами JS: https://mozilla.github.io/pdf.js/web/viewer.html
Доступно и выделение текста, и просмотр всех страниц, и печать, в общем - полноценная работа с файлом.
9. deGreese 16.05.19 10:02 Сейчас в теме
Накидал обработку на УФ. Проверял в CRM.
В макете обработки страница для рисования и второй макет - собственно pdf для просмотра. Сам принцип думаю понятен, дальше можно адаптировать как угодно.

Взял один из примеров на сайте, где постранично выводится файл и немного адаптировал пример.
Прикрепленные файлы:
Смотрелка PDF.epf
KPAMOP; Sancho-R; +2 Ответить
17. Bonov 22.10.19 14:15 Сейчас в теме
Вот в идеале то, что хотелось бы получить:
https://mozilla.github.io/pdf.js/web/viewer.html
20. KPAMOP 11 23.10.19 10:40 Сейчас в теме
(17)В идеале хорошо. Вот что я смог добиться от своих программистов. Показывает все страницы!
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если ЭтоАдресВременногоХранилища(Параметры.Адрес) Тогда
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Адрес);
		
		Если не ПустаяСтрока(Параметры.Заголовок) Тогда
			АвтоЗаголовок = Ложь;
			Заголовок = Параметры.Заголовок;
		КонецЕсли;
		
		Поле =
		"<!DO CTYPE html>
		|<ht ml>
		|<head>
		|<met a http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"" />
		|<met a name=""viewport"" content=""width=device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=no"">
		|<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.min.js""></sc ript>
		|<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.2.2/pdf.worker.min.js""></sc ript>
		|<div id=""holder""></div>
		|<sc ript>
		|// atob() is used to convert base64 encoded PDF to binary-like data.
		|// (See also https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/
		|// Base64_encoding_and_decoding.)
		|var pdfData = atob(`" + ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные) + "`);
		|// Loaded via <sc ript> tag, create shortcut to access PDF.js exports.
		|var pdfjsLib = window['pdfjs-dist/build/pdf'];
		|// The workerSrc property shall be specified.
		|pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
		|// Using DocumentInitParameters object to load binary data.
		|var loadingTask = pdfjsLib.getDocument({data: pdfData});
		|loadingTask.promise.then(function(pdf) 
		|{
		|	var canvasContainer = document.getElementById('holder');
		|	console.log('PDF loaded');
		|  
		|	for(var pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++){
		|		console.log(pageNumber);
		|  
		|		pdf.getPage(pageNumber).then(function(page) {
		|		console.log('Page loaded');
		|    
		|		var scale = 1.0;
		|		var viewport = page.getViewport({scale: scale});
		|		var canvas = document.createElement('canvas');
		|		var context = canvas.getContext('2d');
		|		canvas.height = viewport.height;
		|		canvas.width = viewport.width;
		|		var renderContext = {
		|			canvasContext: context,
		|			viewport: viewport
		|		};
		|	canvasContainer.appendChild(canvas);
		|	var renderTask = page.render(renderContext);
		|	renderTask.promise.then(function () {
		|		console.log('Page rendered');
		|		});
		|	});
		|}
		|}, 
		|function (reason) {
		|  // PDF loading error
		|  console.error(reason);
		|});
		|</sc ript>
		|</body>
		|</html>";		
		
	Иначе
		
		Отказ = Истина;
		
	КонецЕсли;
	
КонецПроцедуры
Показать
Zarikus26; lokli; +2 Ответить
40. Alv_prog 06.05.20 10:41 Сейчас в теме
(20) На платформе 8.3.16.1063 кнопки отображаются, изображения нет
42. Kovekh 29.05.20 09:13 Сейчас в теме
(40)Дело не в платформе, дело в мозилле. Они поменяли библиотеку и в версии 2.4.456 от 20 марта не работает всё в WebKit и IE/Edge. Лечится использованием старых библиотек.

Допустим, в строках
<sc ript src="https://mozilla.github.io/pdf.js/build/pdf.js"></sc ript

и
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.js'


Нужно написать
<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.3.200/pdf.js""></sc ript>

и
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.3.200/pdf.worker.js'


У меня с этими изменениями всё заработало в 8.3.15.1830)


Суммарно такой HTML получается:
<!do ctype html>
		<ht ml>
		<head>
		<sc ript src=""https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.3.200/pdf.js""></sc ript>

		<sc ript>
		addEventListener('load',e=>{
		  var BinData = atob(`<ba se64pdf>`);
		  // Loaded via <sc ript> tag, create shortcut to access PDF.js exports.
		  var pdfjsLib = window['pdfjs-dist/build/pdf'];
		  // The workerSrc property shall be specified.
		  pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.3.200/pdf.worker.js';

		  var pdfDoc = null,
		      pageNum = 1,
		      pageRendering = false,
		      pageNumPending = null,
		      scale = 0.8,
		      canvas = document.getElementById('the-canvas'),
		      ctx = canvas.getContext('2d');

		  /**
		   * Get page info from document, resize canvas accordingly, and render page.
		   * *param num Page number.
		   */
		  function renderPage(num) {
		    pageRendering = true;
		    // Using promise to fetch the page
		    pdfDoc.getPage(num).then(function(page) {
		      var viewport = page.getViewport({scale: scale});
		      canvas.height = viewport.height;
		      canvas.width = viewport.width;

		      // Render PDF page into canvas context
		      var renderContext = {
		        canvasContext: ctx,
		        viewport: viewport
		      };
		      var renderTask = page.render(renderContext);

		      // Wait for rendering to finish
		      renderTask.promise.then(function() {
		        pageRendering = false;
		        if (pageNumPending !== null) {
		          // New page rendering is pending
		          renderPage(pageNumPending);
		          pageNumPending = null;
		        }
		      });
		    });

		    // Update page counters
		    document.getElementById('page_num').textContent = num;
		  }

		  /**
		   * If another page rendering in progress, waits until the rendering is
		   * finised. Otherwise, executes rendering immediately.
		   */
		  function queueRenderPage(num) {
		    if (pageRendering) {
		      pageNumPending = num;
		    } else {
		      renderPage(num);
		    }
		  }

		  /**
		   * Displays previous page.
		   */
		  function onPrevPage() {
		    if (pageNum <= 1) {
		      return;
		    }
		    pageNum--;
		    queueRenderPage(pageNum);
		  }
		  document.getElementById('prev').addEventListener('click', onPrevPage);

		  /**
		   * Displays next page.
		   */
		  function onNextPage() {
		    if (pageNum >= pdfDoc.numPages) {
		      return;
		    }
		    pageNum++;
		    queueRenderPage(pageNum);
		  }
		  document.getElementById('next').addEventListener('click', onNextPage);

		  /**
		   * Asynchronously downloads PDF.
		   */
		  pdfjsLib.getDocument({data: BinData}).promise.then(function(pdfDoc_) {
		    pdfDoc = pdfDoc_;
		    document.getElementById('page_count').textContent = pdfDoc.numPages;

		    // Initial/first page rendering
		    renderPage(pageNum);
		  });
		});
		</sc ript>
		<st yle>
		*media print{
		  .noprint {
		    display:none;
		  }
		}
		</style>
		</head>
		<body>
		<div class=noprint>
		  <button id=""prev"">Предыдущая</button>
		  <button id=""next"">Следующая</button>
		     
		  <span>Page: <span id=""page_num""></span> / <span id=""page_count""></span></span>
		</div>

		<canvas id=""the-canvas""></canvas>
		</body>
		</html>
Показать
24. Dosperanso 19.11.19 17:40 Сейчас в теме
Немного дополнил код от @deGreese. Теперь страницы на русском и добавил кнопки увеличения и уменьшения масштаба.
<!do ctype html>
<ht ml>
<head>
<sc ript src="https://mozilla.github.io/pdf.js/build/pdf.js"></sc ript>

<sc ript>
addEventListener('load',e=>{
  var BinData = atob(`<ba se64pdf>`);
  // Loaded via <sc ript> tag, create shortcut to access PDF.js exports.
  var pdfjsLib = window['pdfjs-dist/build/pdf'];
  // The workerSrc property shall be specified.
  pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.js';

  var pdfDoc = null,
      pageNum = 1,
      pageRendering = false,
      pageNumPending = null,
      scale = 1,
      canvas = document.getElementById('the-canvas'),
      ctx = canvas.getContext('2d');

  /**
   * Get page info from document, resize canvas accordingly, and render page.
   * @param num Page number.
   */
  function renderPage(num) {
    pageRendering = true;
    // Using promise to fetch the page
    pdfDoc.getPage(num).then(function(page) {
      var viewport = page.getViewport({scale: scale});
      canvas.height = viewport.height;
      canvas.width = viewport.width;

      // Render PDF page into canvas context
      var renderContext = {
        canvasContext: ctx,
        viewport: viewport
      };
      var renderTask = page.render(renderContext);

      // Wait for rendering to finish
      renderTask.promise.then(function() {
        pageRendering = false;
        if (pageNumPending !== null) {
          // New page rendering is pending
          renderPage(pageNumPending);
          pageNumPending = null;
        }
      });
    });

    // Update page counters
    document.getElementById('page_num').textContent = num;
  }

  /**
   * If another page rendering in progress, waits until the rendering is
   * finised. Otherwise, executes rendering immediately.
   */
  function queueRenderPage(num) {
    if (pageRendering) {
      pageNumPending = num;
    } else {
      renderPage(num);
    }
  }

  /**
   * Displays previous page.
   */
  function onPrevPage() {
    if (pageNum <= 1) {
      return;
    }
    pageNum--;
    queueRenderPage(pageNum);
  }
  document.getElementById('prev').addEventListener('click', onPrevPage);

  /**
   * Displays next page.
   */
  function onNextPage() {
    if (pageNum >= pdfDoc.numPages) {
      return;
    }
    pageNum++;
    queueRenderPage(pageNum);
  }
  document.getElementById('next').addEventListener('click', onNextPage);

/**
   * Zoom Out.
   */
  function onZoomOut() {
    scale = scale - 0.2;
    queueRenderPage(pageNum);
  }
  document.getElementById('ZoomOut').addEventListener('click', onZoomOut);

/**
   * Zoom In.
   */
  function onZoomIn() {
    scale = scale + 0.2;
    queueRenderPage(pageNum);
  }
  document.getElementById('ZoomIn').addEventListener('click', onZoomIn);

  /**
   * Asynchronously downloads PDF.
   */
  pdfjsLib.getDocument({data: BinData}).promise.then(function(pdfDoc_) {
    pdfDoc = pdfDoc_;
    document.getElementById('page_count').textContent = pdfDoc.numPages;

    // Initial/first page rendering
    renderPage(pageNum);
  });
});
</sc ript>
<st yle>
@media print{
  .noprint {
    display:none;
  }
}
</style>
</head>
<body>
<div class=noprint>
  <button id="prev">Предыдущая</button>
  <button id="next">Следующая</button>
     
  <span>Страница: <span id="page_num"></span> из <span id="page_count"></span></span>
     
  <button id="ZoomOut">-</button>
  <button id="ZoomIn">+</button>
</div>

<canvas id="the-canvas"></canvas>
</body>
</html>
Показать
Bosanya; nightsun; vankacal; friend0; Zarikus26; +5 Ответить
25. blazevic 10.12.19 22:53 Сейчас в теме
(24) К сожалению, на 8.3.16.1063 данный код перестал работать. Не знаете с чем это может быть связано?
codewriter; +1 Ответить
26. friend0 23.12.19 17:03 Сейчас в теме
(25) У меня работает. Если удалить кучу неизвестно откуда взявшихся лишних пробелов.
30. ZeDikuSss 20.02.20 08:20 Сейчас в теме
(26) А о каких именно пробелах вы говорите?
31. friend0 20.02.20 12:24 Сейчас в теме
(30)например "<!do ctype html>" показывается как "<!do ctype html>" и прочее
27. plyshu 13.01.20 04:53 Сейчас в теме
Обработка для компьютеров без доступа к интернету
Прикрепленные файлы:
Смотрелка PDF (1).epf
Bosanya; nightsun; +2 Ответить
29. nosferat 13.02.20 16:39 Сейчас в теме
(27) на 15 платформе почему-то пустой экран. ПДФ не отображается
codewriter; +1 Ответить
32. ZeDikuSss 27.02.20 11:42 Сейчас в теме
(29) Собственно, немного переделал для собственных нужд, однако оно работает
Добавил открытие файлов с компьютера (doc, xls, pdf)
Добавил кнопки масштаба
Прикрепленные файлы:
ОткрытиеPDF.epf
axelerleo; liv; wolha; hansel; alexex; nastrou1c; +6 Ответить
41. Alv_prog 06.05.20 10:43 Сейчас в теме
(32) На платформе 8.3.16.1063 кнопки отображаются, изображения нет
28. terrorion 74 22.01.20 10:27 Сейчас в теме
По адресу https://mozilla.github.io/pdf.js/ можно скачать архив, содержимое скопировать в папку сайта, опубликованного в локальной сети.

Пример кода

ПолеHTML = "http://IPАдресСайта/pdfjs/web/viewer.html?file=pdfdocs/" + ИмяФайлаPDF;
user750278; +1 Ответить
34. Azamatex 10 11.03.20 08:49 Сейчас в теме
(28)ИмяФайлаPDF - в каком формате должно быть?
35. terrorion 74 11.03.20 09:25 Сейчас в теме
36. Azamatex 10 11.03.20 09:27 Сейчас в теме
(35)прошу прощения, я имел ввиду путь к файлу. C:/Users/g/Desktop/v8_3835_5.pdf - не работает.
37. terrorion 74 11.03.20 09:35 Сейчас в теме
(36) папка "pdfdocs" должна быть вложенной типа D:\www\pdfjs\web\pdfdocs, и в эту папку нужно положить файл
Azamatex; +1 Ответить
38. terrorion 74 11.03.20 09:37 Сейчас в теме
33. plyshu 11.03.20 02:02 Сейчас в теме
Кстати, у кого-нибудь получилось добавить кнопку печати?
Код <button on click="window.print()"> Print</button> печатает только то, что изображено на html (впрочем не удивительно).
Был бы признателен, если кто-то подкинул идею, как можно это реализовать и в каком направлении копать
fakturauz; +1 Ответить
39. user624439_ivanovaf 13.03.20 18:08 Сейчас в теме
Обработка класс! но не работает в линуксе. Куда смотреть, что можно поправить ?
Оставьте свое сообщение
Вопросы с вознаграждением