<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: IDRSolutions</title>
    <description>The latest articles on Forem by IDRSolutions (@idrsolutions).</description>
    <link>https://forem.com/idrsolutions</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3078638%2Faa7ba4ef-f446-48e3-95e9-0c43d0c3e214.png</url>
      <title>Forem: IDRSolutions</title>
      <link>https://forem.com/idrsolutions</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/idrsolutions"/>
    <language>en</language>
    <item>
      <title>How to Display Fillable PDF forms in a browser</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 06 May 2026 10:47:11 +0000</pubDate>
      <link>https://forem.com/idrsolutions/how-to-display-fillable-pdf-forms-in-a-browser-3f3e</link>
      <guid>https://forem.com/idrsolutions/how-to-display-fillable-pdf-forms-in-a-browser-3f3e</guid>
      <description>&lt;p&gt;Displaying fillable PDF forms in Chrome (or in any browser) saves a lot of the manual work of filling in forms, scanning them to then digitally present them. By making use of checkboxes, buttons and lists, fillable PDF files simplify this process. It also makes them widely accessible (all you need is a laptop or mobile device) and allows easy submission of the data into systems.&lt;/p&gt;

&lt;p&gt;There are four different ways to display fillable PDF forms in a browser:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Flatten form or display as a flattened form
&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="https://blog.idrsolutions.com/what-is-pdf-form-flattening/" rel="noopener noreferrer"&gt;previous article&lt;/a&gt; explains how PDF form flattening works, including the advantages it has, such as simplifying the PDF. I suggest checking that article out for more information. After the form is flattened, it can be displayed.&lt;/p&gt;

&lt;p&gt;Because the Forms themselves have been turned into images and non-editable text, the downside of this is that the Forms can no longer be edited. So this is a strictly display-only option.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Client software
&lt;/h2&gt;

&lt;p&gt;There is a free PDF viewer (written in JavaScript) called &lt;a href="https://mozilla.github.io/pdf.js/" rel="noopener noreferrer"&gt;PDF.js&lt;/a&gt; that runs in the browser and displays flat PDF files. Recent versions have started adding support for some form features. &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Using Browser-based software
&lt;/h2&gt;

&lt;p&gt;If you are using interactive content, there are software products which provide a browser front end and allow you to display PDF files. Adobe has a very powerful (and expensive) Enterprise solution called Adobe Experience Manager Forms ( previously known as LiveCycle). &lt;a href="https://business.adobe.com/uk/products/experience-manager/forms/aem-forms.html" rel="noopener noreferrer"&gt;Forms Manager&lt;/a&gt; can automatically convert traditional input fields to digital forms, which is a nice additional feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Convert form to HTML5
&lt;/h2&gt;

&lt;p&gt;This is our preferred solution, which we implement with &lt;a href="https://www.idrsolutions.com/formvu/" rel="noopener noreferrer"&gt;FormVu&lt;/a&gt;. FormVu is the best tool for filling PDF forms in HTML.  Browsers display HTML5 content (including interactive form elements). So why not convert the Forms into standalone HTML5 content?&lt;/p&gt;

&lt;p&gt;Which of the 4 ways will best suit you will depend on your exact requirements and budget, but there is a real choice of viable options to get your fillable PDF forms into the browser. It is important to note that these methods work with Microsoft Edge, Chrome and most other browsers.&lt;/p&gt;

&lt;p&gt;You can read our other articles to know what &lt;a href="https://blog.idrsolutions.com/what-are-pdf-forms/" rel="noopener noreferrer"&gt;PDF forms&lt;/a&gt; are and to &lt;a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" rel="noopener noreferrer"&gt;understand the PDF file format&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>html</category>
      <category>programming</category>
      <category>pdf</category>
      <category>webdev</category>
    </item>
    <item>
      <title>PDF to HTML conversion – Tradeoffs on adjusting font size</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Fri, 01 May 2026 11:20:24 +0000</pubDate>
      <link>https://forem.com/idrsolutions/pdf-to-html-conversion-tradeoffs-on-adjusting-font-size-1hm6</link>
      <guid>https://forem.com/idrsolutions/pdf-to-html-conversion-tradeoffs-on-adjusting-font-size-1hm6</guid>
      <description>&lt;p&gt;When you convert a PDF to HTML, you move from a coding environment where you can work in any floating point size to one where you have to work with int pt sizes. This can cause some issues – if the PDF font size is 8.5pt should we use 8 or 9 in the HTML (8.5 is not allowed and both 8 and 9 are essentially wrong as they will not fit exactly)?&lt;/p&gt;

&lt;p&gt;To improve the positioning of the text in HTML we alter the CharSpacing (moving the characters together or apart) and also see if adjusting the font size would produce a better fit. &lt;/p&gt;

&lt;p&gt;This is especially important when substituting fonts in the HTML – some fonts I have seen are much thinner than the replacement HTML fonts so 9pt in font X is actually more like 18pt in the font we use to display as HTML.&lt;/p&gt;

&lt;p&gt;The drawback with this approach is that it can result in blocks of text with slightly changing font sizes (8,9,8,9,9,8 pt for example). This is more accurate but looks odd. So in our latest release we have added a compromise in the HTML. &lt;/p&gt;

&lt;p&gt;We will ignore small changes in HTML font size (so that line of text will now be 8,8,8,8,8,8 pt) but the 9pt is still changed to 18pt). And we allow the user to adjust the threshold value using the code call&lt;/p&gt;

