واجهة برمجة تحويل الكتب الإلكترونية إلى PDF - إنشاء كتب PDF احترافية

حوّل محتوى الكتب إلى ملفات PDF منسقة باحترافية مع طباعة أنيقة وترقيم تلقائي للصفحات وجدول محتويات وأكثر من 150 خيار تخصيص. مثالي للنشر الذاتي وإنشاء المخطوطات.

ماذا يمكنك أن تفعل؟
كتب PDF احترافية

حوّل الروايات والمخطوطات والمحتوى متعدد الفصول إلى ملفات PDF جاهزة للطباعة مع طباعة أنيقة وترقيم تلقائي للصفحات.

جودة إنتاجية

مخرجات عالية الجودة بحجم A4/A5/Letter مع صفحة غلاف وصفحة تعليقات وجدول محتويات وصفحة حقوق نشر. يدعم حتى 500 صفحة.

أكثر من 150 خيار تخصيص

تحكم في الخطوط والتباعد والهوامش والألوان والتخطيط. تتكيف الهوامش تلقائياً حسب حجم الخط لمنع تداخل النص.

99.9 % وقت التشغيل
4585.9ms الاستجابة
5 req/s
2 الأرصدة / الطلب

Convert to PDF

POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file
المعامل النوع مطلوب الوصف
api_key string Yes Your API authentication key (send in Authorization header or as parameter)
file_url string Yes Public URL to JSON file containing book data (metadata, chapters, options)
Why file URL? POST request size limits can truncate large book content. This endpoint accepts a URL to a JSON file hosted on your server, avoiding size restrictions.

JSON File Structure

Your JSON file at file_url should contain:

المعامل النوع مطلوب الوصف
template string Yes Template name: elegant-novel
metadata object Yes Book metadata (title, author, etc.)
metadata.title string Yes Book title
metadata.author string Yes Author name
metadata.description string Optional Book description/blurb (supports multiple paragraphs with \n\n)
metadata.year integer Optional Publication year (default: current year)
metadata.publisher string Optional Publisher name
metadata.isbn string Optional ISBN number
metadata.series string Optional Book series name (shown on cover)
metadata.subtitle string Optional Book subtitle (shown on cover)
metadata.cover_image string Optional Cover image URL
chapters array Yes Array of chapter objects (min: 1)
chapters[].title string Yes Chapter title
chapters[].content string Yes Chapter content (supports multiple paragraphs with \n\n)
options object Optional Customization options (150+ available)
options.format string Optional A4 | A5 | Letter (default: A4)
options.chapter_content_font_size string Optional Font size (e.g., "12pt", "16pt") - margins auto-adjust (default: 12pt)
options.chapter_content_line_height string Optional Line height (e.g., "1.6", "1.8") (default: 1.6)
options.meta_fields array Optional Custom metadata fields: [{"key":"genre","label":"Genre"}]
texts object Optional Text customizations (e.g., copyright_text, publisher_text)

JSON File Example

