Windows 1251 to utf 8 pdf

I have a bunch of pdfs that display Cyrillic properly. But if I copy and paste texts from them, gibberish was produced. Then I used the save as function from okular to convert the pdf to text file ...

Using

enter image description here

poppler-22.04.0Librarybin>pdftotext -layout -f 1 -l 1 -enc ISO-8859-9 encoded.pdf -

Response, first page attempt with just layout seems to show there are some coding issues, but its a rough programmatic output that perhaps could be improved via FnR or code tweaking

          Ш.Оунццг, Є.Хадаа,
          Д.Цогзолмаа, Т.нхтуяа




 МОНГОЛ ХЛ
                   I
      Еєнхий боловсолын сугуулийн
       1 дїг ангийн суах бичиг

Боловсол, ол, Шинжлх Ухаан, отын амны
           зєвшєєлєє хвлв.

            Долоо дах хвлл




    УГУУЛИЙН НОМЫН АНД ОЛГОВ.
     БОЛУУЛАХЫГ ХОИГЛОНО.

             Улаанбаата хот
                 2020 он

Alternative is try this as more valid characters but needs «de-spacing»

pdftotext -layout -f 1 -l 1 -enc UTF-16 encoded.pdf -

                         Ш . О ю у н ц э ц э г ,   Є . Х а д а а ,
                         Д . Ц о г з о л м а а ,   Т . Э н х т у я а




   М О Н Г О Л   Х Э Л
                                           I
               Е р є н х и й   б о л о в с р о л ы н   с у р г у у л и й н
                   1   д ї г э э р   а н г и й н   с у р а х   б и ч и г

 Б о л о в с р о л ,  ! оQ л ,   Ш и н ж л э х   У х а а н ,  !? о р т ы н   / а м н ы
                           з є в ш є є р л є є р   х э в л э в .

                             Д о л о о   д а хL   х э в л э л




          ! У Р Г У У Л И Й Н   Н О М Ы Н  ! А Н Д   О Л Г О В .
                 Б О Р Л У У Л А Х Ы Г   Х О Р И Г Л О Н О .

                               У л а а н б а а т а р   х о т
                                       2 0 2 0   о н

De-spaced but still needs replace �! with C and �/ with Яetc.

enter image description here

note in both cases chcp 1251

Recoder v3.1.0 (BOM-remover)

github

Небольшая программа для массового (пакетного) перекодирования файлов из одной кодировки в другую. Доступные кодировки windows-1251, koi8-r, cp866, ISO 8859-5, utf-8, utf-8 с BOM-заголовком. Также умеет искать и удалять BOM-заголовок в файлах и каталогах.

Текущая версия: ¶

  • Скачать recoder v3.1.0 для Windows 7+ 64-бит (9.7 MB)

    Запускается без установки, не требует дополнительных библиотек.

  • Скачать recoder v3.1.0 для Ubuntu 20.04+ 64-бит (10.8 MB)

    Запускается без установки, не требует дополнительных библиотек.

Некоторые антивирусы (например, VirusTotal) могут показывать наличие вирусов в исполняемом файле. Это связано с использованием PyInstaller и его модулей.
Если это является проблемой, то проект можно запускать из исходного кода или использовать версию v2.

Последнее изменение: ¶

  • 3 декабря 2022 г. — добавлена галочка «Искать в подкаталогах».
  • 5 марта 2022 г. — приложение переписано на Python (tkinter) с публикацией исходного кода.

Предыдущие версии: ¶

  • v3.0.0: Windows (9.7 MB), Linux (11 MB)
  • v2.3.0: Windows (7.9 MB), Linux (74 kB)
  • v2.2.2: Windows (7.9 MB), Linux (67.7 kB)
  • v2.2.1: Windows (7.9 MB), Linux (66.5 kB)
  • v2.1.1: Windows (7.2 MB), Linux (48.8 kB)
  • v2.1: Windows (8.2 MB), Linux (48.5 kB)
  • v2.0: Windows (7.9 MB)

Скриншоты ¶

Recoder 3.0.0

Recoder 3.0.0