&lt;p&gt;&lt;code&gt;//only adjust font if change bigger than 5pt&lt;br&gt;
HTMLoutput.setValue(HTMLDisplay.UseFontResizing, 5);&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Altering the value 5 to zero would include any tiny change and 10 would only alter the font size if the change was great than 10 pt. &lt;/p&gt;

&lt;p&gt;5 seems a sensible default and you can experiment with the best compromise for your files in converting PDF to HTML. What value works best for you?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.idrsolutions.com/buildvu/" rel="noopener noreferrer"&gt;BuildVu&lt;/a&gt; is specifically designed for maintaining font integrity when converting PDFs to HTML, so the display document remains a true reproduction of the document.&lt;/p&gt;

</description>
      <category>html</category>
      <category>pdf</category>
      <category>css</category>
    </item>
    <item>
      <title>What is JPEG XL?</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 29 Apr 2026 11:56:04 +0000</pubDate>
      <link>https://forem.com/idrsolutions/what-is-jpeg-xl-30pi</link>
      <guid>https://forem.com/idrsolutions/what-is-jpeg-xl-30pi</guid>
      <description>&lt;h2&gt;
  
  
  What is the JPEG XL image format?
&lt;/h2&gt;

&lt;p&gt;JPEG XL (ISO/IEC 18181) is an open-source file format for raster-graphics that is effective for lossy and lossless compression. It is designed for responsive web environments, to display content across various devices.&lt;/p&gt;

&lt;p&gt;Jyrki Alakuijala, Jon Sneyers and Luca Versari are among notable names that contributed towards the creation of this file format. Its development began in 2017, with the need a for a modern format based on the legacy JPEG format that could progressively render images for a more responsive experience.&lt;/p&gt;

&lt;p&gt;The image format combines Google’s PIK and Cloudbinary’s FUIF technology and the format was standardized in October of 2021, making it one the newer image formats. The forward looking image format has an adaptable framework, which allows for seamless integration of new features and functionalities.&lt;/p&gt;

&lt;p&gt;The filename extension commonly associated with JPEG XL is: &lt;code&gt;.jxl&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does JPEG XL stand for?
&lt;/h2&gt;

&lt;p&gt;The acronym stands for Joint Photographic Experts Group Extra-Large, an acronym derived from the legacy &lt;a href="https://blog.idrsolutions.com/what-is-jpeg/" rel="noopener noreferrer"&gt;JPEG&lt;/a&gt; format.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are its benefits?
&lt;/h2&gt;

&lt;p&gt;Since it is one of the newer formats, it is more effective in lossless transcoding compared to previous formats such as &lt;a href="https://blog.idrsolutions.com/what-is-webp-image-format/" rel="noopener noreferrer"&gt;WebP&lt;/a&gt; and JPEG. You can convert JPEG images to this format without seeing additional artifacts, not compromising image quality.&lt;/p&gt;

&lt;p&gt;The format enhances user experience by constantly improving image quality with incoming data, something valuable for low-bandwidth scenarios. It provides features such as alpha channel and animated images.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases of JPEGXL
&lt;/h2&gt;

&lt;p&gt;Some of the use cases for the image format can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serving optimized images on websites to reduce bandwidth and improve load times.&lt;/li&gt;
&lt;li&gt;Archiving and lossless storage of image libraries, including reversible conversion of existing JPEGs to JPEG XL without quality loss.&lt;/li&gt;
&lt;li&gt;Using transparency and animation support for graphics, icons, or UI elements where PNG or GIF is traditionally used.&lt;/li&gt;
&lt;li&gt;High-fidelity photography and creative workflows, especially for images with wide color gamut or high dynamic range (HDR).&lt;/li&gt;
&lt;li&gt;Use in geospatial or scientific imaging tools to read and write large raster images with embedded metadata and color profiles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also provides progressive decoding which adds more details to images as the data comes in. While the format works well on low bitrates, it performs best at high bitrates where degradation is low.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing with other formats
&lt;/h2&gt;

&lt;p&gt;When comparing with other formats we observed that this specific format provides higher compression efficiency while also providing support for transcoding older JPEG files effectively, something that many other formats cannot do.&lt;/p&gt;

&lt;p&gt;Older codecs like JPEG use YCbCr colour space for chroma subsampling, which was originally designed for analogue televisions. JPEG XL, however, uses an LMS based colour space called XYB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does Java support JPEG XL?
&lt;/h2&gt;

&lt;p&gt;You can &lt;a href="https://blog.idrsolutions.com/how-to-read-jpeg-xl-images-in-java/" rel="noopener noreferrer"&gt;read&lt;/a&gt; JPEG XL images in Java with JDeli. &lt;a href="https://www.idrsolutions.com/jdeli/" rel="noopener noreferrer"&gt;JDeli&lt;/a&gt; is the best pure Java image library for image manipulation.&lt;/p&gt;

&lt;p&gt;If you would like to learn more about JPEG XL support, we have a repository of other such common image format in our &lt;a href="https://blog.idrsolutions.com/glossary-of-pdf-terms/" rel="noopener noreferrer"&gt;glossary&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As experienced Java developers, we help you &lt;a href="https://blog.idrsolutions.com/working-with-images-in-java/" rel="noopener noreferrer"&gt;work with images in Java&lt;/a&gt; and bring over a decade of hands-on experience with many image file formats.&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why choose a pure Java PDF library?</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Fri, 24 Apr 2026 13:31:02 +0000</pubDate>
      <link>https://forem.com/idrsolutions/why-choose-a-pure-java-pdf-library-2ngb</link>
      <guid>https://forem.com/idrsolutions/why-choose-a-pure-java-pdf-library-2ngb</guid>
      <description>&lt;h2&gt;
  
  
  What are the benefits of a pure Java PDF library and why does it matter?
