Как сделать HTML-страницу доступной для скачивания в формате PDF

Я уже опубликовал ответ о том, как это сделать, используя Apache Drill. Однако, если вы знакомы с Python, вы можете сделать это, используя Pandas и PyArrow !

Установить зависимости

Использование pip:

pip install pandas pyarrow

или с помощью conda:

conda install pandas pyarrow -c conda-forge

Преобразование CSV в паркет в куски

# csv_to_parquet.py

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

csv_file = '/path/to/my.tsv'
chunksize = 100_000

csv_stream = pd.read_csv(csv_file, sep='\t', chunksize=chunksize, low_memory=False)

for i, chunk in enumerate(csv_stream):
    print("Chunk", i)
    if i == 0:
        # Guess the schema of the CSV file from the first chunk
        parquet_schema = pa.Table.from_pandas(df=chunk).schema
        # Open a Parquet file for writing
        parquet_writer = pq.ParquetWriter(parquet_file, parquet_schema, compression='snappy')
    # Write CSV chunk to the parquet file
    table = pa.Table.from_pandas(chunk, schema=parquet_schema)
    parquet_writer.write_table(table)

parquet_writer.close()

У меня нет сравнил этот код с версией Apache Drill, но по моему опыту это довольно быстро, конвертируя десятки тысяч строк в секунду (это, конечно, зависит от файла CSV!).

0
задан Tanmay Mitra 17 February 2019 в 16:49
поделиться

2 ответа

Я пытался сделать это на одном из своих сайтов и нашел этот код полезным.

https://codepen.io/AshikNesin/pen/KzgeYX

    var doc = new jsPDF();
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};

$('#cmd').click(function () {
    doc.fromHTML($('#content').html(), 15, 15, {
        'width': 170,
            'elementHandlers': specialElementHandlers
    });
    doc.save('sample-file.pdf');
});
0
ответ дан SuperSafie 17 February 2019 в 16:49
поделиться

Ну, я думаю, что это очень «просто». Вы можете использовать некоторые библиотеки или классы, например:

https://parall.ax/products/jspdf

Пример:

Извлеките div из вашей текущей веб-страницы:


// pick you DOM element and extract HTML as String
const html = document.querySelector("#element").innerHTML;

const pdf = new jsPDF('p', 'en', 'letter');
const handlers = {audio: () => false};
const config = {top: 80, bottom: 60, left: 40, width: 522};

pdf.fromHTML(
    html,
    config.left,
    config.top,
    {config.width, handlers},
    (dispose) => pdf.save('example.pdf'),
    config
);

0
ответ дан Olaf Erlandsen 17 February 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: