İçeriğe geç

Gotenberg geliştirici kılavuzu

Gotenberg paketi, PDF dönüştürme işlemini harici bir hizmete gönderir. Uygulama kodunda bu hizmet sınırını belirgin tutun: girdiyi doğrulayın, yükü oluşturun, isteği gönderin, sonucu ayrıştırın ve hizmet hatalarını ele alın.

Office’ten PDF’ye dönüştürme iş akışları, yükleme uç noktaları, hizmet sağlık denetimleri veya nextpdf/gotenberg çevresindeki taşıma ilkesini oluştururken bu kılavuzu kullanın.

KatmanSahibiSorumlulukBuraya koymayın
Yükleme veya belge kaynağıUygulamaİstek sahibini yetkilendirin, kaynağı doğrulayın ve dönüştürme ilkesini seçin.Hizmet uç noktası veya taşıma sabitleme kararları.
Biçim algılamanextpdf/gotenbergGüvenli uzantıları OfficeFormat ile eşleyin.Uygulama doğrulaması yapılmadan bildirilen ortam türlerine güvenmek.
Köprünextpdf/gotenbergÇok parçalı isteği oluşturun, Gotenberg’i çağırın ve PDF yanıtını ayrıştırın.Etki alanı sorguları veya depolama ilkesi.
Gotenberg hizmetidağıtımOffice belgesini PDF’ye dönüştürün.PHP uygulaması yetkilendirmesi.
Çekirdek motornextpdf/nextpdfGerektiğinde dönüştürülen PDF verilerini içe aktarın veya birleştirin.Ofis dönüştürmesi.
AşamaDavranışGeliştirici eylemi
Yapılandırma oluşturmaAPI uç noktası, zaman aşımı, en büyük boyut, API anahtarı ve sabitler yapılandırmadan yüklenir.Hizmet uç noktasını ve belirteci kaynak kodun dışında tutun.
Girdi doğrulamaDosya yolu, dosya boyutu, dosya adı, uzantı ve URL güvenliği denetlenir.Desteklenmeyen girdiyi göndermeden önce reddedin.
Yük oluşturmaGotenbergConvertPayload çok parçalı form verileri oluşturur.Özgün dosya adını yalnızca güvenli olduğunda koruyun.
Hizmet isteğiKöprü, isteği /forms/libreoffice/convert adresine gönderir.Zaman aşımını ve taşıma ilkesini yapılandırın.
Sonuç ayrıştırmaGotenbergResponseParser::parse() PDF baytlarını ve meta verileri döndürür.PDF olmayan yanıtları ve hata yanıtlarını dönüştürme hataları olarak ele alın.
YolAmaç
app/Pdf/Conversion/*Şunun çevresindeki uygulama sarmalayıcısı: GotenbergBridge.
app/Pdf/Uploads/*Yükleme doğrulaması, depolama ve dosya adı ilkesi.
app/Pdf/ConversionPolicy/*Boyut, biçim ve hizmet seçim ilkesi.
tests/Pdf/Conversion/*Biçim, dosya, hizmet ve taşıma testleri.

Dosya doğrulamasını dönüştürme işleminden ayrı tutun. Dönüştürme hizmetiniz zaten yetkilendirilmiş girdiler almalı, ancak yine de derinlemesine savunma için paket doğrulamasına dayanmalıdır.

<?php
use NextPDF\Gotenberg\GotenbergBridge;
final readonly class OfficeConversionService
{
public function __construct(
private GotenbergBridge $bridge,
) {}
public function convertUploadedFile(string $safePath): string
{
$result = $this->bridge->convertFile($safePath);
if (!$result->isValid()) {
throw new RuntimeException('The conversion service did not return a valid PDF.');
}
return $result->pdfData;
}
}
DesenAPIŞu durumda kullanınKısıt
Dosya yolunu dönüştürGotenbergBridge::convertFile()Belge zaten diskte depolanmıştır.Yol okunabilir ve ilke tarafından onaylanmış olmalıdır.
Bellekteki baytları dönüştürGotenbergBridge::convertString()Uygulamanızda bir yüklemeden veya nesne deposundan gelen baytlar zaten vardır.Dosya adı yine de biçim algılamayı belirler.
Yükü doğrudan oluşturGotenbergConvertPayloadTestler veya özel taşıma kodu için çok parçalı baytlara ihtiyacınız vardır.Sınır oluşturmayı kullanıcı girdisinin dışında tutun.
Yanıtı doğrudan ayrıştırGotenbergResponseParser::parse()Özel HTTP çağrıları yine de paket ayrıştırması gerektirir.Beklenen OfficeFormat değerini geçirmeniz gerekir.

GotenbergBridge::isAvailable() bir hazır olma sinyalidir, çalışma zamanındaki tek korumanız değildir. Bir hizmet hazır olma denetimini geçebilir ve yine de sonraki dönüştürmede başarısız olabilir.

DenetimAmaçİşletim notu
Yapılandırma geçerliliğiEksik API uç noktasını algılayın.Bunu uygulama başlatma veya dağıtım denetimleri sırasında çalıştırın.
/health kullanılabilirliğiHizmete erişilip erişilemediğini algılayın.Bunu hazır olma panoları için kullanın.
Küçük fikstür dönüştürmesiBozuk LibreOffice davranışını veya hizmet gerilemesini algılayın.Bunu her istekte değil, zamanlanmış duman testlerinde çalıştırın.
Zaman aşımı izlemeYavaş hizmet davranışını algılayın.Bunu biçime ve dosya boyutuna göre izleyin.
Genişletme noktasıŞunun için kullanınKısıt
PSR-18 ClientInterfaceÖzel HTTP istemci davranışı.PSR-18 yanıt ve özel durum semantiklerine uymalıdır.
PSR-17 fabrikalarıİstek ve akış oluşturma.Köprü oluşturma için gereklidir.
HtmlSecurityPolicyInterfaceHTML girdileri için ayrıştırma katmanı ilkesi.Gotenberg güvenlik ilkesini tamamlar.
ResponseFactoryInterfaceSabitlenmiş cURL taşıma yanıtı oluşturma.Yalnızca paket taşıma yolunu kullandığınızda gereklidir.
GotenbergSecurityPolicyURL, dosya boyutu, dosya adı ve sabit doğrulaması.Uygulama yetkilendirmesini bu katmanın dışında tutun.
  1. Fikstürleri anlaşılır tutmak için testlerde convertString() ile başlayın.
  2. Yalnızca dosya sistemi yolları denetim altına alındıktan sonra convertFile() ekleyin.
  3. En büyük dosya boyutunu hizmet ve altyapı sınırlarının altında tutun.
  4. Hata işlemenin yerine geçmesi için değil, hazır olma sinyalleri için isAvailable() yöntemini kullanın.
  5. Dosya adını, biçimi, boyutu, durumu ve süreyi günlüğe kaydedin. Belge baytlarını günlüğe kaydetmeyin.
  6. Yükleme uç noktalarını açığa çıkarmadan önce zaman aşımı ve hata modu testleri ekleyin.
HataNerede işlenmelidirÖnerilen yanıt
Desteklenmeyen uzantıBiçim algılama.Hizmete göndermeden önce reddedin.
Güvenli olmayan dosya adıGüvenlik ilkesi.Reddedin ve yükleme adlandırma ilkesini normalleştirin.
Aşırı büyük dosyaYükleme ilkesi ve paket doğrulaması.Büyük yükleri okumadan veya göndermeden önce reddedin.
Gotenberg kullanılamıyorKöprü sınırı.Uygun olduğunda yeniden denenebilen bir uygulama hatası döndürün.
PDF olmayan yanıtYanıt ayrıştırıcısı.Bunu bir dönüştürme hatası olarak ele alın ve hizmet durumunu yakalayın.
Sabit veya URL doğrulama hatasıTaşıma ilkesi.Hata durumunda kapalı kalacak şekilde başarısız olun ve operatörleri uyarın.
KonuVarsayılanNe zaman geçersiz kılınmalı
Zaman aşımı30 saniye.Yalnızca gerçek hizmet gecikmesini ölçtükten sonra artırın.
En büyük dosya boyutu52,428,800 bayt.Herkese açık veya çok kiracılı uç noktalar için azaltın.
API anahtarıBoş.Özel Gotenberg dağıtımları için ayarlayın.
Desteklenen biçimlerdocx, xlsx, pptx, odt, ods, odp.Biçimleri yalnızca OfficeFormat ve ayrıştırıcı bunları desteklediğinde ekleyin.
Sabit kümeleriBoş.Sabitleri yedek sabitler ve bir döndürme yordamıyla ekleyin.
  • Biçim testleri, desteklenen ve desteklenmeyen uzantıları kapsar.
  • Dosya testleri eksik dosyaları, okunamayan dosyaları, aşırı büyük dosyaları ve güvenli olmayan dosya adlarını kapsar.
  • Hizmet testleri, 2xx olmayan yanıtları, geçersiz yanıt gövdelerini ve taşıma özel durumlarını kapsar.
  • Güvenlik testleri, ilke tarafından yasaklandığında özel veya geçersiz hizmet URL’lerini kapsar.
  • Zaman aşımı testleri, yapılandırılan zaman aşımının taşıma katmanına aktarıldığını doğrular.
  • Fikstür testleri, örnek belgeleri küçük ve hassas olmayan tutar.