Рано или поздно встает вопрос о генерации PDF файлов. Он удобен, а страницы можно сделать довольно красивыми. Есть много разных библиотек для PHP, у меня в данном случае в ТЗ стояла задача сделать на FPDF. Данная библиотека, а точнее класс распространяется бесплатно и умеет работать с разными типами кодировок, в том числе и с CP1251. Наверно минусом этой библиотеки является отсутствие поддержки UTF, но есть отдельная пропатченная библиотека UFPDF, ее рассматривать я не буду.

Вы наверно спросите почему мучение с кириллицей? Скажем так, я потратил много времени на поиски, как заставить показывать русский текст, а не каракули. Делал я все по мануалам, официальных источников.

Итак, для того что бы был русский текст нам нужны шрифты, я делал для Arial, Times New Roman, Verdana. Создайте в своем проекте папку fonts. Скиньте туда нужные шрифты. Теперь нам нужно с конвертировать их для FPDF. На многих сайтах предлагают использовать специальную утилиту ttf2pt1.

ttf2pt1 -a arial.ttf arial

Сохранив, проверим в браузере. Он создает 2 файла, потом надо создать php фаил и сделать следующее, а точнее он создаст php фаил который содержит информацию о шрифте. Не забудьте поставить права на папку, где будете генерировать шрифты.

	<?
	require('/usr/share/php/fpdf/font/makefont/makefont.php'); 
	MakeFont('arial.ttf','.afm','cp1251');
	?>

Все это я делал ни один раз. И никак скрипт не хотел работать. После чего я нашел более простой способ конвертирования шрифтов.

Идем http://fpdf.fruit-lab.de/index.php?id=3 на этот сайт. Выбираем кодировку cp1251, далее прикрепляем нужный нам шрифт и жмем Convert. Там нас будет интересовать php, afm, z. Скачивайте эти файлы в созданную нами папку fonts. Далее нужно переименовать фаил .php.txt в .php.

После чего откроем этот php фаил (с сайта мы скачиваем его в .php.txt и потом переименовываем). В данном случае нас будет интересовать имя шрифта ($name=’ArialMT’;). Теперь у нас есть шрифт и имя шрифта. Можно приступить к созданию самого генератора PDF. Создаем нужный нам фаил, подключаем нужные библиотеки.

	define('FPDF_FONTPATH', __system_directory__ .'API/font/');
	// на всякий случай я прописал полный путь до библиотеки.
	require('/usr/share/php/fpdf/fpdf.php');
	// объявляем класс и конструктор класса, в данном случае у меня альбомный лист
	$pdf=new FPDF('L');
	//нужно подключить шрифт, указав имя шрифта и имя файла.
	$pdf->AddFont('ArialMT','','119379869a251bdd6a14438b3c5514f2_arial.php');
	$pdf->AddPage();
	// выбираем шрифт для текста.
	$pdf->SetFont('ArialMT','',35);
	$pdf->Cell(40,10,'русский текст!');
	$pdf->Output();

Основное время я потратил из-за возникавшей ошибки: «FPDF error: Undefined font: arialmt B» Она наверно вызывалась неверной конвертацией шрифта, когда пользовался MakeFont или использованием неверного параметра, к примеру ошибка возникает, когда 2 параметр не совпадает с SetFont или наоборот.

// Ошибка в этом примере:
$pdf->AddFont('ArialMT','','119379869a251bdd6a14438b3c5514f2_arial.php');
$pdf->SetFont('ArialMT','B',35);

//И в такой тоже:
$pdf->AddFont('ArialMT','B','119379869a251bdd6a14438b3c5514f2_arial.php');
$pdf->SetFont('ArialMT','',35);

//работает
$pdf->AddFont('ArialMT','B','119379869a251bdd6a14438b3c5514f2_arial.php');
$pdf->SetFont('ArialMT','B',35); 

Как оказалось ошибки были на пустом месте, но я рад что разобрался с ними, и буду надеяться что эта маленькая статья поможет не терять время, на поиск проблемы связанной c кодировками.

Скачать: моя сборка готовых шрифтов.

Recommended Posts

Kurmus

Newbie

Всем привет.
Помогите пожалуста с установкой!
Как заставить пдф работать на УТФ-8 на на 1,4,0,8 версии
Все описанные методы несработали
Надо штобы показивались латышские буквы — ČŠŽŅĶĻŪĒ

Заранее блогадарен!

000003.pdf

Share this post


Link to post
Share on other sites

Pezzz

Newbie

Share this post


