ข้ามไปยังเนื้อหา

เอกสารอ้างอิง Gotenberg API

แพ็กเกจ Gotenberg เปิดให้ใช้บริดจ์บริการหนึ่งตัวคือ GotenbergBridge บริดจ์นี้แปลงเอกสาร Office (docx, xlsx, pptx, odt, ods, odp) เป็น Portable Document Format (PDF) โดยส่งคำขอ POST ไปยังบริการ Gotenberg ภายนอก บริดจ์ทำงานกับวัตถุค่าที่คุณส่งเข้าไปหรืออ่านออกมา ได้แก่ GotenbergConfig (ตัวระบุบริการและขีดจำกัดที่เปลี่ยนแปลงไม่ได้), OfficeFormat (enum ของรูปแบบที่รองรับ), GotenbergConvertPayload (เนื้อหาคำขอแบบ multipart) และ GotenbergConvertResult (การตอบกลับ PDF ที่แยกวิเคราะห์แล้ว) ชั้นสนับสนุนประกอบด้วย GotenbergSecurityPolicy, GotenbergResponseParser และ PinnedCurlTransport ซึ่งจัดเตรียมกลไกการตรวจสอบความถูกต้อง การแยกวิเคราะห์ และการขนส่งแบบปักหมุดที่บริดจ์เรียกใช้ภายใน ใช้ชั้นนี้เฉพาะเมื่อคุณเขียนโค้ดการขนส่งหรือโค้ดทดสอบแบบกำหนดเอง

เริ่มต้นที่นี่: สร้าง GotenbergConfig ด้วย URL ของบริการแบบ Hypertext Transfer Protocol Secure (HTTPS) จากนั้นส่งต่อไปยัง GotenbergBridge พร้อมไคลเอนต์ PSR-18 และแฟกทอรี PSR-17 ของคุณ เรียก convertFile() หรือ convertString() แล้วอ่าน pdfData จาก GotenbergConvertResult ที่ส่งกลับมา

ใช้สนิปเป็ตที่ผ่านการตรวจสอบและเรียกใช้งานได้เหล่านี้สำหรับงานในแพ็กเกจที่มักต้องทำบ่อยที่สุด

ระบุพาธให้บริดจ์ แล้วบริดจ์จะตรวจหารูปแบบจากนามสกุลไฟล์

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
use NextPDF\Gotenberg\GotenbergConfig;
$config = new GotenbergConfig(
apiUrl: 'https://gotenberg.example.com',
timeout: 60,
apiKey: $apiKey,
);
$bridge = new GotenbergBridge(
config: $config,
httpClient: $psrHttpClient,
requestFactory: $psrRequestFactory,
streamFactory: $psrStreamFactory,
responseFactory: $psrResponseFactory,
);
$result = $bridge->convertFile('/path/to/report.docx');
\file_put_contents('/path/to/report.pdf', $result->pdfData);

สิ่งที่ทำ: ตรวจสอบความถูกต้องของ URL พาธ ขนาด และชื่อไฟล์ ส่งคำขอแบบ multipart หนึ่งคำขอ แล้วเขียนไบต์ PDF ที่ส่งกลับมาลงดิสก์

ใช้ convertString() เมื่อมีไบต์อยู่แล้ว ชื่อไฟล์จะกำหนดวิธีตรวจหารูปแบบ

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
/** @var GotenbergBridge $bridge */
$result = $bridge->convertString($xlsxBytes, 'spreadsheet.xlsx');
if (! $result->isValid()) {
throw new \RuntimeException('Conversion did not return a valid PDF.');
}

สิ่งที่ทำ: ตรวจหา xlsx จากชื่อไฟล์ แปลงไบต์ และยืนยันว่าผลลัพธ์ขึ้นต้นด้วยลายเซ็น %PDF ก่อนนำไปใช้

ใช้ isAvailable() เพื่อจำกัดการทำงานให้เกิดขึ้นเมื่อบริการพร้อมเท่านั้น เมธอดนี้ตรวจสอบความถูกต้องของ URL โดยไม่รับส่งข้อมูลผ่านเครือข่าย จากนั้นส่งคำขอ HEAD หนึ่งคำขอไปยัง /health

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
/** @var GotenbergBridge $bridge */
if (! $bridge->isAvailable()) {
throw new \RuntimeException('Gotenberg is not reachable.');
}