1. Create book.json file on your server:
{
  "template": "elegant-novel",
  "metadata": {
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald",
    "subtitle": "A Novel of the Jazz Age",
    "series": "American Classics",
    "description": "A story of decadence and excess...\n\nSet in the summer of 1922...",
    "year": 1925,
    "publisher": "Charles Scribner's Sons",
    "genre": "Literary Fiction",
    "themes": "American Dream, wealth, love, betrayal",
    "language_name": "English",
    "edition": "First Edition"
  },
  "chapters": [
    {
      "title": "Chapter I",
      "content": "In my younger and more vulnerable years...\n\nAnd, after boasting this way..."
    },
    {
      "title": "Chapter II",
      "content": "About half way between West Egg and New York..."
    }
  ],
  "options": {
    "format": "A4",
    "chapter_content_font_size": "14pt",
    "chapter_content_line_height": "1.7",
    "chapter_title_font_size": "28pt",
    "meta_fields": [
      {"key": "genre", "label": "Genre"},
      {"key": "themes", "label": "Themes"},
      {"key": "language_name", "label": "Language"},
      {"key": "edition", "label": "Edition"}
    ]
  },
  "texts": {
    "annotation_heading_text": "About this book",
    "copyright_text": "Copyright © {year} {author}. All rights reserved.",
    "publisher_text": "Published by {publisher}"
  }
}
2. Upload to your server (e.g., https://yourdomain.com/books/book.json)
3. Call API with file_url:

Integration Examples

curl -X POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/book.json"}'
const response = await fetch('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    file_url: 'https://yourdomain.com/books/book.json'
  })
});
const result = await response.json();
console.log(result.pdf_url);
$response = Http::withHeaders([
    'Authorization' => 'Bearer YOUR_API_KEY'
])->post('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', [
    'file_url' => 'https://yourdomain.com/books/book.json'
]);
$pdf_url = $response->json()['pdf_url'];
import requests

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "file_url": "https://yourdomain.com/books/book.json"
}
r = requests.post('https://api.yeb.to/v1/ebooks/pdf/convert-from-file', json=payload, headers=headers)
print(r.json()['pdf_url'])

Response Examples

{
  "success": true,
  "pdf_url": "https://yeb.to/storage/ebooks/ebook_abc123.pdf",
  "pdf_size": 860031,
  "template": "elegant-novel",
  "generated_at": "2026-01-07T14:30:00+02:00",
  "response_code": 200,
  "response_time_ms": 4773
}
{
  "error": "Metadata field 'title' is required",
  "response_code": 400,
  "response_time_ms": 45
}

رموز الاستجابة

الرمزالوصف
200 Successتمت معالجة الطلب بنجاح.
400 Bad Requestفشل التحقق من المدخلات.
401 Unauthorizedمفتاح API مفقود أو خاطئ.
403 Forbiddenالمفتاح غير نشط أو غير مسموح.
429 Rate Limitطلبات كثيرة جدًا.
500 Server Errorفشل غير متوقع.
Customization

The elegant-novel template supports 150+ customization options including:

  • Font sizes, families, and weights
  • Line heights and spacing
  • Colors and opacity
  • Margins and padding
  • Custom Google Fonts
  • Meta fields for annotation page
  • Auto-adjusting page margins
Full Customization Guide

ebooks/pdf/convert-from-file

ebooks/pdf/convert-from-file 2.0000 credits

Parameters

API Key
header · string · required
File URL
body · string · required

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

واجهة برمجة تحويل الكتب الإلكترونية إلى PDF - إنشاء كتب PDF احترافية — Practical Guide

A hands-on guide to واجهة برمجة تحويل الكتب الإلكترونية إلى PDF - إنشاء كتب PDF احترافية: converting book content into professional PDFs with customizable typography, automatic page numbering, table of contents, and elegant formatting. Perfect for ebook publishing, document generation, and print-ready manuscripts.

#What Ebooks to PDF solves

Send structured book content (metadata, chapters) and receive a professionally formatted PDF with automatic page numbering, table of contents, cover page, and annotation page. Ideal for self-publishing, manuscript generation, print-on-demand, and document archival. Supports 150+ customization options including fonts, spacing, margins that auto-adjust based on font size.

#Endpoint & when to use it

#POST https://api.yeb.to/v1/ebooks/pdf/convert-from-file

  • Best for: Converting novels, short stories, manuals, reports, or any multi-chapter content into print-ready PDFs.
  • How it works: We render your content using the elegant-novel template with Blade + Puppeteer/Chromium for pixel-perfect output.
  • Output format: High-quality A4/A5/Letter PDFs with professional typography and automatic layout.
  • Processing time: ~2-5 seconds depending on content length and customization complexity.

#Quick start

Step 1: Create a JSON file with your book data and upload it to a public URL