Link to post
Share on other sites

Kurmus

Newbie

Ето тоже некатит
так как у версии 1,3,6,0
нету таких строк как отписал Zuzul.

Помогите поставить šģķļāžčņļū на PDF указанной версии!
Желательно на UTF-8

Заранее блогадарю

Share this post


Link to post
Share on other sites

Pezzz

Newbie

Ето тоже некатит
так как у версии 1,3,6,0
нету таких строк как отписал Zuzul.

Помогите поставить šģķļāžčņļū на PDF указанной версии!
Желательно на UTF-8

Заранее блогадарю

Вам для версии 1.4.0.8 или 1,3,6,0 ?

Share this post


Link to post
Share on other sites

Kurmus

Newbie

Я уже перепробовп все возможности
сцас поставил 1,3,1,0 рус но ето не то што требуетса
и на етой вообсе под ИЕ-8 пишет
HTTP 501 Not Implemented or HTTP 505 Version Not Supported
На Хроме и Мозилла всё ок кроме пдф

непойму даже с чего начать

37318_fJlY30lNnc3Ur08N8EOi_t

Share this post


Link to post
Share on other sites

Pezzz

Newbie

Если нужно быстрое решение, ставьте вот эту версию:
http://www.prestadev.ru/news/16/
В этой сборке pdf работает без проблем с UTF-8. Сборка основана на версии PrestaShop 1.3.1

Или Вам все-таки нужен PDF на версии 1.4.0.8?

Share this post


Link to post
Share on other sites

Kurmus

Newbie

Я пробую все возможности и желательно запустить 1,4,8
но ето по мере возможностей и штобы небыло спама как на 1,3,1 рус

и што за глюк с ерор 505

Share this post


Link to post
Share on other sites

Pezzz

Newbie

Попробуйте эти файлы заменить/скопировать:
http://rapidshare.com/files/444427218/files.zip
и не забудьте в админ-офисе изменить шрифт и кодировку: Настройки->PDF шрифт ‘dejavusans’, кодировка ‘cp1251’

в архиве PDF на основе TCPDF для 1.4.0.6, -думаю отличий кардинальных от 1.4.0.8 нет и все должно работать

Share this post


Link to post
Share on other sites

  • 3 months later…

Adrenalyne

Newbie

Попробуйте эти файлы заменить/скопировать:
http://rapidshare.com/files/444427218/files.zip

Уважаемый Pezzz, Вы не могли бы перезалить файлы на рабочий хостинг.. а то ссылочка битая, а проблема для 1.4.0.6 так и не решилась.
P.S. Столкнулся с той же проблемой кодировки шрифтов в PDF.

…или в крайнем, переслать их мне на майл: [email protected]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Sign in

Already have an account? Sign in here.

Sign In Now

кто-нибудь знает, как установить кодировку в пакете FPDF в utf-8? Или, по крайней мере, ISO-8859-7 (греческий), который поддерживает греческие символы?

в основном я хочу создать pdf-файл, содержащий греческие символы.

любые предложения помочь.
Джордж!—1—>

16 ответов


не используйте кодировку UTF-8. Стандартные шрифты FPDF используют ISO-8859-1 или Windows-1252. Можно выполнить преобразование в ISO-8859-1 с utf8_decode():
$str = utf8_decode($str);
Но некоторые символы, такие как Euro, не будут переведены правильно. Если расширение iconv доступно, правильный способ сделать это следующий:
$str = iconv('UTF-8', 'windows-1252', $str);


существует также официальная версия UTF-8 FPDF под названием tFPDF http://www.fpdf.org/en/script/script92.php

вы можете легко переключиться с исходного FPDF, просто убедитесь, что вы также используете шрифт unicode, как показано в Примере в приведенной выше ссылке или моем коде:

<?php

//this is a UTF-8 file, we won't need any encode/decode/iconv workarounds

//define the path to the .ttf files you want to use
define('FPDF_FONTPATH',"../fonts/");
require('tfpdf.php');

$pdf = new tFPDF();
$pdf->AddPage();

// Add Unicode fonts (.ttf files)
$fontName = 'Helvetica';
$pdf->AddFont($fontName,'','HelveticaNeue LightCond.ttf',true);
$pdf->AddFont($fontName,'B','HelveticaNeue MediumCond.ttf',true);

