كيفية تحويل HTML إلى PDF باستخدام برنامج Google Script

باستخدام Google Apps Script ، يمكنك بسهولة تحويل أي محتوى HTML إلى ملف PDF. يمكن حفظ ملف PDF الذي تم تحويله إلى مجلد في محرك Google ، يمكنك إرسال بريد إلكتروني إلى الملف كمرفق أو استخدام خدمة urlfetchapp من برنامج Apps Script لنشر ملف PDF إلى خدمة خارجية مثل Amazon S3 أو Dropbox.
/* This function will convert HTML content to a PDF file,
and also send it as an email attachment */
const convertHTMLtoPDF = () => {
const htmlContent = `
<p>All standard HTML5 tags are supported during conversion
including <b>bold</b>, <i>italic</i>, <u>underline</u>, tables,
and <a href="https://digitalinspiration.com/">inline URLs</a></p>`;
const blob = Utilities.newBlob(htmlContent, MimeType.HTML);
blob.setName('file.pdf');
const recipientEmail = 'amit@labnol.org';
const emailSubject = 'The PDF file is attached';
MailApp.sendEmail({
to: recipientEmail,
subject: emailSubject,
htmlBody: htmlContent,
attachments: [blob.getAs(MimeType.PDF)],
});
};
يوصى بهذا النهج لأنه لا يتطلب الوصول إلى أي نطاقات حساسة OAUTH ويستخدم خدمات الأدوات المساعدة لـ Apps Script لإنشاء كائن Blob من سلسلة HTML.
قم بإنشاء ملفات PDF مع Google Drive
يمكنك أيضًا استخدام خدمة محرك الأقراص المتقدمة لـ Apps Script لتحويل محتوى HTML إلى PDF باستخدام مستند Google في خطوة وسيطة.
والفكرة هي أنك تقوم بإنشاء مستند Google في محرك الأقراص باستخدام محتوى HTML الخاص بك ثم تصدير هذا المستند كملف PDF وقم بتثبيط المستند المؤقت. أو يمكنك تجاوز محتوى مستند HTML باستخدام PDF Blob.
للبدء ، انتقل إلى محرر البرنامج النصي للتطبيقات ، افتح appsscript.json
ملف واضح ونطاق التحديث كما هو موضح أدناه:
{
"dependencies": {
"enabledAdvancedServices": [
{
"userSymbol": "Drive",
"serviceId": "drive",
"version": "v2"
}
]
},
"oauthScopes": ["https://www.googleapis.com/auth/drive.file"],
"runtimeVersion": "V8",
"timeZone": "Asia/Kolkata",
"exceptionLogging": "STACKDRIVER"
}
بعد ذلك ، داخل محرر الكود الرئيسي ، قم بلصق المقتطف التالي. يستغرق نهج الخطوات المكونة من ثلاث خطوات:
- قم بتحويل سلسلة HTML إلى Blob
- تحويل النقطة إلى مستند Google
- قم بتصدير وثيقة Google كملف PDF وقم بالقمامة التي تم إنشاؤها في الخطوة 2.
const convertHTMLtoPDF = () => {
const htmlContent = `
<p>All standard HTML5 tags are supported during conversion
including <b>bold</b>, <i>italic</i>, <u>underline</u>, tables,
and <a href="https://digitalinspiration.com/">inline URLs</a></p>`;
const { id, exportLinks } = Drive.Files.insert(
{ mimeType: MimeType.GOOGLE_DOCS },
htmlBlob: Utilities.newBlob(htmlContent, MimeType.HTML)
);
const pdfExportLink = exportLinks[MimeType.PDF];
const blob = UrlFetchApp.fetch(pdfExportLink, {
headers: { Authorization: `Bearer ${ScriptApp.getOAuthToken()}` },
}).getBlob();
Drive.Files.trash(id);
const { alternateLink } = Drive.Files.insert({ title: "file.pdf" }, blob);
Logger.log("View file %s", alternateLink);
};
نصيحة: نحن نستخدم drive.file
انخفاض النطاق في ملف البيان ولكن إذا كنت ترغب في حفظ الملفات في مجلدات محددة من محرك Google ، أو محركات الأقراص المشتركة ، استخدم الأوسع نطاقًا googleapis.com/auth/drive
نِطَاق.
قم بتحويل HTML إلى PDF مع Puppeteer Chrome
إذا كنت ترغب في إنشاء محرك تحويل HTML مستقل إلى PDF لا يستخدم أيًا من خدمات Google Drive ، فقد يكون Chrome Puppeteer مع Node JS خيارًا جيدًا. يمكنك استضافة الخدمة على وظائف AWS Lambda أو Google Cloud واستدعاء الخدمة باستخدام مكالمة HTTP.
const express = require('express');
const chromium = require('chrome-aws-lambda');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
const html2pdf = async (html) => {
const browser = await chromium.puppeteer.launch({
args: chromium.args,
executablePath: await chromium.executablePath,
headless: true,
ignoreHTTPSErrors: true,
});
const page = await browser.newPage();
await page.setContent(html, {
waitUntil: ['networkidle0', 'load', 'domcontentloaded'],
timeout: 30000,
});
const pdf = await page.pdf({
format: 'A4',
printBackground: true,
});
await browser.close();
return pdf;
};
app.post("https://www.labnol.org/pdf", async (request, response) => {
try {
const { content } = request.body;
const pdf = await html2pdf(content);
response.contentType('application/pdf');
response.status(200).send(pdf);
} catch (f) {
response.status(500).send(f.message);
}
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, async () => {
console.log(`App listening on port ${PORT}`);
});
اكتشاف المزيد من مرابع التكنولوجيا
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.