Создать PDF из документации Swagger API

Я использовал пользовательский интерфейс Swagger для отображения своих веб-сервисов REST и разместил его на сервере.

Однако к этой службе Swagger можно получить доступ только на определенном сервере. Если я хочу работать в автономном режиме, знает ли кто-нибудь, как я могу создать статический PDF-файл с помощью пользовательского интерфейса Swagger и работать с ним? Кроме того, PDF-файлом легко поделиться с людьми, у которых нет доступа к серверу.

Большое спасибо!


person Aman Mohammed    schedule 13.05.2015    source источник


Ответы (7)


Удобный способ: Печать / предварительный просмотр через браузер

  1. Скрыть панель редактора
  2. Предварительный просмотр печати (я использовал firefox, другие тоже в порядке)
  3. Измените настройки страницы и распечатайте в pdf

введите описание изображения здесь

person Osify    schedule 21.12.2016
comment
Простой! Документация выходит неплохо. - person ShaTin; 31.05.2017
comment
Вы даже можете выбрать один из двух дизайнов документации, если есть две службы Swagger: editor.swagger.io (новое) и editor2.swagger.io (предыдущее)! - person naXa; 21.12.2017
comment
Эффективный, но с потерями bcos swagger HTML UI имеет несколько вкладок, для параметров метода POST / PUT вы должны выбрать между вкладкой модели и вкладкой значений примера, тогда в версии для печати в PDF одна из них навсегда скрыта :( - person chrisinmtown; 26.09.2018
comment
У меня это не сработало. Каждая конечная точка будет отключена с концом страницы (независимо от того, какую настройку страницы я использовал). Следующая страница тогда начнется в верхней части следующего блока Endpoint. Может, что-то изменилось с тех пор, как был написан этот ответ. - person killa-byte; 08.01.2020
comment
Я все еще считаю, что это работоспособно, возможно, вам придется изменить маржу. Попробуйте из editor.swagger.io - person Osify; 09.01.2020

Я нашел способ, используя https://github.com/springfox/springfox и https://github.com/RobWin/swagger2markup

Использовал Swagger 2 для реализации документации.

person Aman Mohammed    schedule 26.05.2015
comment
привет, я также пытаюсь создать офлайн-документацию, используя swagger. Вы можете создать документацию swagger ?? - person Sunil Rk; 03.06.2015
comment
да, я использовал примеры проектов, интегрировал в них код своего веб-сервиса и смог сгенерировать документацию. - person Aman Mohammed; 03.06.2015
comment
Не могли бы вы вкратце рассказать мне, как я могу интегрировать свой веб-сервис в примеры, которые вы упомянули выше. - person Sunil Rk; 04.06.2015
comment
Проекту swagger2markup требуется ввод JSON REST API. Если вы загрузите этот проект gradle и измените в нем файл swagger.json с вашими данными API, а затем запустите метод Swagger2MarkupConverterTest JUnit: testSwagger2HtmlConversion, он должен сгенерировать для вас HTML в папке build / docs / generated / asciidocAsString проекта. Другими словами, есть 2 вещи. 1) Сначала сгенерируйте формат JSON для вашего REST API с помощью редактора Swagger. 2) Используя этот формат JSON, вы можете использовать проект swagger2markup для создания отдельной HTML-документации API. - person Aman Mohammed; 05.06.2015

Я создал веб-сайт https://www.swdoc.org/, который конкретно посвящен этой проблеме. Таким образом, он автоматизирует swagger.json -> Asciidoc, Asciidoc -> pdf преобразование, как предлагается в ответах. Преимущество этого в том, что вам не нужно выполнять процедуры установки. Он принимает документ спецификации в виде URL-адреса или просто необработанного json. Проект написан на C #, а его страница - https://github.com/Irdis/SwDoc.

ИЗМЕНИТЬ

