1 / 1 / 0
Регистрация: 18.06.2018
Сообщений: 91
1

В какой формат проще сделать экспорт страницы?

24.09.2018, 20:04. Показов 1146. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго вечера!)

Вот какой у меня вопрос
Моя страница имеет несколько таблиц, ячейка каждой таблицы в себе имеет input[type=text].
После работы с таблицами, стоит задача что бы пользователь мог сохранить результат того что ввел. Вот собственно вопрос, какой самый простой вариант? В какой формат?

Я вчера попробовал сохранить страницу в виде PDF файла. Библиотека которую я нашел, к сожалению не смогла превратить в такой формат таблицу в ячейках которой лежат инпуты.

Мне, подойдет любой выходной формат, даже если его править не выйдет.
Подскажите какая библиотека будет лучше для такой задачи?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2018, 20:04
Ответы с готовыми решениями:

Экспорт ASP.Net страницы в PDF формат
Существует ли возможность экспортировать ASP.Net страницы в PDF формат без использования Crystal...

Экспорт по проще из Txt
пока копаюсь в документации, но может кто подскажет. Задача: на другом сервере (Domino на нем нет,...

В какой формат файла лучше сделать длинную звукозапись чтобы и качество было хорошим и вес был не большим?
например на 720 часов, и чтобы заняло не более 280 гигов

Какой язык проще?
Не могу определиться с выбором языка для изучения новичку. что подскажете?

8
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
25.09.2018, 02:15 2
Цитата Сообщение от MadMetal Посмотреть сообщение
таблицу в ячейках которой лежат инпуты
input - с англ. ввод, разумеется что на бумагу можно что угодно ввести\написать\вырезать, но я вот к чему: зачем пытаться отображать поля ввода в pdf? Не проще ли заменить все <input..> на <span>...</span>, например, и только после преобразовывать в pdf?

В дополнение, мне кажется, можно схитрить и все поля ввода сделать "гибридными", когда все поля ввода скрыты, но есть дополнительный JS код, который позволяет пользоваться span элементом как полем для ввода данных. Любая библиотека пользовательских input-ов должна подойти, так как большинство из них на этом и работают, да и всегда можно сделать свой велосипед если высота рамы не подходит.
0
Эксперт JS
2424 / 1733 / 622
Регистрация: 11.07.2016
Сообщений: 4,011
25.09.2018, 09:21 3
Цитата Сообщение от outoftime Посмотреть сообщение
дополнительный JS код, который позволяет пользоваться span элементом как полем для ввода данных
HTML5
1
<span contenteditable="true">Исправь меня</span>
2
1 / 1 / 0
Регистрация: 18.06.2018
Сообщений: 91
25.09.2018, 12:16  [ТС] 4
Цитата Сообщение от outoftime Посмотреть сообщение
Не проще ли заменить все <input..> на <span>...</span>, например, и только после преобразовывать в pdf?
К сожалению не проще, у меня уже все готово. Инпутов реально много, все с id, прописаны методы, для работы с ними. Т.е. у меня уже все работает, кроме сохранения результатов.

Это мой первый не коммерческий проект. Брался ради опыта, изначально не знал что лучше использовать для реализации функционала.

Сейчас думаю, может легче будет писать в Excel? Или это едиственная опция для меня.
И конечно же, поискал в ютубе.
Кликните здесь для просмотра всего текста

Эта либа тоже не сработала. Скопировал, все прямо как в видео. Хром ругает FileSaver.

Сижу уже 3 раза по 3-4 часа, даже не знаю что делать)
Миниатюры
В какой формат проще сделать экспорт страницы?  
0
1 / 1 / 0
Регистрация: 18.06.2018
Сообщений: 91
26.09.2018, 07:19  [ТС] 5
Что нужно почитать, что бы перевести этот код в JS? (указано что оно написано на CoffeeScript)

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
asUtf16 = (str) ->
  buffer = new ArrayBuffer(str.length * 2)
  bufferView = new Uint16Array(buffer)
  bufferView[0] = 0xfeff
  for i in [0..str.length]
    val = str.charCodeAt(i)
    bufferView[i + 1] = val
  bufferView
 
 
makeExcelCsvBlob = (rows) ->  
  new Blob([asUtf16(toTsv(rows)).buffer], {type: "text/csv;charset=UTF-16"})
 
 
toTsv = (rows) ->
  escapeValue = (val) ->
    if typeof val is 'string'
      '"' + val.replace(/"/g, '""') + '"'
    else if val?
      val
    else
      ''
  rows.map((row) -> row.map(escapeValue).join('\t')).join('\n') + '\n'
 
 
downloadExcelCsv = (rows, attachmentFilename) ->
  blob = makeExcelCsvBlob(rows)  
  a = document.createElement('a')
  a.style.display = 'none'
  a.download = attachmentFilename
  document.body.appendChild(a)
  a.href = URL.createObjectURL(blob)
  a.click()
  URL.revokeObjectURL(a.href)
  a.remove()
  return
 
 
# Example:
rows = [
  ['id', 'name', 'age']
  [1, 'John Doe', 43]
  [2, 'Jane Doe', 42]
  [3, 'Foo', 3]
]
 
window.exampleDownload = -> 
  downloadExcelCsv(rows, 'exported-data.csv')
Если оно сработает, то мне очень повезет)