สิ่งที่ทำ: คืนค่า false (ไม่เคยโยนข้อยกเว้น) สำหรับ URL ที่ว่างเปล่า ไม่ใช่ HTTPS หรือเป็นที่อยู่ส่วนตัว รวมถึงข้อผิดพลาดเครือข่ายใดๆ เพื่อให้หยุดการทำงานได้อย่างรวดเร็วก่อนส่งคำขอแปลง

ตารางนี้สรุปส่วนติดต่อของบริดจ์ ใช้เมื่อต้องสร้าง GotenbergBridge หรือเรียกเมธอดแปลงและเมธอดตรวจสอบความพร้อมของบริดจ์

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
new GotenbergBridge(GotenbergConfig $config, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null, ?ResponseFactoryInterface $responseFactory = null)Config, ไคลเอนต์ PSR-18, แฟกทอรี PSR-17, logger เสริม, นโยบาย HTML เสริม, response factory เสริมใช้ DefaultHtmlSecurityPolicy เมื่อคุณไม่ได้กำหนดนโยบายGotenbergBridgeข้อผิดพลาดจากการ wiring คอนเทนเนอร์response factory เปิดใช้งานการขนส่ง cURL แบบปักหมุดเมื่อจำเป็นต้องใช้การปักหมุด
GotenbergBridge::convertFile(string $filePath)พาธในระบบไฟล์ไปยังเอกสาร Officeใช้นามสกุลไฟล์สำหรับการตรวจหารูปแบบGotenbergConvertResultGotenbergConvertException, RuntimeException, ValueError สำหรับรูปแบบที่ไม่รองรับแก้พาธจริงและตรวจสอบความสามารถในการอ่าน ขนาด และชื่อไฟล์
GotenbergBridge::convertString(string $content, string $fileName)ไบต์ดิบและชื่อไฟล์ต้นฉบับใช้นามสกุลของชื่อไฟล์สำหรับการตรวจหารูปแบบGotenbergConvertResultเหมือนกับ convertFileใช้เมื่อแอปพลิเคชันของคุณมีไบต์ของไฟล์อยู่แล้ว
GotenbergBridge::isAvailable()ไม่มีส่ง HEAD ไปยัง /health เมื่อ config ถูกต้องboolคืนค่า false เมื่อเกิดข้อผิดพลาดเป็นสัญญาณความพร้อมเท่านั้น
GotenbergBridge::getHtmlSecurityPolicy()ไม่มีคืนนโยบายของชั้นการแยกวิเคราะห์ที่กำหนดค่าไว้HtmlSecurityPolicyInterfaceไม่คาดว่าจะเกิดใช้เสริมกับนโยบายความปลอดภัยระดับการขนส่ง