# book.json (minimal example)
{
  "template": "elegant-novel",
  "metadata": {
    "title": "The Great Gatsby",
    "author": "F. Scott Fitzgerald"
  },
  "chapters": [
    {
      "title": "Chapter I",
      "content": "In my younger and more vulnerable years..."
    }
  ]
}

Step 2: Call the API with the file URL

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/book.json"}'
Why file_url? Large books can exceed POST size limits. By hosting your JSON file and sending only the URL, you avoid size restrictions and can generate books up to 500 pages.

#Parameters that actually matter

ParamRequiredWhat to pass in practiceWhy it matters
api_key Yes Send in Authorization header: Bearer YOUR_KEY. Never expose in frontend code. Auth & credit tracking.
file_url Yes Public URL to your JSON file containing book data (template, metadata, chapters, options). Avoids POST size limits for large books.

#JSON file structure

Your JSON file at file_url must contain:

FieldRequiredWhat to passWhy it matters
template Yes Currently only elegant-novel is supported. Determines the PDF layout style.
metadata Yes Object with title and author at minimum. Can include description, year, publisher, etc. Populates cover page and document properties.
chapters Yes Array of objects, each with title and content. Minimum 1 chapter required. The actual book content to render.
options No 150+ customization options for fonts, spacing, colors, margins, etc. Fine-tune typography and layout.
texts No Override default text labels (e.g., copyright notice, publisher text). Localization and branding.

#Key metadata fields

FieldUse it forNotes
titleBook title (required)Shown on cover and headers.
authorAuthor name (required)Shown on cover and headers.
descriptionBook blurb/synopsisAppears on annotation page. Use \n\n for multiple paragraphs.
subtitleBook subtitleOptional subtitle on cover page.
seriesSeries nameShown on cover above title.
yearPublication yearDefaults to current year if omitted.
publisherPublisher nameShown on cover footer and copyright page.
isbnISBN numberOptional, shown on copyright page.
cover_imageCover illustration URLImage displayed on cover page.
Custom fieldsGenre, themes, etc.Add any custom fields; use options.meta_fields to display them.

#Chapter formatting

Each chapter object requires:

  • title — The chapter heading (e.g., "Chapter I", "Prologue").
  • content — The chapter text. Use \n\n to separate paragraphs.

Optional chapter fields:

  • subtitle — Chapter subtitle (shown below chapter title).
  • number — Chapter number (for display if using chapter_number_format).

#Customization options that matter

#Typography & spacing

OptionDefaultUse case
chapter_content_font_size12ptMain text size. Margins auto-adjust when changed (14pt, 16pt, etc.).
chapter_content_line_height1.6Line spacing. Higher values (1.8, 2.0) improve readability.
chapter_title_font_size28ptChapter heading size.
chapter_content_text_indent15ptFirst line indent for paragraphs.
chapter_content_paragraph_spacingAutoSpace between paragraphs (auto-calculated based on font size).

#Page format & orientation

OptionValuesUse case
formatA4, A5, LetterPage size. A4 is default (210×297mm).
orientationportrait, landscapePage orientation. Portrait is default.

#Custom metadata fields

Display additional information on the annotation page:

"metadata": {
  "title": "My Book",
  "author": "Jane Doe",
  "genre": "Science Fiction",
  "themes": "AI, humanity, future",
  "language_name": "English"
},
"options": {
  "meta_fields": [
    {"key": "genre", "label": "Genre"},
    {"key": "themes", "label": "Themes"},
    {"key": "language_name", "label": "Language"}
  ]
}

Any field in metadata can be displayed by adding it to meta_fields.

#Toggle sections on/off

OptionDefaultDescription
include_covertrueShow cover page with title, author, publisher.
include_annotationtrueShow annotation page with description and metadata.
include_copyrighttrueShow copyright page at the end.
chapter_show_titletrueShow chapter titles.
chapter_show_headertrueShow running headers on chapter pages.

#Reading & acting on responses

