<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом pdf</title>
<link>https://blogengine.me/blogs/tags/pdf/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Текст в PDF</title>
<guid isPermaLink="false">136253</guid>
<link>https://bolknote.ru/all/tekst-v-pdf/</link>
<pubDate>Mon, 09 Jun 2025 20:53:48 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/tekst-v-pdf/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Попалась задача — преобразовать огромный (полтора миллиона строк) тестовый файл в кодировке &lt;i&gt;UTF-8&lt;/i&gt; в &lt;i&gt;PDF&lt;/i&gt;. Не ожидал с ней каких-то сложностей, но оказалось, что это не так-то просто.&lt;/p&gt;
&lt;p&gt;Проблемы две — объём текста и кодировка. Графические утилиты на таком объёме умирают, а с кодировкой &lt;i&gt;UTF&lt;/i&gt;, как оказалось, работают далеко не все утилиты командной строки.&lt;/p&gt;
&lt;p&gt;Перебрал несколько, с задачей справилась только утилита &lt;a href="https://github.com/dov/paps"&gt;&lt;tt&gt;paps&lt;/tt&gt;&lt;/a&gt;. Хочу себе это записать, чтобы не пришлось заниматься перебором, если в будущем столкнусь с такой же задачей.&lt;/p&gt;
&lt;p&gt;Ещё в моей задаче первый лист должен быть пустым и на каждом листе должен быть номер страницы. В результате строка запуска выглядит так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;paps --footer --footer-center={page_idx} &amp;lt;(printf \\f;cat listing.txt) -o listing.pdf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Небольшое примечание: при помощи &lt;tt&gt;printf&lt;/tt&gt; я вставляю текстовый символ разрыва страницы (&lt;tt&gt;\f&lt;/tt&gt;), чтобы первая страница оказалась пустой.&lt;/p&gt;
</description>
</item>

<item>
<title>DoomPDF</title>
<guid isPermaLink="false">133656</guid>
<link>https://bolknote.ru/all/doompdf/</link>
<pubDate>Tue, 14 Jan 2025 11:00:38 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/doompdf/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Четверть века назад я &lt;a href="https://bolknote.ru/all/2912/"&gt;писал&lt;/a&gt; о «Думе», запущенном на фотоаппарате. Тогда меня это очень удивило и восхитило. Но с тех пор много времени утекло, «Дум» на чём только не запускали и это удивляло всё меньше. Не помню когда в последний раз, пробегая глазами подобную новость, я думал хотя бы «надо же».&lt;/p&gt;
&lt;p&gt;Но &lt;a href="https://github.com/ading2210/doompdf"&gt;«Дум», запущенный внутри &lt;i&gt;PDF&lt;/i&gt;-файла&lt;/a&gt;, меня чертовски удивил! Не то, чтобы я не знал, что это возможно — в конце-концов, &lt;i&gt;PDF&lt;/i&gt; сам по себе программный файл (там внутри язык программирования &lt;a href="https://bolknote.ru/all/99-butylok-postscript/"&gt;&lt;i&gt;PostScript&lt;/i&gt;&lt;/a&gt;), но я как-то даже и не думал о такой возможности.&lt;/p&gt;
&lt;p&gt;Вы попробуйте, работает даже внутри браузера!&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2025.01.14@2x.jpg" width="1000" height="804" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Правда, в данном случае &lt;i&gt;PostScript&lt;/i&gt; почти не использовался. Всё дело в том, что внутри &lt;i&gt;PDF&lt;/i&gt; есть возможность использовать ещё и &lt;i&gt;JavaScript&lt;/i&gt;. Причём, в случае &lt;i&gt;Adobe Acrobat&lt;/i&gt;, доступны, например, такие, сомнительные для &lt;i&gt;PDF&lt;/i&gt; возможности, как 3Д-графика или &lt;i&gt;HTTP&lt;/i&gt;-запросы.&lt;/p&gt;
&lt;p&gt;В просмотрщиках &lt;i&gt;PDF&lt;/i&gt; современных браузеров поддержка &lt;i&gt;JavaScript&lt;/i&gt; тоже есть, правда она сильно ограничена по функционалу. Тем не менее, для запуска «Дума» хватило и этого.&lt;/p&gt;
&lt;p&gt;Чтобы запустить «Дум» внутри &lt;i&gt;PDF&lt;/i&gt;, использовался старый &lt;i&gt;Emscripten&lt;/i&gt;, который компилирует код на Си в &lt;tt&gt;asm.js&lt;/tt&gt; (это такое подмножество &lt;i&gt;JavaScript&lt;/i&gt;), вместо более привычного &lt;i&gt;WebAssembly&lt;/i&gt;. Но этого недостаточно — нужно было придумать, как принимать ввод с клавиатуры и отображать графику. Это оказалось не таким уж и простым. К счастью, в браузерах &lt;i&gt;PDF&lt;/i&gt;-движки поддерживают текстовые поля и кнопки, что и было использовано для ввода.&lt;/p&gt;
&lt;p&gt;С графикой возникли следующие проблемы. Речь идет о разрешении 320×200 пикселей, что означает, что если бы использовались обычные текстовые поля для каждого пикселя, пришлось бы обновлять тысячи полей на каждый кадр. В общем, так бы вы никогда не поиграли в «Дум». Вместо этого автор решил использовать одно текстовое поле на каждую строку экрана и обновлять их с помощью &lt;i&gt;ASCII&lt;/i&gt;-символов. Простой, но довольно эффективный способ, который дает в итоге монохромную картинку с шестью цветами. Конечно, такой способ тоже не даёт плавного рендера картинки, но играть всё равно довольно комфортно!&lt;/p&gt;
</description>
</item>


</channel>
</rss>