Было бы неплохо проверить свои спецификации json здесь: http://editor.swagger.io/, если у вас возникли проблемы с SwDoc, например, PDF-файл создается не полностью.

person Irdis    schedule 28.08.2019
comment
спасибо, да, это довольно мило, я использую его для своих рабочих проектов. Я подумываю написать код для поддержки openapi 3.0 в свободное время. - person Irdis; 10.09.2019
comment
Вся слава авторам инструментов, на которые он опирается. - person Irdis; 10.09.2019
comment
@Irdis Пробовал по ссылке. Он позволяет анализировать документ Swagger 2.0, но предоставленный мной документ относится к Open API 3.0, и он не может сгенерировать документ. - person hellowahab; 29.11.2019
comment
Я пробовал swagger 3+ - работает нормально, хотя для примечаний показывает необработанный html ... - person Sasha Bond; 18.03.2020
comment
Это отличный инструмент! Если у вас когда-нибудь возникнут проблемы, как у меня (например, PDF-файл создается неполным), вставьте свой json сюда: editor.swagger.io для автоматической проверки, исправьте проблемы, и на этот раз вам будет хорошо вернуться к инструменту swdoc и сгенерировать его правильно. - person Thales Valias; 03.07.2020
comment
Вам следует добавить автоматическое определение спецификации 3.0. - person dataman; 12.02.2021

Вы можете изменить свой проект REST, чтобы создать необходимые статические документы (html, pdf и т. Д.) При создании проекта.

Если у вас есть проект Java Maven, вы можете использовать приведенный ниже фрагмент pom. Он использует серию плагинов для создания документации в формате pdf и html (ресурсов REST проекта).

  1. rest-api -> swagger.json: плагин swagger-maven
  2. swagger.json -> Asciidoc: плагин swagger2markup-maven
  3. Asciidoc -> PDF: плагин asciidoctor-maven

Имейте в виду, что порядок выполнения имеет значение, поскольку выходные данные одного плагина становятся входными данными для следующего:

<plugin>
    <groupId>com.github.kongchen</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>3.1.3</version>
    <configuration>
        <apiSources>
            <apiSource>
                <springmvc>false</springmvc>
                <locations>some.package</locations>
                <basePath>/api</basePath>
                <info>
                    <title>Put your REST service's name here</title>
                    <description>Add some description</description>
                    <version>v1</version>
                </info>
                <swaggerDirectory>${project.build.directory}/api</swaggerDirectory>
                <attachSwaggerArtifact>true</attachSwaggerArtifact>
            </apiSource>
        </apiSources>
    </configuration>
    <executions>
        <execution>
            <phase>${phase.generate-documentation}</phase>
            <!-- fx process-classes phase -->
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>io.github.robwin</groupId>
    <artifactId>swagger2markup-maven-plugin</artifactId>
    <version>0.9.3</version>
    <configuration>
        <inputDirectory>${project.build.directory}/api</inputDirectory>
        <outputDirectory>${generated.asciidoc.directory}</outputDirectory>
        <!-- specify location to place asciidoc files -->
        <markupLanguage>asciidoc</markupLanguage>
    </configuration>
    <executions>
        <execution>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-swagger</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.asciidoctor</groupId>
    <artifactId>asciidoctor-maven-plugin</artifactId>
    <version>1.5.3</version>
    <dependencies>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>1.5.0-alpha.11</version>
        </dependency>
        <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>jruby-complete</artifactId>
            <version>1.7.21</version>
        </dependency>
    </dependencies>
    <configuration>
        <sourceDirectory>${asciidoctor.input.directory}</sourceDirectory>
        <!-- You will need to create an .adoc file. This is the input to this plugin -->
        <sourceDocumentName>swagger.adoc</sourceDocumentName>
        <attributes>
            <doctype>book</doctype>
            <toc>left</toc>
            <toclevels>2</toclevels>
            <generated>${generated.asciidoc.directory}</generated>
            <!-- this path is referenced in swagger.adoc file. The given file will simply 
                point to the previously create adoc files/assemble them. -->
        </attributes>
    </configuration>
    <executions>
        <execution>
            <id>asciidoc-to-html</id>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>html5</backend>
                <outputDirectory>${generated.html.directory}</outputDirectory>
                <!-- specify location to place html file -->
            </configuration>
        </execution>
        <execution>
            <id>asciidoc-to-pdf</id>
            <phase>${phase.generate-documentation}</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>pdf</backend>
                <outputDirectory>${generated.pdf.directory}</outputDirectory>
                <!-- specify location to place pdf file -->
            </configuration>
        </execution>
    </executions>
</plugin>

Плагин asciidoctor предполагает наличие файла .adoc для работы. Вы можете создать тот, который просто собирает те, которые были созданы плагином swagger2markup:

include::{generated}/overview.adoc[]
include::{generated}/paths.adoc[]
include::{generated}/definitions.adoc[]

Если вы хотите, чтобы ваш сгенерированный html-документ стал частью вашего военного файла, вы должны убедиться, что он присутствует на верхнем уровне - статические файлы в папке WEB-INF не будут обслуживаться. Вы можете сделать это в maven-war-plugin:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <webResources>
            <resource>
                <directory>${generated.html.directory}</directory>
            <!-- Add swagger.pdf to WAR file, so as to make it available as static content. -->
            </resource>
            <resource>
                <directory>${generated.pdf.directory}</directory>
            <!-- Add swagger.html to WAR file, so as to make it available as static content. -->
            </resource>
        </webResources>
    </configuration>
</plugin>

Плагин war работает со сгенерированной документацией - поэтому вы должны убедиться, что эти плагины были выполнены на более ранней стадии.

person Hervian    schedule 29.04.2016
comment
Привет @Hervian. Отличный ответ. Пока я мог бы использовать твой ансер. У меня есть два класса с одинаковым именем, но в разных пакетах. Однако swagger.json содержит определение только для одного из них. Другой отсутствует - person edmond; 02.08.2016
comment
@Hervian У меня были ошибки, пока я не сделал следующее: 1) создал файл src / main / asciidoc / swagger.adoc с содержимым сверху. 2) добавил эти свойства в POM: ‹phase.generate-documentation› process-classes ‹/phase.generate-documentation› ‹сгенерированный.asciidoc.directory› $ {project.build.directory} / api-gen ‹/ сгенерированный. asciidoc.directory ›Затем запустите mvn install, и я не вижу ошибок mvn или плагина, но только файл overview.adoc имеет какое-либо содержимое; файлы definitions.adoc и paths.adoc остаются пустыми. Посоветуйте, пожалуйста. - person chrisinmtown; 17.07.2018

Получите https://mrin9.github.io/RapiPdf пользовательский элемент с множеством функций настройки и локализации.

Отказ от ответственности: я являюсь автором этого пакета