{
  "success": true,
  "pdf_url": "https://yeb.to/storage/ebooks/ebook_abc123.pdf",
  "pdf_size": 860031,
  "template": "elegant-novel",
  "generated_at": "2026-01-07T14:30:00+02:00",
  "response_code": 200,
  "response_time_ms": 4773
}
  • pdf_url — Direct download URL. Files are kept for 24 hours, then auto-deleted.
  • pdf_size — File size in bytes. Useful for bandwidth estimation.
  • template — Template used for generation (currently only elegant-novel).
  • generated_at — ISO 8601 timestamp. Use for cache invalidation or logging.
  • response_time_ms — Processing time. Typically 2-5 seconds for standard books.

#Typical errors & how to fix

{ "error": "Metadata field 'title' is required", "response_code": 400 }
{ "error": "At least one chapter is required", "response_code": 400 }
{ "error": "Template 'unknown' not found", "response_code": 404 }
  • 400 validation error: Check that metadata.title, metadata.author, and at least one chapter are provided.
  • 401 invalid key: Verify your API key is correct and has sufficient credits.
  • 404 template not found: Use elegant-novel as the template name.
  • 500 generation failed: Check for malformed JSON or extremely large content. Contact support if persists.

#Troubleshooting & field notes

  1. File URL not accessible: Ensure your JSON file is publicly accessible (no auth required). Test by opening the URL in a browser - it should download/display the JSON. Check CORS headers if serving from a different domain.
  2. Invalid JSON format: Validate your JSON file before uploading. Use a JSON validator or jq to check syntax. Common errors: trailing commas, unquoted keys, smart quotes instead of straight quotes.
  3. Text overlaps page numbers: The API auto-adjusts margins based on chapter_content_font_size. If using very large fonts (>20pt), verify the output. Margins scale automatically: 12pt = 22mm bottom, 16pt = 27mm bottom, 20pt = 32mm bottom.
  4. Fonts not loading: Ensure options.include_fonts is true (default). For custom fonts, use options.custom_fonts with Google Fonts URLs.
  5. Paragraphs not separating: Use \n\n (double newline) in chapter content to separate paragraphs, not single \n.
  6. Custom metadata not showing: Add the field to both metadata object AND options.meta_fields array with matching key.
  7. Processing timeout: Very long books (>500 pages) may timeout. Processing time: 10-50 pages = 5-15s, 50-200 pages = 30-60s, 200-500 pages = 2-3 minutes. Consider splitting into volumes if needed.
  8. PDF file expires: PDFs are auto-deleted after 24 hours. Download immediately after generation or store on your own CDN.
  9. Inconsistent spacing: Use the same chapter_content_line_height value for all requests to maintain consistency across documents.

#Best practices

  • Host JSON files reliably: Use a CDN or reliable hosting for your JSON files. Ensure files remain accessible for the duration of the API call (2-3 minutes for large books).
  • Validate JSON before upload: Use a JSON validator to catch syntax errors. Invalid JSON will fail immediately with a 400 error.
  • Use descriptive filenames: Name files clearly (e.g., book-{id}-{timestamp}.json) for easier debugging and tracking.
  • Cache responses: Same file_url = same output. Cache PDF URLs for 24h to avoid regenerating identical documents.
  • Pre-validate content: Check for required fields (title, author, chapters) before creating JSON files.
  • Use consistent font sizes: Pick one base font size (12pt, 14pt, or 16pt) for your brand and stick with it across all books.
  • Store original JSON: Keep the JSON file for regeneration if needed. PDFs expire after 24h but JSON can be reused indefinitely.
  • Test with real content: Short test chapters may not reveal pagination issues. Use realistic chapter lengths (2000+ words).
  • Monitor response times: Small books: 5-15s, Medium: 30-60s, Large: 2-3 minutes. If consistently slower, check file_url accessibility.
  • Handle 5xx errors gracefully: Implement retry logic with exponential backoff (wait 5s, then 10s, then 20s) for server errors.

#Real-world examples

Example 1: Self-publishing platform

