Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP FPDI Library में Encoding Set करना


FPDI (Free PDF Document Importer) library में character encoding सेट करने के लिए fonts और encoding का सही संयोजन उपयोग करें।

समस्या

FPDI/TCPDF डिफ़ॉल्ट रूप से core fonts (Helvetica, Times, Courier) उपयोग करते हैं जो केवल Latin-1 (ISO-8859-1) support करते हैं। Unicode (हिंदी, चीनी, अरबी, आदि) के लिए TrueType fonts (TTF) आवश्यक हैं।

समाधान: Unicode Font Add करें

<?php
require_once('fpdi/autoload.php');

use setasign\Fpdi\Fpdi;

$pdf = new Fpdi();

// DejaVu Sans font add करें (Unicode support के लिए)
// Font files: DejaVuSans.ttf, DejaVuSans-Bold.ttf, आदि
$pdf->addTTFfont(
    __DIR__ . '/fonts/DejaVuSans.ttf',      // Regular font file
    'DejaVuSans',                            // Font family name
    '',                                      // Style (empty = regular)
    32                                       // Font type: 32 = Unicode TrueType
);

$pdf->addTTFfont(
    __DIR__ . '/fonts/DejaVuSans-Bold.ttf',
    'DejaVuSans',
    'B',                                     // Bold style
    32
);

// Font set करें
$pdf->SetFont('DejaVuSans', '', 10);
$pdf->AddPage();

// Unicode text लिखें
$pdf->Write(5, 'नमस्ते दुनिया! Hello World! 你好!');
$pdf->Output('unicode_test.pdf', 'D');

Font Files प्राप्त करना

# DejaVu fonts download करें (open source, complete Unicode)
wget https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.zip
unzip dejavu-fonts-ttf-2.37.zip
cp ttf/DejaVuSans*.ttf /path/to/your/project/fonts/

# या Google Fonts से Noto Sans (सभी भाषाओं के लिए)
# https://fonts.google.com/noto/specimen/Noto+Sans

Encoding Constants (FPDI/TCPDF में परिभाषित)

Encoding ConstantCoverage
cp1250Central Europe
cp1251Cyrillic
cp1252Western Europe (default)
cp1253Greek
cp1254Turkish
cp1255Hebrew
cp1257Baltic
cp1258Vietnamese
cp874Thai
ISO-8859-1Western Europe
ISO-8859-2Central Europe
ISO-8859-5Cyrillic
ISO-8859-7Greek
ISO-8859-9Turkish
KOI8-RRussian
KOI8-UUkrainian

Legacy Encoding Conversion (यदि TTF fonts नहीं उपयोग कर सकते)

<?php
// UTF-8 से cp1250 (Central Europe) में convert
$utf8String = 'zazółć gęślą jaźń';
$encoded = iconv('UTF-8', 'cp1250//TRANSLIT', $utf8String);

// Core font के साथ उपयोग (limited characters)
$pdf->SetFont('Helvetica', '', 10);
$pdf->Write(5, $encoded); // Only works for Latin-2 characters

Complete Working Example

<?php
require_once 'vendor/autoload.php';

use setasign\Fpdi\Fpdi;

$pdf = new Fpdi();

// 1. Source PDF import करें
$pageCount = $pdf->setSourceFile('template.pdf');

// 2. Unicode font add करें
$fontDir = __DIR__ . '/fonts/';
$pdf->addTTFfont($fontDir . 'DejaVuSans.ttf', 'DejaVu', '', 32);
$pdf->addTTFfont($fontDir . 'DejaVuSans-Bold.ttf', 'DejaVu', 'B', 32);

// 3. Template pages copy करें
for ($pageNum = 1; $pageNum <= $pageCount; $pageNum++) {
    $tplId = $pdf->importPage($pageNum);
    $pdf->AddPage();
    $pdf->useTemplate($tplId);
    
    // 4. Unicode text overlay करें
    $pdf->SetFont('DejaVu', '', 12);
    $pdf->SetXY(50, 50);
    $pdf->Write(0, 'हिंदी टेक्स्ट: नमस्ते!');
    $pdf->SetFont('DejaVu', 'B', 10);
    $pdf->SetXY(50, 70);
    $pdf->Write(0, 'English: Hello World!');
}

// 5. Output
$pdf->Output('output.pdf', 'D');

Troubleshooting

  • Font not found: Font file path verify करें, addTTFfont() से पहले file exists check करें
  • Characters missing: Font में required glyphs नहीं हैं - Noto fonts उपयोग करें
  • Performance: Large TTF fonts slow कर सकते हैं - subset fonts बनाएं
  • Memory: ini_set('memory_limit', '256M') बढ़ाएं
  1. - PHP - mb_detect_order() के साथ कैरेक्टर एन्कोडिंग पहचान क्रम सेट करें

    PHP में mb_detect_order() फ़ंक्शन PHP में **mb_detect_order()** फ़ंक्शन **कैरेक्टर एन्कोडिंग पहचान क्रम को सेट/प्राप्त** करने के लिए उपयोग किया जाता है। PHP 4.2.0+ में समर्थित। सिंटैक्स array|bool mb_detect_order(array|string|null $encoding = null): array|bool पैरामीटर्स $encoding - एन्कोडिंग स

  1. PHP में imagesetpixel() फ़ंक्शन से सिंगल पिक्सेल सेट करें PHP में imagesetpixel() फ़ंक्शन से सिंगल पिक्सेल सेट करें

    imagesetpixel() PHP में एक अंतर्निहित फ़ंक्शन है जिसका उपयोग सूचीबद्ध कोऑर्डिनेट पर सिंगल पिक्सेल सेट करने के लिए किया जाता है। सिंटैक्स bool imagesetpixel(resource $image, int $x, int $y, int $color) पैरामीटर्स imagesetpixel() चार पैरामीटर्स स्वीकार करता है: $image, $x, $y और $color। $image - काम

  1. Raspberry Pi पर Raspberry Pi OS कैसे सेट अप करें Raspberry Pi पर Raspberry Pi OS कैसे सेट अप करें

    Debian-आधारित Raspberry Pi OS (पहले Raspbian कहा जाता था) Raspberry Pi के हार्डवेयर पर चलने के लिए ऑप्टिमाइज़ किया गया है। यह वास्तव में उपयोगी सॉफ्टवेयर का एक बंडल करता है जो आपको शुरू करने में मदद करता है। यह इसे किसी भी अनुभव स्तर पर Pi उपभोक्ताओं के लिए एक बढ़िया गो-टू OS बनाता है। Raspberry Pi