Подтвердить что ты не робот

Внедрение SVG в PDF (экспорт SVG в PDF с использованием JS)

Начальные точки: у меня нет сервера, который может предоставить что-либо, кроме статических файлов. И у меня есть SVG-элемент (динамически созданный) в моем <body>, который я хочу экспортировать в векторный формат, предпочтительно PDF или SVG.

Я начал изучать использование уже существующего lib jsPDF и downloadify. Он работал нормально. К сожалению, это не поддерживает SVG, только текст.

Я читал о возможностях формата PDF для вставки изображений SVG, и кажется включен с Acrobat Reader 5 (вместе с плагином ImageViewer). Но это не сработает. Я пробовал с 3 различными читателями PDF без успеха.

Означает ли это, что PDF файлы потеряли поддержку внедрения SVG? Я ничего не нашел по этому поводу.

У меня есть два вопроса; можно ли это решить? И если да, то каковы спецификации для внедрения SVG внутри PDF файла? С этой информацией я могу самостоятельно создать эту поддержку в jsPDF.

Требования к поддержке браузера: Safari, Chrome и Firefox. Версии, поддерживающие SVG.

4b9b3361

Ответ 1

Для тех, кто ищет JS-решение: PDFKit, похоже, является превосходным решением для создания PDF из JS в эти дни, и он поддерживает все примитивы геометрии SVG (включая интерпретацию строк геометрии path) из коробки. Все, что потребуется для рендеринга существующего содержимого SVG, будет DOM-ходоком, который отслеживает стилизацию и наследование CSS, если вам не нужны сложные вещи, такие как символы и т.д.

Мне не удалось с эскизной поддержкой SVG компиляции jsPDF/ svgToPdf, упомянутой в другом ответе, и исходный код этих двух не выглядел очень хорошо подготовленный и полный для меня.

Ответ 2

Я отвечу на свой вопрос. Я закончил использование DocRaptor, который можно назвать клиентской стороной из JavaScript. Это технически решает мою проблему, хотя это несвободное решение. Если бы я мог ответить на сервер, я мог бы использовать wkhtmltopdf как предложил Mic.

Ответ 3

jsPDF имеет плагин для этого: svgToPdf:

https://github.com/ahwolf/jsPDF/blob/master/jspdf.plugin.svgToPdf.js

Я не пробовал, но это может позволить отказаться от использования внешнего API и/или полагаться на серверное решение.

Ответ 4

Вы пробовали WKHTMLTOPDF? Это бесплатный инструмент, основанный на webkit.
Мы написали небольшой учебник здесь.

На Mac с Safari или Chrome вы можете сохранить HTML-страницу со встроенным SVG в PDF.
Так как эти браузеры используют WKHTMLTOPDF внутри, возможно, это также сработает для вас.

Ответ 5

Конвертер EVO HTML в PDF поддерживает преобразование SVG, встроенного в HTML в PDF. Вы можете увидеть пример этой функции здесь: http://www.evopdf.com/demo/HTML_to_PDF/HTML5_Features/SVG_to_PDF.aspx. Пример кода для этого:

// Create a HTML to PDF converter object with default settings
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();

// Convert the HTML page with SVG to a PDF document in a memory buffer
byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(urlHtmlWithSVG);

// Send the PDF as response to browser

// Set response content type
Response.AddHeader("Content-Type", "application/pdf");

// Instruct the browser to open the PDF file as an attachment or inline
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=SVG_to_PDF.pdf; size={0}", outPdfBuffer.Length.ToString()));

// Write the PDF document buffer to HTTP response
Response.BinaryWrite(outPdfBuffer);

// End the HTTP response and stop the current page processing
Response.End();