&lt;/h2&gt;

&lt;p&gt;PDF processing sits at the core of many enterprise systems, and the Java PDF library you choose to build your system has significant implications.&lt;br&gt;
If you are building a new system, then here is why you should choose a pure Java PDF library.&lt;/p&gt;

&lt;p&gt;Whether you are selecting a PDF generation library in Java, for high-volume document creation, evaluating a Java PDF editor library for annotation workflows or integrating a Java PDF API into an existing microservice, the pure Java constraint narrows the field considerably, and for good reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write once, run anywhere
&lt;/h2&gt;

&lt;p&gt;Java’s slogan “write once, run anywhere” is particularly valuable in PDF processing. A pure Java library runs on any platform/operating system, which removes the need for recompilation or platform-specific code. &lt;/p&gt;

&lt;p&gt;You can deploy the same code that you wrote on your MacBook to a Linux or Windows server. This effectively removes any concerns for environment-specific bugs or cross-platform issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplified distribution and deployment
&lt;/h2&gt;

&lt;p&gt;With a pure Java solution, the burden of managing different native binaries compiled for different architectures does not exist. You no longer need to maintain multiple builds for x86 or ARM. &lt;/p&gt;

&lt;p&gt;This makes distribution much simpler, especially if you are shipping to end users. If deploying to the cloud, then you only need to create a single container image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved security and stability
&lt;/h2&gt;

&lt;p&gt;Security is a critical concern in PDF processing. The PDF file format is very complex and has been a frequent target for vulnerabilities and exploits. This is especially common in native libraries written in low-level code. (See this &lt;a href="https://en.wikipedia.org/wiki/FORCEDENTRY" rel="noopener noreferrer"&gt;scary example&lt;/a&gt;!). &lt;/p&gt;

&lt;p&gt;Running code entirely within the JVM introduces a strong safety layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory management is handled automatically by the garbage collection, reducing risks like buffer overflow exploits&lt;/li&gt;
&lt;li&gt;There is no direct memory access, which removes the risk of segmentation faults or other similar memory corruption errors&lt;/li&gt;
&lt;li&gt;Java’s security model ensures that execution is isolated and controlled&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Easier debugging and maintenance
&lt;/h2&gt;

&lt;p&gt;Java has a very mature ecosystem of development tools, including debuggers, profilers and refactoring utilities, which are widely available and well integrated into modern IDEs. This has several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify and resolve issues faster&lt;/li&gt;
&lt;li&gt;Easier to maintain codebase&lt;/li&gt;
&lt;li&gt;More efficient refactoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In contrast, debugging native code involves more complex tooling and can pose some platform-specific challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simpler licensing
&lt;/h2&gt;

&lt;p&gt;When a library has no external dependencies, it makes the licensing very straightforward. This can reduce the legal complexity of procurement and lower the risk of compliance issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, choosing a pure Java PDF library can be a strategic decision. By leveraging Java’s portability, security and ecosystem, enterprises can create large systems with much less technical debt in the long term. In the intricate field of PDF processing, this reduced complexity pays dividends across the entire software lifecycle.&lt;/p&gt;

&lt;p&gt;The table below outlines the differences between a pure Java PDF SDK and one that was written using native code and Java:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic29oous4myt3vq36bts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fic29oous4myt3vq36bts.png" alt="Pure Java vs Native code" width="800" height="703"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Looking for a pure Java PDF library to handle processing your documents? Check out JPedal.&lt;/li&gt;
&lt;li&gt;Want to learn more about the PDF file format? We have been developing PDF software for over 20 years!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>pdf</category>
    </item>
    <item>
      <title>Can you extract flattened form data from a PDF file?</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 22 Apr 2026 09:15:05 +0000</pubDate>
      <link>https://forem.com/idrsolutions/can-you-extract-flattened-form-data-from-a-pdf-file-1j89</link>
      <guid>https://forem.com/idrsolutions/can-you-extract-flattened-form-data-from-a-pdf-file-1j89</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Like many of my best articles, this posting was inspired by a customer question. We try to answer all questions and often use a blog post to provide a more detailed reply if it is a useful general topic.&lt;/p&gt;

&lt;p&gt;The question related to extracting form data from a PDF file. The PDF file format stores interactive form data apart from the general page data in a set of separate objects. So it is very easy to extract from the PDF file. However, it is possible to ‘flatten the forms’. I explained this in more detail in a previous post, &lt;a href="https://blog.idrsolutions.com/what-is-pdf-form-flattening/" rel="noopener noreferrer"&gt;“What is form flattening”&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge of Flattened Forms
&lt;/h2&gt;

&lt;p&gt;Once this has been done, the forms no longer exist, they are text or shapes inside the stream of commands used to draw the PDF and you cannot interact with them. So is it possible to still extract the data???&lt;/p&gt;