ตารางนี้ครอบคลุมวัตถุค่าที่คุณสร้างโดยตรง ได้แก่ตัวระบุบริการ GotenbergConfig และตัวพาคำขอและการตอบกลับ GotenbergConvertPayload/GotenbergConvertResult ใช้วัตถุเหล่านี้เมื่อต้องการควบคุมรายละเอียดมากกว่าที่จุดเข้าใช้งานการแปลงทั้งสองรายการให้ไว้

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
new GotenbergConfig(string $apiUrl = '', int $timeout = 30, int $maxFileSize = 52428800, string $apiKey = '', array $pinnedPublicKeys = [], array $backupPublicKeys = [])API URL, timeout, ขนาดไฟล์สูงสุด, bearer token, ชุดหมุดURL ที่ว่างเปล่าถือว่าไม่ถูกต้อง ขนาดสูงสุดเริ่มต้นคือ 50 MiBGotenbergConfigไม่คาดว่าจะเกิดเก็บคีย์ API ไว้เป็นความลับ
GotenbergConfig::fromArray(array $config)api_url, timeout, max_file_size, api_key, อาร์เรย์หมุดค่าทางเลือกที่ขาดหายไปจะใช้ค่าเริ่มต้นของคอนสตรัคเตอร์GotenbergConfigไม่คาดว่าจะเกิดรายการของสตริงจะละเว้นค่าที่ไม่ใช่สตริง
GotenbergConfig::isValid()ไม่มีถูกต้องเมื่อ API URL ไม่ว่างเปล่าboolไม่คาดว่าจะเกิดระบบจะตรวจสอบความปลอดภัยของ URL ก่อนการดำเนินการเครือข่ายใดๆ
GotenbergConfig::allPublicKeyPins()ไม่มีรวมหมุดหลักและหมุดสำรองlist<string>ไม่คาดว่าจะเกิดรายการที่ว่างเปล่าจะปิดใช้งานการปักหมุด
new GotenbergConvertPayload(string $fileName, string $fileContent, OfficeFormat $format, bool $landscape = false, string $nativePageRanges = '')ชื่อไฟล์, ไบต์, รูปแบบ, แฟล็กการวางแนว, ช่วงหน้าแนวตั้งและทุกหน้าGotenbergConvertPayloadไม่คาดว่าจะเกิดเพย์โหลดจะถูกแปลงเป็นข้อมูลฟอร์มแบบ multipart
GotenbergConvertPayload::toMultipartBody(string $boundary)ขอบเขต multipartรวมฟิลด์ช่วงหน้าเฉพาะเมื่อฟิลด์นั้นไม่ว่างเปล่าstringไม่คาดว่าจะเกิดบริดจ์เป็นตัวสร้างขอบเขต
GotenbergConvertPayload::contentType(string $boundary)ขอบเขต multipartใช้ multipart/form-datastringไม่คาดว่าจะเกิดแนบเป็น Content-Type ของคำขอ
new GotenbergConvertResult(string $pdfData, OfficeFormat $sourceFormat, float $renderTimeMs = 0.0)ไบต์ PDF ที่แปลงแล้ว, รูปแบบต้นทาง, ระยะเวลาการเรนเดอร์เสริมระยะเวลาการเรนเดอร์เป็น 0.0 เมื่อไม่ได้วัดGotenbergConvertResultไม่คาดว่าจะเกิดส่งกลับโดย GotenbergResponseParser::parse()
GotenbergConvertResult::isValid()ไม่มีถูกต้องเมื่อไบต์ PDF ที่แปลงแล้วไม่ว่างเปล่าและมีลักษณะเป็นข้อมูล PDFboolไม่คาดว่าจะเกิดตรวจสอบก่อนจัดเก็บถาวรหรือสตรีมผลลัพธ์
GotenbergConvertResult::size()ไม่มีนับไบต์ PDF ที่แปลงแล้วintไม่คาดว่าจะเกิดใช้สำหรับโควตา การวัดและส่งข้อมูล (telemetry) และขีดจำกัดการตอบกลับ

ตารางนี้ครอบคลุม enum OfficeFormat ใช้ enum นี้เพื่อแมปนามสกุลไฟล์กับรูปแบบ อ่านประเภท MIME สำหรับการอัปโหลด หรือตรวจสอบรูปแบบทั้งหกรายการที่รองรับ

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
OfficeFormat::fromExtension(string $ext)นามสกุลไฟล์ที่มีหรือไม่มีจุดนำหน้าจับคู่โดยไม่สนใจตัวพิมพ์เล็กพิมพ์ใหญ่OfficeFormatValueError สำหรับนามสกุลที่ไม่รองรับค่าที่รองรับ: docx, xlsx, pptx, odt, ods, odp
OfficeFormat::mimeType()ไม่มีแมป enum case ไปยังประเภท MIME สำหรับการอัปโหลดstringไม่คาดว่าจะเกิดใช้ในส่วนไฟล์แบบ multipart
OfficeFormat::extension()ไม่มีคืนค่าที่กำหนดไว้ใน enumstringไม่คาดว่าจะเกิดมีประโยชน์ในการวินิจฉัยและชื่อไฟล์

