<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>API on File Format Blog</title>
    <link>https://blog.fileformat.com/lt/tag/api/</link>
    <description>Recent content in API on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>lt</language>
    <lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/lt/tag/api/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Geriausios atviro kodo API, skirtos Microsoft Office dokumentų konvertavimui į vaizdus</title>
      <link>https://blog.fileformat.com/lt/image/top-open-source-office-document-to-image-converter-apis-complete-guide/</link>
      <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/lt/image/top-open-source-office-document-to-image-converter-apis-complete-guide/</guid>
      <description>Išsamus kūrėjų vadovas apie atviro kodo Office dokumentų konvertavimą į vaizdus. Atraskite struktūrinius darbo srautus, Docker mastelio keitimo patarimus ir geriausių nemokamų API palyginimus.</description>
      <content:encoded><![CDATA[<p><strong>Paskutinį kartą atnaujinta</strong>: 21 Jul, 2026</p>
<figure class="align-center ">
    <img loading="lazy" src="images/top-open-source-office-document-to-image-converter-apis.png#center"
         alt="Best Open-Source APIs to Convert Microsoft Office Documents to Images"/> 
</figure>

<h2 id="atviro-kodo-api17-kurios-konvertuoja-office-dokumentus-į-vaizdus-galutinis-vadovas"><a href="https://products.fileformat.com/word-processing/">Atviro kodo API</a> Kurios konvertuoja Office dokumentus į vaizdus: Galutinis vadovas</h2>
<p>Šiuolaikinėje programinės įrangos kūrimo srityje dokumentų apdorojimas yra nuolat pasikartojanti būtinybė. Nesvarbu, ar kuriate įmonės intranetą, dokumentų valdymo sistemą (DMS) ar bendradarbiavimo platformą, „Microsoft Office“ dokumentų (Word, Excel, PowerPoint) konvertavimas į aukštos kokybės vaizdus (<a href="https://docs.fileformat.com/image/png/">PNG</a>, <a href="https://docs.fileformat.com/image/jpeg/">JPEG</a>) yra svarbi funkcija. Vaizdai yra universaliai skaitomi visose naršyklėse, mobiliuosiuose įrenginiuose ir operacinėse sistemose, nereikalaujant išorinių papildinių ar sunkių biuro paketų.</p>
<p>Nors komercinės API siūlo patikimus sprendimus, atviro kodo alternatyvos suteikia lankstumą, išlaidų taupymą ir visišką kontrolę dėl duomenų privatumo – svarbų veiksnį apdorojant jautrius įmonės dokumentus.</p>
<p>Ši išsami vadovas nagrinėja geriausias atviro kodo API, bibliotekas ir variklius, skirtus Office dokumentų konvertavimui į vaizdus, įvertindamas jų privalumus, trūkumus ir našumo savybes.</p>
<h2 id="kodėl-konvertuoti-office-dokumentus-į-vaizdus">Kodėl konvertuoti Office dokumentus į vaizdus?</h2>
<p>Prieš įsijaukiant į įrankius, pažiūrėkime, kodėl kūrėjai dažnai konvertuoja Word dokumentus (<code>.docx</code>), skaičiuokles (<code>.xlsx</code>) ir pristatymus (<code>.pptx</code>) į vaizdus:</p>
<ol>
<li><strong>Universali peržiūra:</strong> Žiniatinklio naršyklės negali natūraliai atvaizduoti <code>.docx</code> arba <code>.pptx</code> failų. Konvertavus juos į <code>.png</code> arba <code>.jpg</code>, galima greitai peržiūrėti dokumentus naršyklėje.</li>
<li><strong>Platformos nepriklausomumas:</strong> Mobiliosios programos gali iš karto atvaizduoti vaizdus, nereikalingi sunkių dokumentų atvaizdavimo varikliai.</li>
<li><strong>Saugumas ir skaitomumas:</strong> Dalijimasis dokumento nuotrauka užtikrina, kad išdėstymas išliktų identiškas visuose įrenginiuose ir apsaugo nuo paprastų, neautorizuotų teksto redagavimų.</li>
<li><strong>Miniatiūrų generavimas:</strong> Automatizuotos darbo srautai dažnai reikalauja mažų vizualinių dokumentų peržiūrų failų naršyklėms ir paieškos rezultatams.</li>
</ol>
<h2 id="geriausi-atviro-kodo-sprendimai-dokumentų-konvertavimui-į-paveikslėlius">Geriausi atviro kodo sprendimai dokumentų konvertavimui į paveikslėlius</h2>
<h3 id="1libreoffice4--openoffice-be-vartotojo-sąsajos-režimas">1.<a href="https://github.com/LibreOffice/">LibreOffice</a> / OpenOffice (Be vartotojo sąsajos režimas)</h3>
<p>LibreOffice yra neabejotinas lyderis atviro kodo dokumentų apdorojimo ekosistemoje. Savo &ldquo;headless&rdquo; režime (veikiantis be grafinės vartotojo sąsajos), LibreOffice gali būti paleistas per CLI arba supakuotas į lengvą mikroserviso API, kad konvertuotų praktiškai bet kurį Office dokumento formatą.</p>
<h4 id="kaip-įdiegti">Kaip įdiegti</h4>
<p>Debian/Ubuntu pagrindu veikiančiose sistemose įdiekite headless LibreOffice paketą kartu su <code>poppler-utils</code> (kuris suteikia <code>pdftoppm</code> PDF į vaizdą konvertavimui):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt-get update
</span></span><span style="display:flex;"><span>sudo apt-get install -y libreoffice-headless poppler-utils
</span></span></code></pre></div><h4 id="kodo-pavyzdys-nodejs-api-apvalkalas">Kodo pavyzdys (Node.js API apvalkalas)</h4>
<p>Žemiau pateiktas Node.js apvalkalas, kuris iškviečia headless LibreOffice binarinį failą, kad konvertuotų <code>.docx</code> į PDF, o tada jį rasterizuoja į PNG:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> { <span style="color:#a6e22e">exec</span> } <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#39;child_process&#39;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">path</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#39;path&#39;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fs</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">require</span>(<span style="color:#e6db74">&#39;fs&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">convertDocToImage</span>(<span style="color:#a6e22e">inputDocPath</span>, <span style="color:#a6e22e">outputDir</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#66d9ef">new</span> Promise((<span style="color:#a6e22e">resolve</span>, <span style="color:#a6e22e">reject</span>) =&gt; {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// Step 1: Headless LibreOffice conversion to PDF
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>        <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">libreOfficeCmd</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">`soffice --headless --convert-to pdf --outdir &#34;</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">outputDir</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34; &#34;</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">inputDocPath</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;`</span>;
</span></span><span style="display:flex;"><span>        
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">exec</span>(<span style="color:#a6e22e">libreOfficeCmd</span>, (<span style="color:#a6e22e">err</span>) =&gt; {
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">err</span>) <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">reject</span>(<span style="color:#66d9ef">new</span> Error(<span style="color:#e6db74">&#39;LibreOffice conversion failed: &#39;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">err</span>.<span style="color:#a6e22e">message</span>));
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">baseName</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">basename</span>(<span style="color:#a6e22e">inputDocPath</span>, <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">extname</span>(<span style="color:#a6e22e">inputDocPath</span>));
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">pdfPath</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">join</span>(<span style="color:#a6e22e">outputDir</span>, <span style="color:#e6db74">`</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">baseName</span><span style="color:#e6db74">}</span><span style="color:#e6db74">.pdf`</span>);
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (<span style="color:#f92672">!</span><span style="color:#a6e22e">fs</span>.<span style="color:#a6e22e">existsSync</span>(<span style="color:#a6e22e">pdfPath</span>)) {
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">reject</span>(<span style="color:#66d9ef">new</span> Error(<span style="color:#e6db74">&#39;Intermediate PDF file was not created.&#39;</span>));
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Step 2: Convert intermediate PDF pages to PNGs using pdftoppm
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>            <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">outputPrefix</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">path</span>.<span style="color:#a6e22e">join</span>(<span style="color:#a6e22e">outputDir</span>, <span style="color:#e6db74">`</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">baseName</span><span style="color:#e6db74">}</span><span style="color:#e6db74">-page`</span>);
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">pdftoppmCmd</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">`pdftoppm -png -r 150 &#34;</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">pdfPath</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34; &#34;</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">outputPrefix</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;`</span>;
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#a6e22e">exec</span>(<span style="color:#a6e22e">pdftoppmCmd</span>, (<span style="color:#a6e22e">ppmErr</span>) =&gt; {
</span></span><span style="display:flex;"><span>                <span style="color:#75715e">// Cleanup intermediate PDF
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                <span style="color:#a6e22e">fs</span>.<span style="color:#a6e22e">unlinkSync</span>(<span style="color:#a6e22e">pdfPath</span>);
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">ppmErr</span>) <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">reject</span>(<span style="color:#66d9ef">new</span> Error(<span style="color:#e6db74">&#39;pdftoppm rendering failed: &#39;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">ppmErr</span>.<span style="color:#a6e22e">message</span>));
</span></span><span style="display:flex;"><span>                <span style="color:#a6e22e">resolve</span>(<span style="color:#e6db74">`Images successfully generated in: </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">outputDir</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>            });
</span></span><span style="display:flex;"><span>        });
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h4 id="privalumai">Privalumai</h4>
<ul>
<li><strong>Neprilygstamas formatų palaikymas:</strong> Puikus tikslumas <code>.docx</code>, <code>.doc</code>, <code>.xlsx</code>, <code>.xls</code>, <code>.pptx</code> ir <code>.ppt</code>.</li>
<li><strong>Labai stabilus:</strong> Aktyviai prižiūrima didžiulės pasaulinės bendruomenės.</li>
<li><strong>Išdėstymo tikslumas:</strong> Puikus šriftų, paraščių, lentelių ir įdėtų diagramų išsaugojimas.</li>
</ul>
<h4 id="trūkumai">Trūkumai</h4>
<ul>
<li><strong>Išteklių intensyvus:</strong> Headless LibreOffice proceso vykdymas reikalauja didelio RAM ir CPU.</li>
<li><strong>Vykdymo našta:</strong> Kiekvienam konvertavimui sukuriant naują CLI procesą gali riboti pralaidumą esant dideliam lygiagrečiam apkrovimui.</li>
</ul>
<h3 id="2-apache-poi1-java-ekosistema">2. <a href="https://products.fileformat.com/word-processing/java/apache-poi-xwpf/">Apache POI</a> (Java ekosistema)</h3>
<p>Kūrėjams, dirbantiems JVM (Java, Kotlin, Scala) aplinkoje, Apache POI yra standartinė biblioteka Microsoft Office formatų skaitymui ir rašymui. Joje yra tiesioginiai atvaizdavimo komponentai, galintys eksportuoti skaidres arba lapus į vaizdus.</p>
<h4 id="kaip-įdiegti-1">Kaip įdiegti</h4>
<p>Pridėkite Apache POI priklausomybes į savo Maven <code>pom.xml</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;dependencies&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;dependency&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;groupId&gt;</span>org.apache.poi<span style="color:#f92672">&lt;/groupId&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;artifactId&gt;</span>poi-ooxml<span style="color:#f92672">&lt;/artifactId&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;version&gt;</span>5.2.3<span style="color:#f92672">&lt;/version&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/dependency&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;dependency&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;groupId&gt;</span>org.apache.poi<span style="color:#f92672">&lt;/groupId&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;artifactId&gt;</span>poi-scratchpad<span style="color:#f92672">&lt;/artifactId&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;version&gt;</span>5.2.3<span style="color:#f92672">&lt;/version&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/dependency&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/dependencies&gt;</span>
</span></span></code></pre></div><h4 id="kodo-pavyzdys-java-pptx-į-paveikslėlį-konvertavimas">Kodo pavyzdys (Java PPTX į paveikslėlį konvertavimas)</h4>
<p>Naudojant Apache POI PowerPoint failo (<code>.pptx</code>) analizavimui ir atskirų skaidrių piešimui tiesiogiai į rastrinį vaizdą:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.poi.xslf.usermodel.XMLSlideShow<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> org.apache.poi.xslf.usermodel.XSLFSlide<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> javax.imageio.ImageIO<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.awt.*<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.awt.geom.Rectangle2D<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.awt.image.BufferedImage<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.File<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.FileInputStream<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.FileOutputStream<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.io.IOException<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> java.util.List<span style="color:#f92672">;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">SlideToImageConverter</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">convertSlidesToImages</span><span style="color:#f92672">(</span>File pptxFile<span style="color:#f92672">,</span> File outputFolder<span style="color:#f92672">)</span> <span style="color:#66d9ef">throws</span> IOException <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">try</span> <span style="color:#f92672">(</span>FileInputStream is <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileInputStream<span style="color:#f92672">(</span>pptxFile<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>             XMLSlideShow ppt <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> XMLSlideShow<span style="color:#f92672">(</span>is<span style="color:#f92672">))</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            Dimension pageSize <span style="color:#f92672">=</span> ppt<span style="color:#f92672">.</span><span style="color:#a6e22e">getPageSize</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>            List<span style="color:#f92672">&lt;</span>XSLFSlide<span style="color:#f92672">&gt;</span> slides <span style="color:#f92672">=</span> ppt<span style="color:#f92672">.</span><span style="color:#a6e22e">getSlides</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">for</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">int</span> i <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span><span style="color:#f92672">;</span> i <span style="color:#f92672">&lt;</span> slides<span style="color:#f92672">.</span><span style="color:#a6e22e">size</span><span style="color:#f92672">();</span> i<span style="color:#f92672">++)</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                BufferedImage img <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> BufferedImage<span style="color:#f92672">(</span>pageSize<span style="color:#f92672">.</span><span style="color:#a6e22e">width</span><span style="color:#f92672">,</span> pageSize<span style="color:#f92672">.</span><span style="color:#a6e22e">height</span><span style="color:#f92672">,</span> BufferedImage<span style="color:#f92672">.</span><span style="color:#a6e22e">TYPE_INT_ARGB</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                Graphics2D graphics <span style="color:#f92672">=</span> img<span style="color:#f92672">.</span><span style="color:#a6e22e">createGraphics</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e">// Set default rendering options for high quality
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                graphics<span style="color:#f92672">.</span><span style="color:#a6e22e">setRenderingHint</span><span style="color:#f92672">(</span>RenderingHints<span style="color:#f92672">.</span><span style="color:#a6e22e">KEY_ANTIALIASING</span><span style="color:#f92672">,</span> RenderingHints<span style="color:#f92672">.</span><span style="color:#a6e22e">VALUE_ANTIALIAS_ON</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                graphics<span style="color:#f92672">.</span><span style="color:#a6e22e">setRenderingHint</span><span style="color:#f92672">(</span>RenderingHints<span style="color:#f92672">.</span><span style="color:#a6e22e">KEY_RENDERING</span><span style="color:#f92672">,</span> RenderingHints<span style="color:#f92672">.</span><span style="color:#a6e22e">VALUE_RENDER_QUALITY</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e">// Clear the canvas area
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                graphics<span style="color:#f92672">.</span><span style="color:#a6e22e">setPaint</span><span style="color:#f92672">(</span>Color<span style="color:#f92672">.</span><span style="color:#a6e22e">white</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                graphics<span style="color:#f92672">.</span><span style="color:#a6e22e">fill</span><span style="color:#f92672">(</span><span style="color:#66d9ef">new</span> Rectangle2D<span style="color:#f92672">.</span><span style="color:#a6e22e">Float</span><span style="color:#f92672">(</span><span style="color:#ae81ff">0</span><span style="color:#f92672">,</span> <span style="color:#ae81ff">0</span><span style="color:#f92672">,</span> pageSize<span style="color:#f92672">.</span><span style="color:#a6e22e">width</span><span style="color:#f92672">,</span> pageSize<span style="color:#f92672">.</span><span style="color:#a6e22e">height</span><span style="color:#f92672">));</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                <span style="color:#75715e">// Draw the slide elements onto our graphic buffer
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>                slides<span style="color:#f92672">.</span><span style="color:#a6e22e">get</span><span style="color:#f92672">(</span>i<span style="color:#f92672">).</span><span style="color:#a6e22e">draw</span><span style="color:#f92672">(</span>graphics<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                
</span></span><span style="display:flex;"><span>                File outputFile <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> File<span style="color:#f92672">(</span>outputFolder<span style="color:#f92672">,</span> <span style="color:#e6db74">&#34;slide-&#34;</span> <span style="color:#f92672">+</span> <span style="color:#f92672">(</span>i <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span><span style="color:#f92672">)</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;.png&#34;</span><span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">try</span> <span style="color:#f92672">(</span>FileOutputStream out <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> FileOutputStream<span style="color:#f92672">(</span>outputFile<span style="color:#f92672">))</span> <span style="color:#f92672">{</span>
</span></span><span style="display:flex;"><span>                    ImageIO<span style="color:#f92672">.</span><span style="color:#a6e22e">write</span><span style="color:#f92672">(</span>img<span style="color:#f92672">,</span> <span style="color:#e6db74">&#34;PNG&#34;</span><span style="color:#f92672">,</span> out<span style="color:#f92672">);</span>
</span></span><span style="display:flex;"><span>                <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>                graphics<span style="color:#f92672">.</span><span style="color:#a6e22e">dispose</span><span style="color:#f92672">();</span>
</span></span><span style="display:flex;"><span>            <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">}</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">}</span>
</span></span></code></pre></div><h4 id="privalumai-1">Privalumai</h4>
<ul>
<li><strong>Grynas Java sprendimas:</strong> Nereikia išorinių binarinių failų ar sistemos lygio programinės įrangos.</li>
<li><strong>Detali kontrolė:</strong> Leidžia programiškai keisti dokumento elementus prieš eksportavimą.</li>
<li><strong>Mažas išteklių poreikis:</strong> Greitesnis vykdymas nei paleidžiant be galvos (headless) sistemos paketus mažo masto konversijoms.</li>
</ul>
<h4 id="trūkumai-1">Trūkumai</h4>
<ul>
<li><strong>Sudėtinga sąranka:</strong> Word dokumentų su sudėtingais išdėstymais atvaizdavimas reikalauja reikšmingo šablono kodo.</li>
<li><strong>Nenuoseklaus tikslumo:</strong> Išplėstinis formatavimas ir sudėtingos Excel diagramos gali būti atvaizduojamos ne 100 % tiksliai, palyginti su natūraliu MS Office.</li>
</ul>
<h3 id="3-pandoc--weasyprint--wkhtmltopdf">3. Pandoc + WeasyPrint / wkhtmltopdf</h3>
<p>Pandoc yra žinomas kaip &ldquo;universalių dokumentų konvertuotojas&rdquo;. Naudojant Pandoc kartu su šiuolaikiniais HTML‑į‑vaizdą renderinimo įrankiais, kūrėjai gali sukurti labai pritaikomas dokumentų‑į‑vaizdą konversijos grandines.</p>
<h4 id="kaip-įdiegti-2">Kaip įdiegti</h4>
<p>Linux platformose galite įdiegti reikiamus paketus naudodami savo paketų tvarkyklę:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt-get install -y pandoc weasyprint
</span></span></code></pre></div><h4 id="kodo-pavyzdys-python-konvejerio-apvalkalas">Kodo pavyzdys (Python konvejerio apvalkalas)</h4>
<p>Ši konvejerio eilė konvertuoja <code>.docx</code> dokumentą į tarpinį HTML naudodama Pandoc, stiliaus priskyrimą, o tada sukuria PNG paveikslėlį naudojant WeasyPrint:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> subprocess
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">render_docx_to_png</span>(docx_path, output_png_path):
</span></span><span style="display:flex;"><span>    temp_html <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;temp_output.html&#34;</span>
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">try</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Step 1: Convert DOCX to clean HTML via Pandoc</span>
</span></span><span style="display:flex;"><span>        subprocess<span style="color:#f92672">.</span>run([
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#39;pandoc&#39;</span>, docx_path, <span style="color:#e6db74">&#39;-f&#39;</span>, <span style="color:#e6db74">&#39;docx&#39;</span>, <span style="color:#e6db74">&#39;-t&#39;</span>, <span style="color:#e6db74">&#39;html&#39;</span>, <span style="color:#e6db74">&#39;-s&#39;</span>, <span style="color:#e6db74">&#39;-o&#39;</span>, temp_html
</span></span><span style="display:flex;"><span>        ], check<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>        
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Step 2: Compile the HTML structure to an image with WeasyPrint</span>
</span></span><span style="display:flex;"><span>        subprocess<span style="color:#f92672">.</span>run([
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#39;weasyprint&#39;</span>, temp_html, output_png_path
</span></span><span style="display:flex;"><span>        ], check<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>        
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">finally</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>exists(temp_html):
</span></span><span style="display:flex;"><span>            os<span style="color:#f92672">.</span>remove(temp_html)
</span></span></code></pre></div><h4 id="privalumai-2">Privalumai</h4>
<ul>
<li><strong>Labai pritaikoma:</strong> Kadangi tarpinis etapas yra HTML, galite įterpti pasirinktinius CSS, kad dinamiškai stilizuotumėte dokumentų peržiūras.</li>
<li><strong>Labai greita:</strong> Kai sukonfigūruota, teksto turinčių dokumentų analizė yra nepaprastai greita.</li>
</ul>
<h4 id="trūkumai-2">Trūkumai</h4>
<ul>
<li><strong>Tikslumo apribojimai:</strong> Labai stilizuoti dokumentų išdėstymai ir sudėtingos įmonės šablonai nėra verčiami tobulai iš Docx į HTML.</li>
<li><strong>Rankinis derinimas:</strong> Geriausiai tinka ataskaitoms ar laiškams, o ne medijos turtingoms prezentacijoms.</li>
</ul>
<h3 id="4-python-docx3--pdf2image-python-ekosistema">4. <a href="https://blog.fileformat.com/image/difference-between-bmp-and-png/">Python-Docx</a> &amp; pdf2image (Python ekosistema)</h3>
<p>Python kūrėjams dažnai naudojamas metodas apima dokumentų struktūrų skaitymą arba pagalbinių skriptų naudojimą, kad saugiai eksportuoti failus.</p>
<h4 id="kaip-įdiegti-3">Kaip įdiegti</h4>
<p>Įsitikinkite, kad įdiegti tiek LibreOffice, tiek sistemos paketas <code>poppler-utils</code>, tada sukonfigūruokite Python paketą:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install pdf2image
</span></span></code></pre></div><h4 id="kodo-pavyzdys-python-mikroserviso-įgyvendinimas">Kodo pavyzdys (Python mikroserviso įgyvendinimas)</h4>
<p>Sujungdami Python vykdymo biblioteką su <code>pdf2image</code> ir vietine LibreOffice binarine, kūrėjai gali rašyti švarius, asinchroniškai palaikomus konvertavimo API:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> subprocess
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> pdf2image <span style="color:#f92672">import</span> convert_from_path
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">docx_to_images</span>(docx_path, output_dir):
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Convert DOCX to PDF using headless LibreOffice</span>
</span></span><span style="display:flex;"><span>    subprocess<span style="color:#f92672">.</span>run([
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#39;libreoffice&#39;</span>, <span style="color:#e6db74">&#39;--headless&#39;</span>, <span style="color:#e6db74">&#39;--convert-to&#39;</span>, <span style="color:#e6db74">&#39;pdf&#39;</span>, <span style="color:#e6db74">&#39;--outdir&#39;</span>, output_dir, docx_path
</span></span><span style="display:flex;"><span>    ], check<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Track down the generated PDF file</span>
</span></span><span style="display:flex;"><span>    base_filename <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>splitext(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>basename(docx_path))[<span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>    pdf_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(output_dir, <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>base_filename<span style="color:#e6db74">}</span><span style="color:#e6db74">.pdf&#34;</span>)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Convert PDF pages to a list of PIL Images</span>
</span></span><span style="display:flex;"><span>    images <span style="color:#f92672">=</span> convert_from_path(pdf_path, dpi<span style="color:#f92672">=</span><span style="color:#ae81ff">150</span>)
</span></span><span style="display:flex;"><span>    
</span></span><span style="display:flex;"><span>    generated_paths <span style="color:#f92672">=</span> []
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> i, image <span style="color:#f92672">in</span> enumerate(images):
</span></span><span style="display:flex;"><span>        page_path <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(output_dir, <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>base_filename<span style="color:#e6db74">}</span><span style="color:#e6db74">_page_</span><span style="color:#e6db74">{</span>i<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span><span style="color:#e6db74">}</span><span style="color:#e6db74">.png&#34;</span>)
</span></span><span style="display:flex;"><span>        image<span style="color:#f92672">.</span>save(page_path, <span style="color:#e6db74">&#39;PNG&#39;</span>)
</span></span><span style="display:flex;"><span>        generated_paths<span style="color:#f92672">.</span>append(page_path)
</span></span><span style="display:flex;"><span>        
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Clean up intermediate PDF</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>exists(pdf_path):
</span></span><span style="display:flex;"><span>        os<span style="color:#f92672">.</span>remove(pdf_path)
</span></span><span style="display:flex;"><span>        
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> generated_paths
</span></span></code></pre></div><h4 id="privalumai-3">Privalumai</h4>
<ul>
<li><strong>Lengva diegti:</strong> Gali būti lengvai supakuota Docker konteineryje (pvz., <code>python:3.10-slim</code> su įdiegtu <code>libreoffice</code>).</li>
<li><strong>Lanksti automatizacija:</strong> Lengvai integruojama su debesų pagrindu veikiančiomis žinučių eilėmis (Celery, RabbitMQ) foniniam apdorojimui.</li>
</ul>
<h2 id="architektūrinės-geriausios-praktikos-gamybos-mastui">Architektūrinės geriausios praktikos gamybos mastui</h2>
<p>Jei planuojate naudoti atviro kodo konvertavimo bibliotekas didelio srauto gamybinėje aplinkoje, apsvarstykite šias architektūrines strategijas:</p>
<h3 id="1-pasinaudokite-docker-kad-izoliuotumėte-smėlio-dėžę">1. Pasinaudokite Docker, kad izoliuotumėte smėlio dėžę</h3>
<p>Įrankių, tokių kaip LibreOffice, vykdymas kaip subprocessai kartais gali sukelti užstrigusį procesą arba atminties nuotėkius. Dokumentų konvertavimo variklio konteinerizavimas užtikrina, kad jei konvertavimas sugriūtų, pagrindinis žiniatinklio serveris liktų nepakitęs.</p>
<h3 id="2-įgyvendinkite-eilės-sistemą">2. Įgyvendinkite eilės sistemą</h3>
<p>Dokumentų konvertavimas yra stipriai CPU priklausomas. Niekada neverkite konvertavimų tiesiogiai sinchroniniuose žiniatinklio užklausose. Naudokite asinchroninę darbų eilę (pvz., Celery, BullMQ arba Sidekiq), kad konvertavimus atliktumėte fone ir praneštumėte klientams per WebSockets arba apklausą.</p>
<h3 id="3-talpinkite-išvestį">3. Talpinkite išvestį</h3>
<p>Jei dokumentai yra statiški, visada saugokite sugeneruotų vaizdų rezultatus objektų saugojimo kibire (pvz., AWS S3 arba MinIO) ir teikite juos per CDN. Nekeiskite to paties failo du kartus.</p>
<h2 id="santraukos-palyginimas">Santraukos palyginimas</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Įrankis / Biblioteka</th>
<th style="text-align:left">Išdėstymo tikslumas</th>
<th style="text-align:left">Sistemos priklausomybės</th>
<th style="text-align:left">Našumas (Greitis)</th>
<th style="text-align:left">Geriausias naudojimo atvejis</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>LibreOffice Headless</strong></td>
<td style="text-align:left">Puiku</td>
<td style="text-align:left">Aukštas (Reikia LibreOffice paketo)</td>
<td style="text-align:left">Vidutinis</td>
<td style="text-align:left">Sudėtingas <code>.docx</code>, <code>.xlsx</code>, <code>.pptx</code>, kai vizualinis tikslumas yra svarbiausia.</td>
</tr>
<tr>
<td style="text-align:left"><strong>Apache POI</strong></td>
<td style="text-align:left">Vidutinis</td>
<td style="text-align:left">Žemas (tik JVM)</td>
<td style="text-align:left">Aukštas</td>
<td style="text-align:left">Greita skaidrių konvertavimas į vaizdus natūraliose Java įmoninėse programose.</td>
</tr>
<tr>
<td style="text-align:left"><strong>Pandoc Pipeline</strong></td>
<td style="text-align:left">Žemas-vidutinis</td>
<td style="text-align:left">Žemas (Pandoc + Renderer)</td>
<td style="text-align:left">Labai aukštas</td>
<td style="text-align:left">Paprasti, teksto gausūs ataskaitų ir labai struktūruoti programiniai dokumentai.</td>
</tr>
<tr>
<td style="text-align:left"><strong>Python apvalkalas</strong></td>
<td style="text-align:left">Puikus</td>
<td style="text-align:left">Aukštas (LibreOffice + Poppler)</td>
<td style="text-align:left">Vidutinis-aukštas</td>
<td style="text-align:left">Greitas internetinių programų prototipavimas, lengvi mikroservisai.</td>
</tr>
</tbody>
</table>
<h2 id="baigiamieji-mintys">Baigiamieji mintys</h2>
<p>Perėjimas prie atviro kodo sprendimo dokumentų į vaizdus konvertavimui yra itin efektyvus būdas pašalinti tiekėjo priklausomybę ir dideles licencijų išlaidas. Nors headless LibreOffice iš karto suteikia geriausią vizualinę konvertavimo tikslumą, jis reikalauja tvirto sistemos lygio konfigūracijos ir tinkamos konteinerio izoliacijos, kad saugiai susidorotų su staigiais apkrovų šuoliais. Kita vertus, JVM natyvios įgyvendinimai, tokie kaip Apache POI, siūlo neprilygstamą integracijos greitį, jei griežtai konvertuojate skaidrių demonstracijas arba paprastus duomenų sąrašus.</p>
<p>Įvertinkite tikslinių dokumentų išdėstymo sudėtingumą ir pasirinkite įrankių grandinę, kuri atitinka jūsų dabartinę technologinę aplinką, kad gautumėte geriausius rezultatus!</p>
<h2 id="duk-skyrius">DUK skyrius</h2>
<ol>
<li>
<p><strong>Kaip konvertuoti <a href="https://docs.fileformat.com/word-processing/docx/">DOCX</a> failą į <a href="https://docs.fileformat.com/image/png/">PNG</a> naudojant headless LibreOffice?</strong></p>
<ul>
<li><strong>Atsakymas:</strong> Jūs iškviečiate <code>soffice --headless --convert-to pdf document.docx</code> per savo vykdymo aplinkos apvalkalo vykdymo sistemą, kad sukurtumėte tarpinį PDF, tada apdorojate tą PDF failą į atskirus puslapių PNG naudodami sistemos atvaizdavimo įrankį, pvz., <code>pdftoppm</code>.</li>
</ul>
</li>
<li>
<p><strong>Ar atviro kodo bibliotekos gali išsaugoti sudėtingas Excel diagramas konvertuojant į vaizdus?</strong></p>
<ul>
<li><strong>Atsakymas:</strong> Tik pilni sistemos varikliai, tokie kaip headless LibreOffice, gali tiksliai konvertuoti sudėtingas Excel diagramas ir vizualines makrokomandas; grynai kodo pagrindu veikiantys analizatoriai, tokie kaip neapdorotas Apache POI, dažnai praleidžia išplėstinius stilius arba vizualines diagramas.</li>
</ul>
</li>
<li>
<p><strong>Ar Apache POI tinkamas konvertuoti visus PowerPoint pristatymus į vaizdo formatus?</strong></p>
<ul>
<li><strong>Atsakymas:</strong> Taip, Apache POI turi specializuotus <code>XSLFSlide</code> braižymo komponentus, kurie atvaizduoja PowerPoint skaidres tiesiai į natūralius Java atminties objektus (<code>Graphics2D</code>), todėl tai yra nepaprastai greita <code>.pptx</code> rinkinių apdorojimui.</li>
</ul>
</li>
<li>
<p><strong>Kaip galiu tvarkyti didelio apimties dokumentų į vaizdus konvertavimą nesukeliant lėtėjimo pagrindinėje internetinėje programoje?</strong></p>
<ul>
<li><strong>Atsakymas:</strong> Perkelkite užduotis visiškai iš pagrindinio HTTP programos gijos į asinchroninę fono darbininkų eilės ekosistemą, pvz., Celery, BullMQ arba Sidekiq, veikiančią izoliuotose Docker instancijose.</li>
</ul>
</li>
<li>
<p><strong>Kuris atviro kodo dokumentų konvertuotojas siūlo aukščiausią išdėstymo ir šriftų tikslumą?</strong></p>
<ul>
<li><strong>Atsakymas:</strong> Headless LibreOffice suteikia absoliučiai aukščiausią konvertavimo tikslumą, nes naudoja pilno masto darbalaukio išdėstymo variklius stilių, paraščių, įterptų medijų ir sudėtingos daugelio puslapių tipografijos analizavimui.</li>
</ul>
</li>
</ol>
<h2 id="taip-pat-žiūrėkite">Taip pat žiūrėkite</h2>
<ul>
<li><a href="https://blog.fileformat.com/en/image/webp-vs-avif-vs-jpeg-xl-which-image-format-should-developers-choose-in-2026/">WebP vs AVIF vs JPEG XL: Geriausias vaizdo formatas kūrėjams 2026</a></li>
<li><a href="https://blog.fileformat.com/image/difference-between-bmp-and-png/">Skirtumas tarp BMP ir PNG</a></li>
<li><a href="https://blog.fileformat.com/2021/08/19/apng-vs-bmp-which-image-file-format-is-better/">APNG vs BMP: Kuris vaizdo failo formatas geresnis?</a></li>
<li><a href="https://blog.fileformat.com/2021/08/25/raster-vs-vector-images-a-brief-comparison/">Rastriniai ir vektoriniai vaizdai: trumpas palyginimas</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