Create mystery-novel.json:

{
  "template": "elegant-novel",
  "metadata": {
    "title": "Murder on the Orient Express",
    "author": "Agatha Christie",
    "series": "Hercule Poirot Mysteries",
    "description": "A luxurious train journey turns deadly...",
    "year": 1934,
    "publisher": "Collins Crime Club",
    "genre": "Mystery",
    "themes": "Murder, investigation, justice"
  },
  "chapters": [
    {"title": "Part I: The Facts", "content": "It was five o'clock on a winter's morning..."},
    {"title": "Part II: The Evidence", "content": "In a small room..."}
  ],
  "options": {
    "format": "A5",
    "chapter_content_font_size": "11pt",
    "meta_fields": [
      {"key": "genre", "label": "Genre"},
      {"key": "themes", "label": "Themes"}
    ]
  }
}

Call API:

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/books/mystery-novel.json"}'

Example 2: Technical manual with custom branding

Create tech-manual.json:

{
  "template": "elegant-novel",
  "metadata": {
    "title": "Product Installation Guide",
    "author": "TechCorp Engineering",
    "publisher": "TechCorp Inc.",
    "year": 2026
  },
  "chapters": [
    {"title": "1. System Requirements", "content": "Before installation..."},
    {"title": "2. Installation Steps", "content": "Follow these steps..."},
    {"title": "3. Troubleshooting", "content": "If you encounter issues..."}
  ],
  "options": {
    "chapter_content_font_size": "12pt",
    "include_annotation": false,
    "chapter_show_number": true
  },
  "texts": {
    "copyright_text": "© {year} TechCorp Inc. All rights reserved.",
    "chapter_number_format": "Section {n}"
  }
}

Call API:

curl -X POST "https://api.yeb.to/v1/ebooks/pdf/convert-from-file" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://yourdomain.com/manuals/tech-manual.json"}'

#API Changelog

2026-01-07
Auto-adjusting margins: Page margins now automatically scale based on chapter_content_font_size. Larger fonts get more top/bottom spacing to prevent overlap with headers and page numbers. Fixed: Text no longer overlaps page numbers on multi-page chapters.
2026-01-06
Custom metadata fields: Added options.meta_fields to display custom metadata on annotation page. Fixed: Custom metadata fields (genre, themes, etc.) now properly render when specified.
2026-01-05
Cleanup command: Added automatic cleanup of PDFs older than 24 hours. Files are now auto-deleted to save storage. Performance: Improved Puppeteer rendering speed by 30% for documents >50 pages.
2025-12-20
Typography improvements: Added 150+ customization options for fonts, spacing, colors, and margins. Google Fonts support with PT Serif, Bad Script, and Marck Script as defaults.
2025-12-01
Public v1 release with elegant-novel template. Support for cover page, annotation page, automatic page numbering, and copyright page.

الأسئلة الشائعة

حالياً نقدم قالب الرواية الأنيقة - تخطيط كتاب احترافي مع صفحة غلاف وصفحة تعليقات وترقيم تلقائي للصفحات وعناوين متحركة. مثالي للروايات والقصص القصيرة والمحتوى السردي.

ندعم أحجام A4 (210×297 مم) وA5 (148×210 مم) وLetter (215.9×279.4 مم)، جميعها بالاتجاه العمودي.

نعم! لديك أكثر من 150 خيار تخصيص تشمل أحجام الخطوط وارتفاعات الأسطر والألوان والهوامش والمزيد. تتكيف الهوامش تلقائياً حسب حجم الخط لمنع تداخل النص.

يمكنك إنشاء كتب تصل إلى حوالي 500 صفحة. يختلف وقت المعالجة: الكتب القصيرة (10-50 صفحة) تستغرق 5-15 ثانية، والكتب المتوسطة (50-200 صفحة) تستغرق 30-60 ثانية، والكتب الكبيرة (200-500 صفحة) قد تستغرق 2-3 دقائق.