Исходник тут: http://jsfiddle.net/isak_b/hp6fj/
0
the hardway first
Эксперт JS
2430 / 1812 / 897
Регистрация: 05.06.2015
Сообщений: 3,583
26.09.2018, 08:52 6
Лучший ответ Сообщение было отмечено MadMetal как решение

Решение

MadMetal,
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var asUtf16, downloadExcelCsv, makeExcelCsvBlob, rows, toTsv;
 
asUtf16 = function(str) {
  var buffer, bufferView, i, j, ref, val;
  buffer = new ArrayBuffer(str.length * 2);
  bufferView = new Uint16Array(buffer);
  bufferView[0] = 0xfeff;
  for (i = j = 0, ref = str.length; (0 <= ref ? j <= ref : j >= ref); i = 0 <= ref ? ++j : --j) {
    val = str.charCodeAt(i);
    bufferView[i + 1] = val;
  }
  return bufferView;
};
 
makeExcelCsvBlob = function(rows) {
  return new Blob([asUtf16(toTsv(rows)).buffer], {
    type: "text/csv;charset=UTF-16"
  });
};
 
toTsv = function(rows) {
  var escapeValue;
  escapeValue = function(val) {
    if (typeof val === 'string') {
      return '"' + val.replace(/"/g, '""') + '"';
    } else if (val != null) {
      return val;
    } else {
      return '';
    }
  };
  return rows.map(function(row) {
    return row.map(escapeValue).join('\t');
  }).join('\n') + '\n';
};
 
downloadExcelCsv = function(rows, attachmentFilename) {
  var a, blob;
  blob = makeExcelCsvBlob(rows);
  a = document.createElement('a');
  a.style.display = 'none';
  a.download = attachmentFilename;
  document.body.appendChild(a);
  a.href = URL.createObjectURL(blob);
  a.click();
  URL.revokeObjectURL(a.href);
  a.remove();
};
 
 
// Example:
rows = [['id', 'name', 'age'], [1, 'John Doe', 43], [2, 'Jane Doe', 42], [3, 'Foo', 3]];
 
window.exampleDownload = function() {
  return downloadExcelCsv(rows, 'exported-data.csv');
};
Оно делает вам обычный файл CSV, причем данные там разделены табами.
2
супермизантроп
Эксперт JS
3935 / 2974 / 691
Регистрация: 18.04.2012
Сообщений: 8,623
27.09.2018, 12:01 7
Цитата Сообщение от MadMetal Посмотреть сообщение
Инпутов реально много, все с id
всякая ячейка таблицы уже имеет два индекса: cellIndex и rowIndex, поэтому инпут внутри ячейки и без какого-либо собственного id однозначно идентифицируется... присваивать id инпутам в ячейках -- самая большая глупость из всех возможных
0
1 / 1 / 0
Регистрация: 18.06.2018
Сообщений: 91
05.10.2018, 12:12  [ТС] 8
Цитата Сообщение от kalabuni Посмотреть сообщение
всякая ячейка таблицы уже имеет два индекса: cellIndex и rowIndex, поэтому инпут внутри ячейки и без какого-либо собственного id однозначно идентифицируется... присваивать id инпутам в ячейках -- самая большая глупость из всех возможных
Возможно и глупость, но я благодарен за Ваш комментарий, разберусь, в следующих работах обязательно учту.

Цитата Сообщение от j2FunOnly Посмотреть сообщение
Оно делает вам обычный файл CSV, причем данные там разделены табами.
Отлично. Большое Вам спасибо. Это то что мне нужно. Только у меня будет один вопрос. Я сразу начал писать алгоритм наполнения массива данными из таблицы. Данные в массив я подтягиваю из <p> и <input>, так вот есть следующая загвоздка.

Данный код:
Javascript
1
row[0] = document.getElementById("p11").textContent;
или такой:
Javascript
1
row[0] = "Hello";
Приводит к следущей ошибке.

Кликните здесь для просмотра всего текста

js1p.js:33 Uncaught TypeError: row.map is not a function
at js1p.js:33
at Array.map (<anonymous>)
at toTsv (js1p.js:32)
at makeExcelCsvBlob (js1p.js:16)
at downloadExcelCsv (js1p.js:39)
at generateCSV (js1p.js:62)


В тегах параграфа я храню подписи к таблицам, разумеется я могу от них отказатся, но интересно почему не срабатывает код.
Еще раз спасибо!
0
the hardway first
Эксперт JS
2430 / 1812 / 897
Регистрация: 05.06.2015
Сообщений: 3,583
07.10.2018, 23:17 9
MadMetal, потому что там ожидается массив:
Javascript
1
row[0] = ["column head 1", "column head 2", "column head 3"]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2018, 23:17
Помогаю со студенческими работами здесь

Экспорт в формат dbf
Здравствуйте! С сервером MS SQL EXPRESS 2008 работаю впервые. Да и вообще, с этой СУБД....

Экспорт в формат Xml
Добрый день всем. В 1С не работал(занимаюсь WEB программированием) но знаю что можно базу данных...

Какой фреймворк для Веб лучше/проще?
Стою перед выбором фреймворка для веб на python, ни с одним еще не приходилось иметь дело. И так...

Под какой язык проще переписать программу
Есть программа на языке True basic, она описывает хаотическое поведение системы частиц молекулярной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru