Skip to content

Создание из Markdown

Преобразуйте Markdown-контент в аккуратно отформатированный PDF-документ. Поддерживаются заголовки, абзацы, полужирный и курсивный текст, списки, блоки кода, цитаты и многое другое.

Быстрый пример

Python

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Hello\n\nWorld")
pdf.save("out.pdf")

WASM

import { WasmPdf } from "pdf-oxide-wasm";
import { writeFileSync } from "fs";

const pdf = WasmPdf.fromMarkdown("# Hello\n\nWorld");
writeFileSync("out.pdf", pdf.toBytes());

Rust

use pdf_oxide::api::Pdf;

let pdf = Pdf::from_markdown("# Hello\n\nWorld")?;
pdf.save("out.pdf")?;

Go

package main

import (
    "log"
    pdfoxide "github.com/yfedoseev/pdf_oxide/go"
)

func main() {
    pdf, err := pdfoxide.FromMarkdown("# Hello\n\nWorld")
    if err != nil { log.Fatal(err) }
    defer pdf.Close()

    if err := pdf.Save("out.pdf"); err != nil { log.Fatal(err) }
}

C#

using PdfOxide;

using var pdf = Pdf.FromMarkdown("# Hello\n\nWorld");
pdf.Save("out.pdf");

Java

import fyi.oxide.pdf.Pdf;
import java.nio.file.Path;

try (Pdf pdf = Pdf.fromMarkdown("# Hello\n\nWorld")) {
    pdf.saveTo(Path.of("out.pdf"));
}

PHP

use PdfOxide\Pdf;

$pdf = Pdf::fromMarkdown("# Hello\n\nWorld");
file_put_contents('out.pdf', $pdf->save());

Ruby

require 'pdf_oxide'

PdfOxide::Pdf.from_markdown("# Hello\n\nWorld") { |pdf| pdf.save('out.pdf') }

C++

#include <pdf_oxide/pdf_oxide.hpp>

auto pdf = pdf_oxide::Pdf::from_markdown("# Hello\n\nWorld");
pdf.save("out.pdf");

Swift

import PdfOxide

let pdf = try Pdf.fromMarkdown("# Hello\n\nWorld")
try pdf.save("out.pdf")

Kotlin

import fyi.oxide.pdf.Pdf

Pdf.fromMarkdown("# Hello\n\nWorld").use { it.saveTo(java.nio.file.Path.of("out.pdf")) }

Dart

import 'package:pdf_oxide/pdf_oxide.dart';

final pdf = Pdf.fromMarkdown('# Hello\n\nWorld');
pdf.save('out.pdf');

R

library(pdfoxide)

pdf <- pdf_from_markdown("# Hello\n\nWorld")
pdf_save(pdf, "out.pdf")

Julia

using PdfOxide

pdf = from_markdown("# Hello\n\nWorld")
save(pdf, "out.pdf")

Zig

const pdf_oxide = @import("pdf_oxide");

var pdf = try pdf_oxide.Pdf.fromMarkdown("# Hello\n\nWorld");
try pdf.save("out.pdf");

Scala

import fyi.oxide.pdf.Pdf
import scala.util.Using

Using.resource(Pdf.fromMarkdown("# Hello\n\nWorld"))(_.saveTo(java.nio.file.Path.of("out.pdf")))

Clojure

(require '[pdf-oxide.core :as pdf])

(with-open [p (pdf/from-markdown "# Hello\n\nWorld")]
  (pdf/save p "out.pdf"))

Objective-C

#import "POXPdfOxide.h"

NSError *err = nil;
POXPdf *pdf = [POXPdf fromMarkdown:@"# Hello\n\nWorld" error:&err];
[pdf saveToPath:@"out.pdf" error:&err];

Elixir

{:ok, pdf} = PdfOxide.from_markdown("# Hello\n\nWorld")
PdfOxide.save(pdf, "out.pdf")

Поддерживаемый синтаксис Markdown

Синтаксис Markdown Описание
Заголовок 1 # Title Крупный полужирный заголовок
Заголовок 2 ## Section Средний полужирный заголовок
Заголовок 3 ### Subsection Небольшой заголовок
Заголовки 4–6 #### ... Второстепенные заголовки
Абзац Обычный текст с пустой строкой Основной текст с переносом слов
Полужирный **bold** Полужирный текст
Курсив *italic* Курсивный текст
Маркированный список - item или * item Список с маркерами
Нумерованный список 1. item Нумерованный список
Блок кода ``` огороженные блоки Моноширинный код
Встроенный код `code` Встроенный моноширинный
Цитата > quoted text Цитата с отступом

Полный справочник по API

Pdf::from_markdown(content) (статический метод)

Создаёт PDF из Markdown-контента с настройками по умолчанию (страница Letter, поля 72pt, шрифт Helvetica 12pt).

Rust:

use pdf_oxide::api::Pdf;

let pdf = Pdf::from_markdown("# Report\n\nFindings are summarized below.")?;
pdf.save("report.pdf")?;

JavaScript:

import { WasmPdf } from "pdf-oxide-wasm";
import { writeFileSync } from "fs";

const pdf = WasmPdf.fromMarkdown("# Report\n\nFindings are summarized below.");
writeFileSync("report.pdf", pdf.toBytes());

Python:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Report\n\nFindings are summarized below.")
pdf.save("report.pdf")

Go:

pdf, err := pdfoxide.FromMarkdown("# Report\n\nFindings are summarized below.")
if err != nil { log.Fatal(err) }
defer pdf.Close()
_ = pdf.Save("report.pdf")

C#:

using var pdf = Pdf.FromMarkdown("# Report\n\nFindings are summarized below.");
pdf.Save("report.pdf");

Java:

try (Pdf pdf = Pdf.fromMarkdown("# Report\n\nFindings are summarized below.")) {
    pdf.saveTo(Path.of("report.pdf"));
}

PHP:

$pdf = Pdf::fromMarkdown("# Report\n\nFindings are summarized below.");
file_put_contents('report.pdf', $pdf->save());

Ruby:

PdfOxide::Pdf.from_markdown("# Report\n\nFindings are summarized below.") { |p| p.save('report.pdf') }

C++:

auto pdf = pdf_oxide::Pdf::from_markdown("# Report\n\nFindings are summarized below.");
pdf.save("report.pdf");

Swift:

let pdf = try Pdf.fromMarkdown("# Report\n\nFindings are summarized below.")
try pdf.save("report.pdf")

Kotlin:

Pdf.fromMarkdown("# Report\n\nFindings are summarized below.")
    .use { it.saveTo(java.nio.file.Path.of("report.pdf")) }

Dart:

final pdf = Pdf.fromMarkdown('# Report\n\nFindings are summarized below.');
pdf.save('report.pdf');

R:

pdf <- pdf_from_markdown("# Report\n\nFindings are summarized below.")
pdf_save(pdf, "report.pdf")

Julia:

pdf = from_markdown("# Report\n\nFindings are summarized below.")
save(pdf, "report.pdf")

Zig:

var pdf = try pdf_oxide.Pdf.fromMarkdown("# Report\n\nFindings are summarized below.");
try pdf.save("report.pdf");

Scala:

Using.resource(Pdf.fromMarkdown("# Report\n\nFindings are summarized below."))(
    _.saveTo(java.nio.file.Path.of("report.pdf")))

Clojure:

(with-open [p (pdf/from-markdown "# Report\n\nFindings are summarized below.")]
  (pdf/save p "report.pdf"))

Objective-C:

NSError *err = nil;
POXPdf *pdf = [POXPdf fromMarkdown:@"# Report\n\nFindings are summarized below." error:&err];
[pdf saveToPath:@"report.pdf" error:&err];

Elixir:

{:ok, pdf} = PdfOxide.from_markdown("# Report\n\nFindings are summarized below.")
PdfOxide.save(pdf, "report.pdf")

Сигнатура Python:

Pdf.from_markdown(
    content: str,
    title: str | None = None,
    author: str | None = None
) -> Pdf

PdfBuilder::new().from_markdown(content) (паттерн «строитель»)

Используйте PdfBuilder, когда нужен контроль над размером страницы, полями, размером шрифта или метаданными.

Rust:

use pdf_oxide::api::PdfBuilder;
use pdf_oxide::writer::PageSize;

let pdf = PdfBuilder::new()
    .title("Quarterly Report")
    .author("Finance Team")
    .page_size(PageSize::A4)
    .margin(54.0)           // 0.75 inch margins
    .font_size(11.0)
    .line_height(1.6)
    .from_markdown("# Q4 Report\n\n## Revenue\n\nRevenue grew **12%** year-over-year.")?;

pdf.save("quarterly.pdf")?;

Продвинутые примеры

Многораздельный документ

use pdf_oxide::api::Pdf;

let markdown = r#"
# Annual Report 2025

## Executive Summary

The company achieved **record growth** in all key metrics.

## Financial Highlights

- Revenue: $142M (+18%)
- Net Income: $31M (+24%)
- Operating Margin: 21.8%

## Strategic Priorities

1. Expand international presence
2. Launch next-generation platform
3. Invest in R&D capabilities

### Timeline

> Phase 1 launches in Q2, with full rollout expected by Q4.

## Technical Appendix

```json
{
  "version": "2.1.0",
  "release_date": "2025-03-15"
}

"#;

let pdf = Pdf::from_markdown(markdown)?; pdf.save(“annual_report.pdf”)?;


### Python с метаданными

```python
from pdf_oxide import Pdf

content = """
# Meeting Notes

## Attendees

- Alice (Engineering)
- Bob (Product)
- Carol (Design)

## Action Items

1. **Alice**: Complete API review by Friday
2. **Bob**: Update roadmap with new timeline
3. **Carol**: Share mockups for dashboard redesign
"""

pdf = Pdf.from_markdown(content, title="Meeting Notes", author="Alice")
pdf.save("meeting_notes.pdf")

Чтение Markdown из файла

from pdf_oxide import Pdf

with open("README.md") as f:
    content = f.read()

pdf = Pdf.from_markdown(content, title="README")
pdf.save("readme.pdf")
import { WasmPdf } from "pdf-oxide-wasm";
import { readFileSync, writeFileSync } from "fs";

const content = readFileSync("README.md", "utf-8");
const pdf = WasmPdf.fromMarkdown(content);
writeFileSync("readme.pdf", pdf.toBytes());
use pdf_oxide::api::Pdf;

let content = std::fs::read_to_string("README.md")?;
let pdf = Pdf::from_markdown(&content)?;
pdf.save("readme.pdf")?;

Связанные страницы