&lt;p&gt;The problem is that there is no single defined way to flatten Form data into a PDF file. The data can be stored in the PDF in several possible ways:-&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible Ways Flattened Data Can Be Stored
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;As ordinary text (especially for Form objects which show text data such as comboBoxes, Lists, and Text fields).&lt;/li&gt;
&lt;li&gt;As a special embedded character (especially for radio buttons or checked boxes where you can define one character as a ticked box and one character as a blank box).&lt;/li&gt;
&lt;li&gt;As a combination of a text character as a blank box and then the checks or ticks drawn on top for checked boxes.&lt;/li&gt;
&lt;li&gt;Purely as a set of draw commands.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1 and 4 are probably too complex to enable easy extraction.&lt;/p&gt;

&lt;p&gt;You could reconstruct the form data for 2 and 3 for radio buttons or check boxes as follows:-&lt;/p&gt;

&lt;h2&gt;
  
  
  Blank box drawn over
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Identify all the blank boxes. This will give you the locations of all the boxes.&lt;/li&gt;
&lt;li&gt;See if XForm coordinate falls inside the box (ie its checked). This will give you the status.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So it is a non-trivial task, and it may vary from file to file but it is possible. But if you have access to the original non-flattened PDF files. It is a lot easier.&lt;/p&gt;

&lt;p&gt;We have over 2 decades of experience in the industry and can help you &lt;a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" rel="noopener noreferrer"&gt;better understand the PDF file format&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Balancing Visual Consistency and Layout Precision in PDF-to-HTML Conversion</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Fri, 17 Apr 2026 09:29:25 +0000</pubDate>
      <link>https://forem.com/idrsolutions/balancing-visual-consistency-and-layout-precision-in-pdf-to-html-conversion-3gdf</link>
      <guid>https://forem.com/idrsolutions/balancing-visual-consistency-and-layout-precision-in-pdf-to-html-conversion-3gdf</guid>
      <description>&lt;p&gt;Converting PDFs to HTML often involves a tricky transition from a world of floating-point precision to one constrained by integer font sizes. When a PDF uses an 8.5pt font, for instance, HTML forces a choice between 8pt or 9pt, neither of which provides a perfect fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Precision vs. Aesthetics Dilemma
&lt;/h2&gt;

&lt;p&gt;To maintain layout integrity, we traditionally adjust character spacing or tweak font sizes to ensure the text fits the container. This is vital when substituting fonts; if a replacement HTML font is significantly thinner than the original, a 9pt PDF font might actually require an 18pt HTML equivalent to look correct.&lt;/p&gt;

&lt;p&gt;The downside? Prioritizing "perfect fit" can result in visually jarring text blocks where sizes flicker inconsistently (e.g., 8pt, 9pt, 8pt, 9pt) just to keep the alignment precise.&lt;/p&gt;

&lt;h2&gt;
  
  
  A New Balanced Approach
&lt;/h2&gt;

&lt;p&gt;In our latest release, we’ve introduced a compromise to stabilize these visuals. The engine can now ignore minor font size fluctuations to maintain a uniform look (turning that "8, 9, 8" sequence into a steady "8, 8, 8"), while still allowing for major adjustments when a font substitution demands a significant resize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizing Your Threshold
&lt;/h2&gt;

&lt;p&gt;You can now control this behavior by setting a sensitivity threshold. Use the following code to define when a font size change is "large enough" to be applied:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//only adjust font if change bigger than 5pt&lt;/span&gt;
&lt;span class="nx"&gt;HTMLoutput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HTMLDisplay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UseFontResizing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;A value of 0: Captures every tiny adjustment for maximum positional accuracy.&lt;/li&gt;
&lt;li&gt;A value of 10: Prioritizes visual uniformity, only changing sizes for major discrepancies.&lt;/li&gt;
&lt;li&gt;Default (5): This is our recommended starting point for most files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We encourage you to experiment with this value to find the perfect balance of layout precision and visual consistency for your specific documents. &lt;a href="https://www.idrsolutions.com/buildvu/" rel="noopener noreferrer"&gt;BuilVu&lt;/a&gt; might help you get the best results, we encourage you to base your judgment on your own testing.&lt;/p&gt;

</description>
      <category>html</category>
      <category>pdf</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>Write PNG Images in Java (Tutorial)</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:53:18 +0000</pubDate>
      <link>https://forem.com/idrsolutions/write-png-images-in-java-tutorial-2j6l</link>
      <guid>https://forem.com/idrsolutions/write-png-images-in-java-tutorial-2j6l</guid>
      <description>&lt;h2&gt;
  
  
  PNG Problems in Java
&lt;/h2&gt;

&lt;p&gt;Java developers often face challenges with &lt;a href="https://blog.idrsolutions.com/what-is-png/" rel="noopener noreferrer"&gt;PNG images&lt;/a&gt; because the default ImageIO library provides minimal control over the final output. While it natively supports writing PNG files, it lacks the necessary tools to fine-tune the balance between image quality and file size. &lt;/p&gt;

&lt;p&gt;Consequently, developers cannot easily access the format's diverse configuration options, limiting their ability to optimize images effectively within the standard Java ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support for PNG in Java
&lt;/h2&gt;

&lt;p&gt;While Java offers native PNG support via ImageIO, developers can also utilize various open-source, commercial, or non-Java wrapper alternatives. &lt;/p&gt;

&lt;p&gt;We suggest JDeli, a secure and comprehensive pure-Java implementation that integrates seamlessly with ImageIO while offering its own dedicated API. &lt;/p&gt;