//now use the Unicode font in bold
$pdf->SetFont($fontName,'B',12);

//anything else is identical to the old FPDF, just use Write(),Cell(),MultiCell()... 
//without any encoding trouble
$pdf->Cell(100,20, "Some UTF-8 String");

//...
?>

Я думаю, что гораздо более элегантно использовать это вместо спама utf8_decode () везде и возможности использования .файлы ttf непосредственно в AddFont () тоже являются плюсом.

любой другой ответ здесь — это просто способ избежать или обойти проблему, а избежать UTF-8-это не реальный вариант для современного проекта.

есть также альтернативы, такие как mPDF или TCPDF (и другие), которые базируются на FPDF, но предлагают расширенные функции, имеют поддержку UTF-8 и могут интерпретировать HTML-код (ограниченный, конечно, поскольку нет прямого способа конвертировать HTML в PDF).
Большую часть кода FPDF можно использовать непосредственно в этих библиотеках, поэтому его довольно легко перенести код.

https://github.com/mpdf/mpdf
http://www.tcpdf.org/


есть очень простое решение этой проблемы.

в файле fpdf.php перейти к строке, которая говорит:

if($txt!=='')
{

это строка 648 в моей версии fpdf.
Вставить следующую строку кода:

$txt = iconv('utf-8', 'cp1252', $txt);

(над строкой кода)

if($align=='R')

это работает для всех немецких специальных символов, а также должно работать для греческих специальных символов. В противном случае просто замените cp1252 соответствующим алфавитом, который вам нужен. Ты можешь видеть все. поддерживаемые символы здесь:http://en.wikipedia.org/wiki/Windows-1252

Я видел решение здесь:http://fudforum.org/forum/index.php?t=msg&goto=167345
Пожалуйста, используйте мой пример кода выше, так как автор забыл вставить тире между UTF и 8.

надеюсь, что выше было полезно.

Даан


сначала вам нужно создать шрифт. Вы должны использовать MakeFont утилита, включенная в пакет FPDF. Я использовал на Linux этот немного расширенный скрипт из демо:

<?php
// Generation of font definition file for tutorial 7
require('../makefont/makefont.php');

$dir = opendir('/usr/share/fonts/truetype/ttf-dejavu/');
while (($relativeName = readdir($dir)) !== false) {
    if ($relativeName == '..' || $relativeName == '.')
        continue;
    MakeFont("/usr/share/fonts/truetype/ttf-dejavu/$relativeName",'ISO-8859-2');
}
?>

затем я скопировал сгенерированные файлы в font каталог моей сети и использовал это:

$pdf->Cell(80,70, iconv('UTF-8', 'ISO-8859-2', 'Buňka jedna'),1);

(я работал над столом.) Это сработало для моего языка (Buňka jedna чешский для мобильник). Чешский язык принадлежит к центральноевропейским языкам, также Стандарт ISO-8859-2. К сожалению, пользователь FPDF вынужден потерять преимущества кодирования UTF-8. Вы не можете получить это в своем PDF:

Městečko Fruens Bøge

датский письмо ø становится ř в ISO-8859-2.

предложение решения: вам нужно получить греческий шрифт, создать шрифт, используя правильную кодировку (ISO-8859-7) и использовать iconv С той же целевой кодировкой, с которой был создан шрифт.




вы можете создать класс для расширения FPDF и добавить следующее:

class utfFPDF extends FPDF {

function Cell($w, $h=0, $txt="", $border=0, $ln=0, $align='', $fill=false, $link='')
{
    if (!empty($txt)){
        if (mb_detect_encoding($txt, 'UTF-8', false)){
            $txt = iconv('UTF-8', 'ISO-8859-5', $txt);

        }
    }
    parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link);

} 

}

4

автор: Alejandro Aranda


ни одно из вышеперечисленных решений не будет работать.

попробуйте это:

function filter_html($value){
    $value = mb_convert_encoding($value, 'ISO-8859-1', 'UTF-8');
    return $value;
}

Я хотел ответить на этот вопрос для всех, кто не переключился на TFPDF по какой-либо причине (интеграция фреймворка и т. д.)

на: http://www.fpdf.org/makefont/index.php