ตารางนี้ครอบคลุมกลไกภายในที่บริดจ์เรียกใช้ให้คุณ ใช้ตารางนี้เฉพาะเมื่อคุณเขียนการขนส่งแบบกำหนดเอง สร้างการเรียก Hypertext Transfer Protocol (HTTP) แบบกำหนดเองที่ยังต้องใช้การแยกวิเคราะห์ของแพ็กเกจ หรือตรวจสอบพฤติกรรมความปลอดภัยและการปักหมุดระดับล่าง

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
GotenbergSecurityPolicy::validateApiUrl(string $url)API base URLแยกวิเคราะห์และตรวจสอบความถูกต้องของปลายทางก่อนการดำเนินการเครือข่ายใดๆarrayRuntimeException สำหรับ URL ที่ไม่ปลอดภัยหรือไม่ถูกต้องป้องกันไม่ให้การระบุปลายทางผิดพลาดในลักษณะ server-side request forgery (SSRF) ผ่านเข้าสู่โค้ดการแปลง
GotenbergSecurityPolicy::assertPinsStillValid(string $host, array $pinnedIps)โฮสต์และรายการ Internet Protocol (IP) ที่ปักหมุดตรวจสอบว่า Domain Name System (DNS) ตรงกับหมุดที่คาดไว้voidRuntimeException เมื่อหมุดล้าสมัยหรือไม่ถูกต้องใช้ในการปรับใช้แบบปักหมุดและการวินิจฉัยเชิงปฏิบัติการ
GotenbergSecurityPolicy::validateFileSize(int $size, int $maxSize)ขนาดจริงและค่าสูงสุดที่กำหนดค่าไว้ยอมรับไฟล์ที่มีขนาดเท่ากับหรือต่ำกว่าขีดจำกัดที่กำหนดค่าไว้voidRuntimeException เมื่อไฟล์มีขนาดใหญ่เกินไปบังคับใช้ก่อนการสร้างคำขอ
GotenbergSecurityPolicy::validateFileName(string $name)ชื่อไฟล์ต้นฉบับปฏิเสธรูปแบบชื่อไฟล์ที่ไม่ปลอดภัยหรือไม่รองรับvoidRuntimeException สำหรับชื่อที่ไม่ถูกต้องป้องกันชื่อไฟล์แบบ multipart ที่ผิดรูปแบบ
GotenbergResponseParser::parse(ResponseInterface $response, OfficeFormat $format)การตอบกลับ PSR-7 และรูปแบบ Office ที่คาดหวังดึงไบต์ PDF ที่แปลงแล้วออกจากการตอบกลับที่สำเร็จGotenbergConvertResultGotenbergConvertException สำหรับการตอบกลับที่ล้มเหลวหรือเอาต์พุต PDF ที่ไม่ถูกต้องตัวแยกวิเคราะห์กลางสำหรับการแปลงไฟล์และสตริง
new PinnedCurlTransport(ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory, array $pinnedIps = [], array $pinnedPublicKeys = [], int $timeoutSeconds = 30)แฟกทอรี PSR-17, IP ที่ปักหมุด, คีย์สาธารณะที่ปักหมุด, timeoutไม่มีหมุดและ timeout 30 วินาทีPinnedCurlTransportไม่คาดว่าจะเกิดใช้เฉพาะเมื่อจำเป็นต้องปักหมุดในระดับ cURL
PinnedCurlTransport::sendRequest(RequestInterface $request)คำขอ PSR-7ส่งผ่าน cURL ด้วย timeout และการควบคุมการปักหมุดที่กำหนดค่าไว้ResponseInterfaceGotenbergConvertException เมื่อ cURL/การขนส่งล้มเหลวใช้เมื่อไม่สามารถมอบหมายการปักหมุดให้กับไคลเอนต์ HTTP อื่นได้
PinnedCurlTransport::buildCurlOptions(RequestInterface $request, string $host, int $port)คำขอ, โฮสต์ และพอร์ตสร้างอาร์เรย์ตัวเลือก cURL ที่ sendRequest() ใช้arrayข้อผิดพลาดจากคำขอที่ไม่ถูกต้องหรือการกำหนดค่าหมุดการวินิจฉัยระดับล่างและจุดเชื่อมต่อสำหรับการทดสอบ
  • ปฏิบัติต่อ Gotenberg เป็นขอบเขตบริการภายนอกเสมอ กำหนด timeout, ขนาด, URL และนโยบายการปักหมุดอย่างตั้งใจ
  • convertFile() อ่านไฟล์ทั้งไฟล์เข้าสู่หน่วยความจำก่อนการสร้างคำขอ
  • บันทึกข้อมูลเมตา เช่น ชื่อไฟล์และความยาวเนื้อหา ไม่ใช่เนื้อหาของไฟล์