&lt;p&gt;This guide demonstrates how to &lt;a href="https://www.idrsolutions.com/jdeli/png" rel="noopener noreferrer"&gt;read, write, and convert PNGs&lt;/a&gt; and other formats using JDeli. I will compare two specific techniques for Java-based PNG processing: the standard ImageIO approach and our specialized JDeli library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write Image as PNG file in ImageIO
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;First, establish a File (or OutputStream) destination for the resulting PNG.&lt;/li&gt;
&lt;li&gt;Next, supply the image data, the "png" format identifier, and your output object to the write method.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Java code to write PNG with ImageIO
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/path/to/outputFile.png"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;ImageIO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"PNG"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Standard ImageIO will not automatically utilize the JDeli plugin for PNG exports. To ensure your code leverages JDeli for PNG output, you must manually enable the functionality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.idrsolutions.com/jdeli/#why-buy" rel="noopener noreferrer"&gt;Download the JDeli trial jar&lt;/a&gt; with our ImageIO plugin&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href="https://www.idrsolutions.com/docs/jdeli/tutorials/how-to-configure-jdeli-with-imageio" rel="noopener noreferrer"&gt;support documentation&lt;/a&gt; to install&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Write an image as PNG with JDeli
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Include JDeli within your class or module path (using the trial JAR download link).&lt;/li&gt;
&lt;li&gt;Next, initialize a File (or OutputStream) object for the output.&lt;/li&gt;
&lt;li&gt;Next, initialize a File (or OutputStream) object for the output.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Java code to write PNG with JDeli
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/path/to/outputFile.png"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"PNG"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//In JDeli you can also use a typesafe version&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;OutputFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PNG&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;pass&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="nc"&gt;PngEncoderOptions&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt; &lt;span class="n"&gt;control&lt;/span&gt; &lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="no"&gt;PNG&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;

&lt;span class="nc"&gt;PngEncoderOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PngEncoderOptions&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The original file was JPG in this example which was written out as a PNG image using JDeli.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other useful PNG links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Related articles on our &lt;a href="https://www.idrsolutions.com/docs/jdeli/png-support/" rel="noopener noreferrer"&gt;support site&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;How to &lt;a href="https://blog.idrsolutions.com/how-to-read-png-files-in-java/" rel="noopener noreferrer"&gt;read PNG&lt;/a&gt; files in Java.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.idrsolutions.com/how-to-mass-convert-png-to-jpg-tutorial/" rel="noopener noreferrer"&gt;How to convert PNG to JPG in bulk&lt;/a&gt; (Tutorial)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can JDeli Assist You?
&lt;/h2&gt;

&lt;p&gt;As the premier pure Java library for image manipulation, JDeli allows you to seamlessly read, write, and convert files with robust PNG support. You can explore our extensive &lt;a href="https://www.idrsolutions.com/docs/jdeli/png-support/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; to dive deeper into these capabilities. &lt;/p&gt;

&lt;p&gt;Backed by over a decade of expertise with diverse file formats, we are seasoned Java developers dedicated to &lt;a href="https://blog.idrsolutions.com/working-with-images-in-java/" rel="noopener noreferrer"&gt;helping you master image processing within the Java ecosystem&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to flatten PDF layers in Java (Tutorial)</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Fri, 10 Apr 2026 09:27:48 +0000</pubDate>
      <link>https://forem.com/idrsolutions/how-to-flatten-pdf-layers-in-java-tutorial-3ahe</link>
      <guid>https://forem.com/idrsolutions/how-to-flatten-pdf-layers-in-java-tutorial-3ahe</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Flattening PDF layers in Java is a way to lock a document’s appearance, ensure cross-device compatibility, and reduce file size by merging optional content into a single layer.&lt;/p&gt;

&lt;p&gt;Using the &lt;a href="https://www.idrsolutions.com/jpedal/" rel="noopener noreferrer"&gt;JPedal library&lt;/a&gt;, the process involves three main steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load: Initialize the &lt;code&gt;PdfManipulator&lt;/code&gt; and load your PDF file.&lt;/li&gt;
&lt;li&gt;Flatten: Call the &lt;code&gt;.flattenLayers()&lt;/code&gt; method to merge the content.&lt;/li&gt;
&lt;li&gt;Save: Use &lt;code&gt;.apply()&lt;/code&gt; and &lt;code&gt;.writeDocument()&lt;/code&gt; to export the final, simplified PDF.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What does it mean to flatten a PDF?
&lt;/h2&gt;

&lt;p&gt;Flattening a PDF merges all of its separate interactive layers, like signatures and annotations into a single, non-editable visual layer. This locks the content in place, preventing any further changes and ensuring the document looks exactly the same on every device or printer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why would you flatten PDF layers?
&lt;/h2&gt;

&lt;p&gt;A common reason for wanting to flatten layers is that it will preserve the document’s appearance across devices. PDF files with complicated visibility rules may expose bugs in different software implementations, so flattening the optional content removes this risk.&lt;/p&gt;

&lt;p&gt;Additionally, a draft version of a document may use layers to experiment with different appearances or content. The document would then be flattened into the final version so that these draft layers would be removed. This also has the benefit of reducing the file size.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set up JPedal
&lt;/h2&gt;