использовать .ttf совместимый шрифт для языка, который вы хотите использовать. Обязательно выберите кодировку, которая является правильной для вашего языка. Загрузите файлы и вставьте их в текущий каталог шрифтов FPDF.

используйте это для активации новый шрифт: $pdf->AddFont($font_name,'','Your_Font_Here.php');

затем вы можете использовать $pdf->SetFont нормально.

на самом шрифте используйте iconv для преобразования в UTF-8. Поэтому, если, например, вы используете иврит, вы бы сделали iconv('UTF-8', 'windows-1255', $first_name).

замените кодировку windows на кодировку языка.

для справа налево, быстрое исправление делает что-то вроде strrev(iconv('UTF-8', 'windows-1255', $first_name)).


для потомков.

Как мне удалось добавить русский язык в fpdf на моей машине Linux:

1) Перейти кhttp://www.fpdf.org/makefont/ и преобразовать шрифт ttf(например, AerialRegular.ttf) в 2 файла использование кодировки ISO-8859-5: AerialRegular.php и AerialRegular.z

2) поместить эти 2 файла в fpdf / font каталог

3) Используйте его в своем коде:

$pdf = new FPDI();
    $pdf->AddFont('ArialMT','','ArialRegular.php');
    $pdf->AddPage();
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 0, 0, 211, 297); //width and height in mms
    $pdf->SetFont('ArialMT','',35);
    $pdf->SetTextColor(255,0,0);
    $fullName = iconv('UTF-8', 'ISO-8859-5', 'Алексей');
    $pdf->SetXY(60, 54);
    $pdf->Write(0, $fullName);


вы можете применить эту функцию к тексту:

 $yourtext = iconv('UTF-8', 'windows-1252', $yourtext);

спасибо


Я использую FPDF для ASP, и функция iconv недоступна.
Кажется странным, что я решил проблему UTF-8 добавление поддельного изображения (1x1px jpeg) в pdf, сразу после функции AddPage ():

pdf.Image "images/fpdf.jpg",0,0,1

таким образом, акцентированные символы правильно добавляются в мой pdf, не спрашивайте меня, почему, но это работает.


не уверен, что это будет делать для греческого, но у меня была та же проблема для бразильских португальских символов, и моим решением было использовать HTML-объекты. У меня было в основном два случая:

  1. строка мая содержат UTF-8 символов.

для них я сначала закодировал его в HTML-объекты с htmlentities() а затем расшифровал их до iso-8859-1. Пример:

$s = html_entity_decode(htmlentities($my_variable_text), ENT_COMPAT | ENT_HTML401, 'iso-8859-1');
  1. исправлена строка с HTML-сущностями:

для этих, Я только что ушел htmlentities() звонок. Пример:

$s = html_entity_decode("Treasurer/Tr&eacute;sorier", ENT_COMPAT | ENT_HTML401, 'iso-8859-1');

затем я прошел $s в FPDF, как в этом примере:

$pdf->Cell(100, 20, $s, 0, 0, 'L');

Примечание: ENT_COMPAT | ENT_HTML401 является стандартным значением для параметра #2, как вhttp://php.net/manual/en/function.html-entity-decode.php

надеюсь, что это поможет.

0

автор: Alexandre Schmidt


Я знаю, что этот вопрос старый, но я думаю, что мой ответ поможет тем, кто не нашел решения в других ответов. Итак, моя проблема заключалась в том, что я не мог отображать хорватские символы в своем PDF. Во-первых, я использовал FPDF, но, я думаю, он не поддерживает Unicode. Наконец, что решена моя проблема tFPDF версия FPDF, который поддерживает Unicode. Вот пример, который сработал для меня:

require('tFPDF/tfpdf.php');
$pdf = new tFPDF();
$pdf->AddPage();
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->AddFont('DejaVu', 'B', 'DejaVuSansCondensed-Bold.ttf', true);

$pdf->SetFont('DejaVu','',14);

$txt = 'čćžšđČĆŽŠĐ';
$pdf->Write(8,$txt);

$pdf->Output();


Понравилась статья? Поделить с друзьями:
  • Windows 1251 is not a supported encoding name
  • Windows 12 скачать торрент 64 bit rus активированная 2020 бесплатно
  • Windows 12 дата выхода в россии скачать бесплатно
  • Windows 12 lite скачать торрент на русском
  • Windows 12 download iso 32 bit 64 bit versions