person Mrinmoy    schedule 08.09.2019
comment
только что протестировали, но я не получаю ответа после нажатия кнопки «Создать PDF с тестовой спецификацией» (магазин домашних животных)? - person imehl; 17.09.2019
comment
@imehl Он отлично работает, когда я тестировал себя на mac / chrome, mac / firefox, mac / safari и windows / chrome. Это работает только в веб-браузере, который поддерживает веб-компоненты, такие как Chrome, Firefox и Safari. Если по-прежнему возникают проблемы, зарегистрируйте их в Github github.com/mrin9/RapiPdf. - person Mrinmoy; 19.09.2019
comment
@Mrinmoy У меня была та же проблема, что и у imehl, он открыл новую вкладку, но сразу же закрылся (ubuntu 18.04 + firefox / chrome - тот же результат). Затем я сделал это на окнах, и это сработало как шарм. Спасибо за этот инструмент, он потрясающий. - person Dabux; 21.11.2019
comment
@Dabux никогда не тестировался на ubuntu, но есть одна ситуация, о которой я знаю, когда люди сталкиваются с той же проблемой, что и вы объяснили, и это когда у вас есть какой-либо активный блокировщик as-blocker или всплывающих окон в браузере - person Mrinmoy; 22.11.2019
comment
@Mrinmoy, ты прав, у меня был включен блокировщик рекламы, это из-за этого, а не из-за ОС. - person Dabux; 23.11.2019
comment
@Mrinmoy Я пытаюсь использовать открытый API 3.0 вместо swagger 3.0 и не могу открыть PDF. Для примера Petstore кажется, что он работает нормально. - person hellowahab; 29.11.2019
comment
автор предполагает, что URL-адрес swagger json широко открыт .. нет файрволов и т. д. ??? он должен принимать сам файл или еще лучше работать как локальный npm или что-то в этом роде - person Sasha Bond; 18.03.2020
comment
@SashaBond, раздел API mrin9.github.io/RapiPdf для оформления заказа о том, как вы можете предоставить свой собственный JSON с generatePdf () метод. Кроме того, это веб-компонент, который вы можете поместить в любой HTML-код, как и любой другой тег. Вы также можете поместить этот тег на домашнюю страницу своей организации или, если вы хотите работать без Интернета, вы можете поместить его в локальный файл html на своем рабочем столе. - person Mrinmoy; 18.03.2020
comment
Я получил ответ с блокировкой Mixed. Не работает, даже если я отключил блокировку рекламы - person Voilin; 09.02.2021

Для меня самым простым решением было импортировать swagger (v2) в Postman, а затем перейти в веб-представление. Здесь вы можете выбрать режим просмотра «один столбец» и использовать браузер для печати в формате pdf. Не автоматизированное / интегрированное решение, но подходит для одноразового использования. Он обрабатывает ширину бумаги намного лучше, чем печать из editor2.swagger.io, где полосы прокрутки вызывают скрытие частей содержимого.

person Simon    schedule 02.07.2018
comment
попытался использовать это, но печать через веб-страницу добавляет несколько ссылок и другую информацию. - person hellowahab; 29.11.2019
comment
Да, я должен был упомянуть об этом. Не было проблемой для моего использования. - person Simon; 03.08.2020

Мне нужно было что-то относительно быстрое и простое, с минимальной установкой программного обеспечения. Я искал что-то, что можно вставить в текстовый документ, чтобы показать, что API существует; Мне не требовался уровень интерактивности или способность копировать операции.

У меня уже было программное обеспечение под названием PicPick, инструмент для создания снимков экрана, который может захватывать прокручивающееся окно (он прокручивает, скриншоты и сшивает вместе, создавая одно невероятно высокое изображение)

Он также может быть сохранен в формате PDF, но плохо справляется с этим с точки зрения размера бумаги, поэтому я передал его через Publisher.

  • Провел мой проект netcore API с поддержкой чванства
  • Браузер появился со страницей swaggergen, чтобы попробовать, чего для этого достаточно.
  • Скрыть кнопки пробного просмотра: щелкнуть правой кнопкой мыши Попробовать ›› Проверить элемент ›› Добавить класс CSS ›› display: none для ознакомления
  • Значок PicPick на панели задач ›› захват ›› окно прокрутки
  • Щелкните панель содержимого браузера.
  • Примечание. PP может прокручивать окно только в том случае, если курсор остается над ним - по крайней мере, это то, что я обнаружил.
  • Подождите некоторое время, пока он многократно прокручивает, снимает скриншоты и объединяет изображения.
  • Сохраните результат как PNG
  • Загрузите Publisher, установите собственный размер страницы (размеры PNG, разделенные на 96) дюймов.
  • Вставьте изображение и сбросьте его до размера 100%
  • Сохранить как PDF
person Caius Jard    schedule 25.06.2021