&lt;p&gt;To get started using the JPedal PDF library, &lt;a href="https://www.idrsolutions.com/jpedal/your-trial" rel="noopener noreferrer"&gt;download the JPedal trial jar&lt;/a&gt; from our website, and &lt;a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" rel="noopener noreferrer"&gt;add it to your Java project&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to flatten layers in a PDF in Java
&lt;/h2&gt;

&lt;p&gt;By using the code snippet below you can flatten the target PDF. Using JPedal’s &lt;a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" rel="noopener noreferrer"&gt;PDF Manipulator&lt;/a&gt; class:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load the document&lt;/li&gt;
&lt;li&gt;Call the &lt;code&gt;flattenLayers()&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;Save the result
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;PdfManipulator&lt;/span&gt; &lt;span class="n"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PdfManipulator&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;loadDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"inputFile.pdf"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flattenLayers&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apply&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeDocument&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"outputFile.pdf"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;reset&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;closeDocument&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Download JPedal
&lt;/h2&gt;

&lt;p&gt;You can download a &lt;a href="https://www.idrsolutions.com/jpedal/your-trial" rel="noopener noreferrer"&gt;JPedal trial&lt;/a&gt; jar to see how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Learn more about &lt;a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" rel="noopener noreferrer"&gt;manipulating PDF files in Java&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We can help you &lt;a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" rel="noopener noreferrer"&gt;better understand the PDF format&lt;/a&gt; as developers who have been working with the format for more than 2 decades!&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>java</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>What are Form XObjects?</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Fri, 10 Apr 2026 09:13:52 +0000</pubDate>
      <link>https://forem.com/idrsolutions/what-are-form-xobjects-1nk5</link>
      <guid>https://forem.com/idrsolutions/what-are-form-xobjects-1nk5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Form XObjects (not be confused with forms which are buttons, checkboxes, buttons, etc) are an advanced feature of the PDF file format. They can be thought of as sub-rountines (or even mini-PDFs) which are used on the main PDF display.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Form XObjects Work
&lt;/h2&gt;

&lt;p&gt;In the PDF command stream, a Do command can either reference and Xobject containing an Image or a Form.&lt;/p&gt;

&lt;p&gt;Both are defined in the Resources object. XForm objects can have their own Resources (fonts and images,etc) and even XForm objects. They also have a name (ie Fm1). So if you see &lt;strong&gt;Do /Fm1&lt;/strong&gt; in the PDF command stream, it is probably a form. Like images, they will be scaled and rotated using the current GraphicState settings but they offer more flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example in the Object Tree
&lt;/h2&gt;

&lt;p&gt;Here is what you might see in the Object tree (shown in Acrobat for a Form). Note it has a content stream of commands (which I have not shown).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv4kj7202lif44kvalgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv4kj7202lif44kvalgn.png" alt="Object Tree" width="468" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Using Form XObjects
&lt;/h2&gt;

&lt;p&gt;Like images, this allows you to save space by reusing the Object over and over again. It is also popular with PDF creation tools because it allows you to logically separate out blocks – for example flattened form data, stamps or any logical item can be created as an Form XObject, complete with its own fonts and resources.&lt;/p&gt;

</description>
      <category>html</category>
      <category>pdf</category>
      <category>programming</category>
    </item>
    <item>
      <title>What are Form XObjects?</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 08 Apr 2026 10:41:51 +0000</pubDate>
      <link>https://forem.com/idrsolutions/what-are-form-xobjects-43p</link>
      <guid>https://forem.com/idrsolutions/what-are-form-xobjects-43p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Form XObjects are an advanced component of the PDF specification. These are distinct from interactive form elements like buttons or checkboxes. You can view them as self-contained sub-routines or "mini-PDFs" that operate within the main document display.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Form XObjects Work
&lt;/h2&gt;

&lt;p&gt;Within a PDF's command stream, the Do operator calls an XObject, which can store either an image or a form. Both types are defined in the Resources dictionary. Form XObjects are unique because they can house their own internal Resources, such as fonts or images, and can even reference other Form XObjects.&lt;/p&gt;

&lt;p&gt;Each object is assigned a name, such as /Fm1. A Do /Fm1 instruction in the command stream usually indicates a form is being called. While they follow the current GraphicState settings for scaling and rotation, similar to images, they offer significantly more architectural flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example in the Object Tree
&lt;/h2&gt;

&lt;p&gt;In a tool like Acrobat, the object tree displays the Form as an object containing a content stream. This stream holds the specific drawing commands required to render that particular block of content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mte060p4btkhsj2fnqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mte060p4btkhsj2fnqd.png" alt="Object Tree example" width="468" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Using Form XObjects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reusing an object multiple times saves significant storage space.&lt;/li&gt;
&lt;li&gt;PDF creation software can logically separate content into distinct blocks.&lt;/li&gt;
&lt;li&gt;Items like stamps or flattened form data can be treated as individual units.&lt;/li&gt;
&lt;li&gt;Each object maintains its own independent set of fonts and resources.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>pdf</category>
      <category>html</category>
    </item>
    <item>
      <title>Convert PDF to HTML5: Preserving Layout</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Thu, 02 Apr 2026 15:02:13 +0000</pubDate>
      <link>https://forem.com/idrsolutions/convert-pdf-to-html5-preserving-layout-4ang</link>
      <guid>https://forem.com/idrsolutions/convert-pdf-to-html5-preserving-layout-4ang</guid>
      <description>&lt;p&gt;Whether you are a developer building a web application or a company aiming to digitize a massive archive, you have likely struggled to find the ideal way to display your files. You might transform a stylishly designed document to HTML, only to discover fonts are missing, images have shifted, and tables are a disorganized mess.&lt;/p&gt;