تكلفة كل عملية إنشاء PDF هي رصيدان، بغض النظر عن عدد الصفحات. يمكنك شراء الأرصدة في حزم تبدأ من 10 دولارات.

الـ API محدود بـ 5 طلبات في الثانية لكل مفتاح API لضمان الأداء الأمثل لجميع المستخدمين.

يتم حذف ملفات PDF المُنشأة تلقائياً بعد 24 ساعة لتوفير مساحة التخزين. قم بتنزيل ملف PDF فوراً بعد الإنشاء أو خزّنه على CDN الخاص بك.

مطلوب: العنوان والمؤلف. اختياري: الوصف، العنوان الفرعي، اسم السلسلة، السنة، الناشر، ISBN، صورة الغلاف، وأي حقول مخصصة (النوع الأدبي، المواضيع، اللغة، الطبعة، إلخ) باستخدام خيار meta_fields.

نعم. كل طلب، حتى تلك التي تؤدي إلى أخطاء، تستهلك أرصدة. هذا لأن أرصدتك مرتبطة بعدد الطلبات، بغض النظر عن النجاح أو الفشل. إذا كان الخطأ بسبب مشكلة في المنصة من جانبنا، سنستعيد الأرصدة المتأثرة (بدون استرداد نقدي).

تواصل معنا على [email protected]. نأخذ الملاحظات بجدية—إذا كان تقرير الخطأ أو طلب الميزة ذا معنى، يمكننا إصلاح أو تحسين الواجهة بسرعة ومنحك 50 رصيدًا مجانيًا كشكر لك.

يعتمد على الواجهة وأحيانًا حتى على نقطة النهاية. بعض النقاط النهائية تستخدم بيانات من مصادر خارجية، والتي قد تكون لها حدود أكثر صرامة. نفرض أيضًا حدودًا لمنع إساءة الاستخدام والحفاظ على استقرار منصتنا. راجع الوثائق لمعرفة الحد المحدد لكل نقطة نهاية.

نعمل بنظام الأرصدة. الأرصدة هي وحدات مسبقة الدفع وغير قابلة للاسترداد تنفقها على استدعاءات API والأدوات. تُستهلك الأرصدة بنظام FIFO (الأقدم أولاً) وصالحة لمدة 12 شهرًا من تاريخ الشراء. تعرض لوحة التحكم تاريخ كل عملية شراء وانتهاء صلاحيتها.

نعم. جميع الأرصدة المشتراة (بما في ذلك الأرصدة الجزئية) صالحة لمدة 12 شهرًا من الشراء. تنتهي صلاحية الأرصدة غير المستخدمة تلقائيًا وتُحذف نهائيًا في نهاية فترة الصلاحية. لا يمكن استعادة الأرصدة المنتهية أو تحويلها إلى نقد أو قيمة أخرى. قاعدة انتقالية: الأرصدة المشتراة قبل 22 سبتمبر 2025 تُعامل كمشتراة في 22 سبتمبر 2025 وتنتهي في 22 سبتمبر 2026 (ما لم يُذكر تاريخ انتهاء أبكر عند الشراء).

نعم—ضمن فترة الصلاحية. تبقى الأرصدة غير المستخدمة متاحة وتُترحل من شهر لآخر حتى تنتهي صلاحيتها بعد 12 شهرًا من الشراء.

الأرصدة غير قابلة للاسترداد. اشترِ فقط ما تحتاجه—يمكنك دائمًا إعادة الشحن لاحقًا. إذا تسبب خطأ في المنصة في فشل الشحن، قد نستعيد الأرصدة المتأثرة بعد التحقيق. لا استرداد نقدي.

الأسعار محددة بالأرصدة وليس بالدولارات. كل نقطة نهاية لها تكلفتها الخاصة—انظر شارة "الأرصدة / الطلب" أعلاه. ستعرف دائمًا بالضبط ما تنفقه.
← العودة إلى واجهات البرمجة