قائمة التوثيق

البداية

مرجع الواجهة البرمجية

أدلة

الثقة والدعم

أمثلة برمجية

برامج كاملة بخمس لغات. يقرأ كل منها المفتاح من SAHIFA_API_KEY، ويستدعي الواجهة البرمجية الفعلية، ويحفظ النتيجة. لا تستخدم إلا المكتبة القياسية، باستثناء requests في Python. وتُشغَّل جميعها على الواجهة البرمجية قبل كل تغيير في هذه الصفحة. التعليقات داخل الشيفرة باللغة الإنجليزية، كما هو المعتاد.

المتطلبات

اللغةالإصدارالتشغيل
curl7.76 فأحدث (لخيار --fail-with-body)bash pdf.sh
JavaScriptNode.js 18 فأحدث (fetch مدمجة)node pdf.mjs
Python3.8 فأحدث و pip install requestspython pdf.py
‎.NET‎.NET 8 فأحدثdotnet run pdf.cs في ‎.NET 10، أو الصقه في Program.cs لتطبيق سطر أوامر
JavaJava 18 فأحدث لمثال PDF (مصدر بترميز UTF-8)، و 11 فأحدث للبقيةjava Pdf.java

من HTML إلى PDF

فاتورة عربية بتذييل للصفحة، تُحفظ باسم invoice.pdf.

# HTML to PDF with an Arabic footer. Requires: SAHIFA_API_KEY in the environment.
curl https://api.sahifa.dev/v3/convert/pdf \
  --user "api:$SAHIFA_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "source": "<html dir=\"rtl\" lang=\"ar\"><body><h1>فاتورة ضريبية</h1><p>الإجمالي: 1,150.00 ر.س</p></body></html>",
    "format": "A4",
    "margin": "20mm",
    "footer": { "source": "<div style=\"width:100%;text-align:center\">صفحة {{page}} من {{total}}</div>" }
  }' \
  --fail-with-body --output invoice.pdf

لقطة شاشة لصفحة ويب

الصفحة كاملة بصيغة PNG، مع إخفاء نوافذ الموافقة على ملفات تعريف الارتباط، وتُحفظ باسم page.png.

# Full-page screenshot of a URL, without cookie banners. Requires: SAHIFA_API_KEY.
curl --get https://api.sahifa.dev/take \
  --data-urlencode "access_key=$SAHIFA_API_KEY" \
  --data-urlencode "url=https://example.com" \
  --data "format=png" \
  --data "full_page=true" \
  --data "block_cookie_banners=true" \
  --fail-with-body --output page.png

إعادة المحاولة

يعيد المحاولة عند 429 و 503 مع انتظار متزايد، ويلتزم بترويسة Retry-After. أما الأخطاء الأخرى فتُرفع فورًا.

# curl retries 408, 429, 500, 502, 503 and 504 responses on its own, honouring Retry-After.
curl https://api.sahifa.dev/v3/convert/pdf \
  --user "api:$SAHIFA_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "source": "https://example.com" }' \
  --retry 4 --retry-delay 2 --retry-max-time 60 \
  --fail-with-body --output example.pdf

المتصفحات وشيفرة الواجهة الأمامية

لا تستدعِ الواجهة البرمجية من المتصفح: سيرى المفتاحَ كلُّ زائر. استدعها من خادمك ثم أرسل الملف إلى المتصفح. مثلًا في Express:

app.get('/invoices/:id.pdf', async (req, res) => {
  const html = await renderInvoiceHtml(req.params.id); // your template
  const pdf = await fetch('https://api.sahifa.dev/v3/convert/pdf', {
    method: 'POST',
    headers: { 'X-API-Key': process.env.SAHIFA_API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ source: html, format: 'A4', margin: '15mm' }),
  });
  if (!pdf.ok) return res.status(502).send('PDF could not be created');
  res.type('application/pdf').send(Buffer.from(await pdf.arrayBuffer()));
});

استخدام مكتبة قائمة لـ PDFShift أو ScreenshotOne

إذا كانت شيفرتك تستخدم مكتبة عميل لإحدى الخدمتين، فوجّه عنوانها الأساسي إلى https://api.sahifa.dev واستخدم مفتاح صحيفة. راجع الانتقال.