&lt;p&gt;If maintaining visual accuracy is your main goal, one particular solution outperforms all the others: BuildVu.&lt;/p&gt;

&lt;p&gt;Below is why BuildVu remains the top professional option for turning PDFs into HTML while keeping your original document design perfectly intact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge: Why Most Solutions Fail
&lt;/h2&gt;

&lt;p&gt;Most PDF-to-HTML software isn't optimized for high-quality transformation. These tools try to estimate where paragraphs conclude and where columns start. Since PDF uses a locked-position format, this estimation causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faulty Designs: Overlapping text layers and crooked visuals. Occasionally the page contents (sometimes even the text) are flattened into a single image.&lt;/li&gt;
&lt;li&gt;Font Swapping: Your specific corporate typefaces are swapped for basic styles like Arial or Times New Roman. This leads to further issues like text overcrowding and wrong sentence lengths.&lt;/li&gt;
&lt;li&gt;Heavy Coding: Cluttered, confusing HTML that is difficult to update. The resulting files are also bulkier, leading to slower performance in web browsers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pixel-Perfect Layout Preservation
&lt;/h2&gt;

&lt;p&gt;BuildVu avoids making assumptions about your design. It views the PDF as a graphical roadmap. Utilising an advanced processing system, it recreates the precise positioning of every single component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precision Mapping for Any Industry
&lt;/h2&gt;

&lt;p&gt;Whether you are processing detailed blueprints, premium catalogs, or technical guides featuring complex charts, the HTML results look exactly the same as the source PDF.&lt;/p&gt;

&lt;p&gt;Select here to view various examples of BuildVu's output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Font Conversion
&lt;/h2&gt;

&lt;p&gt;Typography represents a major obstacle during file transformation. When generating PDF files, creators can decide which specific fonts to include within the document.&lt;/p&gt;

&lt;p&gt;Many PDFs utilise embedded type to guarantee a uniform look on all devices, yet users often skip embedding standard fonts like Times New Roman to keep the total file size smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Navigating Font Licensing and Compliance
&lt;/h2&gt;

&lt;p&gt;Certain font permissions are flexible (like the SIL Open Font License), while others are quite limited. There isn't a foolproof digital method to automatically identify a font's specific license.&lt;/p&gt;

&lt;p&gt;Several font agreements were written before the web existed, creating confusion over what usage is permitted. BuildVu was built to manage these legal uncertainties via unique configuration options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizable Text Modes
&lt;/h2&gt;

&lt;p&gt;BuildVu processes typography in various ways based on your chosen Text Mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shapetext_nonselectable modes: BuildVu shows a static version of the type, preventing the generation of separate font files. Users cannot highlight text when using this setting.&lt;/li&gt;
&lt;li&gt;shapetext_selectable modes: BuildVu presents a static font appearance while also creating a compliant version of the font used for highlighting. This legal-safe font only stores character width data.&lt;/li&gt;
&lt;li&gt;realtext modes: BuildVu exports all integrated font files directly during the transformation process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Intelligent Fallback System
&lt;/h2&gt;

&lt;p&gt;If a PDF relies on fonts that weren't included, BuildVu keeps your file legible and polished by substituting high-tier open-source alternative fonts, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Liberation Serif and Liberation Sans&lt;/li&gt;
&lt;li&gt;Noto Sans Condensed plus Noto Sans Symbols2&lt;/li&gt;
&lt;li&gt;Tex Gyre Cursor&lt;/li&gt;
&lt;li&gt;GNU Unifont&lt;/li&gt;
&lt;li&gt;Anton&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Efficient Asset Management
&lt;/h2&gt;

&lt;p&gt;To maintain low file weights and peak efficiency, BuildVu employs clever reasoning for its font generation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common Fonts: If integrated typefaces appear across several pages of the PDF, BuildVu only creates one instance of that specific font file.&lt;/li&gt;
&lt;li&gt;Versions and Coding: If BuildVu produces several font files with matching titles, it means the PDF contains distinct font variants under one name or links various symbols to one extraction code (necessitating a duplicate).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  High Performance with Small File Sizes
&lt;/h2&gt;

&lt;p&gt;Many worry that high-accuracy transformations result in huge files. BuildVu utilizes a streamlined SVG and HTML5 combined methodology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimization Through Hybrid Tech
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SVG for Visuals: Vector art remains sharp regardless of magnification.&lt;/li&gt;
&lt;li&gt;HTML for Script: Text stays interactive, ensuring it is SEO-optimized and indexed without the bulk of a large graphic file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Standard Converters vs BuildVu
&lt;/h2&gt;

&lt;p&gt;The following chart highlights the primary distinctions between typical conversion software and a pro-level tool like BuildVu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplxfhhaxcaghu6h31qdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplxfhhaxcaghu6h31qdl.png" alt="BuildVu vs other converters" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for Developers
&lt;/h2&gt;

&lt;p&gt;In contrast to opaque web-based services, BuildVu functions as a developer-centric library. It connects effortlessly with your current technology infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise-Grade Integration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Java SDK / REST API: Execute bulk transformations automatically.&lt;/li&gt;
&lt;li&gt;Self-Hosted: Maintain data privacy on your local servers—avoiding the transfer of private files to external cloud providers.&lt;/li&gt;
&lt;li&gt;Customizable Viewer: Implement the IDRViewer to offer a polished publication-style or endless scrolling viewing interface right within the web browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trial BuildVu for free
&lt;/h2&gt;

&lt;p&gt;When you require online files to mirror their physical versions perfectly, BuildVu provides the exact accuracy you need. It closes the divide between the static nature of PDFs and the versatile capabilities of the contemporary internet.&lt;/p&gt;

</description>
      <category>pdf</category>
      <category>html</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Write GIF image files in Java (Tutorial)</title>
      <dc:creator>IDRSolutions</dc:creator>
      <pubDate>Wed, 01 Apr 2026 09:06:37 +0000</pubDate>
      <link>https://forem.com/idrsolutions/write-gif-image-files-in-java-tutorial-4g57</link>
      <guid>https://forem.com/idrsolutions/write-gif-image-files-in-java-tutorial-4g57</guid>
      <description>&lt;p&gt;GIF images pose several challenges for Java developers, largely due to the format's age and the limitations of Java's native libraries. Despite these issues, a vast legacy of GIF files remains in use, requiring developers to find reliable ways to support them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with GIF in Java
&lt;/h2&gt;

&lt;p&gt;While Java’s standard ImageIO framework does support GIF files, its functionality is limited to static images. It lacks native, robust support for animations, which is the primary reason most developers use the format today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Options for Support
&lt;/h2&gt;

&lt;p&gt;To handle GIFs effectively, developers can look beyond the standard library to open-source or commercial alternatives, including Java wrappers for non-Java solutions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://commons.apache.org/proper/commons-imaging/" rel="noopener noreferrer"&gt;Apache Imaging&lt;/a&gt;: This is a free, open-source library that can write GIFs and other image formats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.idrsolutions.com/jdeli/" rel="noopener noreferrer"&gt;JDeli&lt;/a&gt;: For a more comprehensive solution, we recommend JDeli. It is a pure, complete Java implementation that avoids the security risks associated with non-Java wrappers. JDeli integrates seamlessly with existing ImageIO code while offering a dedicated API for new development. In addition to full GIF support (&lt;a href="https://blog.idrsolutions.com/how-to-read-gif-files-in-java/" rel="noopener noreferrer"&gt;including reading&lt;/a&gt;), it handles modern, complex formats such as AVIF, HEIC, and WEBP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing GIF Files in Java: ImageIO vs. JDeli
&lt;/h2&gt;

&lt;p&gt;If you need to export images as GIFs in Java, you have two primary paths: the standard built-in library or a specialized library like JDeli.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Write a GIF Using ImageIO
&lt;/h3&gt;

&lt;p&gt;To use Java's native framework, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prepare the output: Create a &lt;code&gt;File&lt;/code&gt; or &lt;code&gt;OutputStream&lt;/code&gt; for the GIF destination.&lt;/li&gt;
&lt;li&gt;Execute the write: Pass your &lt;code&gt;BufferedImage&lt;/code&gt;, the "GIF" format string, and your output object into the &lt;code&gt;write&lt;/code&gt; method.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/path/to/outputFile.gif"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;ImageIO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"GIF"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: By default, ImageIO uses Java's native engine. To use the JDeli engine within your existing ImageIO code, download the &lt;a href="https://www.idrsolutions.com/jdeli/#why-buy" rel="noopener noreferrer"&gt;JDeli trial JAR&lt;/a&gt;, install it via our &lt;a href="https://support.idrsolutions.com/jdeli/tutorials/how-to-configure-jdeli-with-imageio" rel="noopener noreferrer"&gt;support documentation&lt;/a&gt;, and enable the plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Write a GIF Using JDeli
&lt;/h3&gt;

&lt;p&gt;Using JDeli directly provides more control and a more robust implementation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup: Add the JDeli trial JAR to your class or module path.&lt;/li&gt;
&lt;li&gt;Prepare the output: Create a &lt;code&gt;File&lt;/code&gt; or &lt;code&gt;OutputStream&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Execute the write: Use the &lt;code&gt;JDeli.write&lt;/code&gt; method.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;File&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/path/to/outputFile.gif"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Standard version&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"gif"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Typesafe version&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;OutputFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GIF&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Advanced version: Control compression and options&lt;/span&gt;
&lt;span class="nc"&gt;GifEncoderOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;GifEncoderOptions&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="nc"&gt;JDeli&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bufferedImage&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Choose JDeli?
&lt;/h2&gt;

&lt;p&gt;JDeli is a premier Java image library designed for professional-grade image manipulation. It simplifies reading, writing, and converting images with comprehensive GIF support. As developers with over a decade of hands-on experience in various file formats, we’ve built JDeli to help you master image processing in Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explore More:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://support.idrsolutions.com/jdeli/gif-support/" rel="noopener noreferrer"&gt;Support Site&lt;/a&gt;: View related articles and documentation.&lt;/li&gt;
&lt;li&gt;GIF Tutorials: Learn how to &lt;a href="https://blog.idrsolutions.com/how-to-read-gif-files-in-java/" rel="noopener noreferrer"&gt;read GIF files in Java&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Format Guides: Discover &lt;a href="https://blog.idrsolutions.com/what-is-gif/" rel="noopener noreferrer"&gt;What is a GIF&lt;/a&gt;? and how JDeli improves your workflow.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>ai</category>
      <category>gif</category>
    </item>
  </channel>
</rss>
