<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java PDF Blog</title>
	<atom:link href="https://blog.idrsolutions.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.idrsolutions.com/</link>
	<description>PDF tips and JPedal highlights</description>
	<lastBuildDate>Thu, 02 Apr 2026 13:05:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://blog.idrsolutions.com/app/uploads/2018/12/idr-logo-150x150.jpg</url>
	<title>Java PDF Blog</title>
	<link>https://blog.idrsolutions.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to redact PDF text with the JPedal Viewer</title>
		<link>https://blog.idrsolutions.com/how-to-redact-pdf-text-with-the-jpedal-viewer/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 13:05:09 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[hidden]]></category>
		<category><![CDATA[hide]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[redact]]></category>
		<category><![CDATA[redaction]]></category>
		<category><![CDATA[remove]]></category>
		<category><![CDATA[sanitize]]></category>
		<category><![CDATA[secret]]></category>
		<category><![CDATA[sensitive]]></category>
		<category><![CDATA[Text]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38708</guid>

					<description><![CDATA[<p>TL;DR The JPedal PDF Viewer can be used to redact text in PDF documents. Select &#8216;Redact&#8217; from the tools menu and draw a rectangle over the desired text. What is redaction and why should you use it? Redaction is the process of removing sensitive information from a document so that it is suitable for publishing. [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-redact-pdf-text-with-the-jpedal-viewer/">How to redact PDF text with the JPedal Viewer</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR</h2>
<p>The <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">JPedal PDF Viewer</a> can be used to redact text in PDF documents. Select &#8216;Redact&#8217; from the tools menu and draw a rectangle over the desired text.</p>
<h2>What is redaction and why should you use it?</h2>
<p>Redaction is the process of removing sensitive information from a document so that it is suitable for publishing. It is commonly used in legal or government processes when documents are made available to the public while keeping certain details hidden.</p>
<p>If you want to publish parts of a document and have certain secrets remain secrets, then redaction is the right tool to use.</p>
<h2>How Redaction in PDFs Works</h2>
<p>Redaction typically consists of a black rectangle which covers up the text you want hidden. Traditionally, this was done by drawing over text with a black marker and then scanning it back in.</p>
<p>In the age of digital media, the concept is the same, but care must be taken to ensure that the content is actually removed and cannot be recovered through some sneaky techniques.</p>
<h3>Pitfalls of Weak Digital Redaction Tools</h3>
<ul>
<li>One common mistake with low-quality redaction tools is drawing a black box over the text, but leaving the text remaining underneath. Other tools may then allow people to remove the boxes and see the text that was there, or you may just see that large characters like <code>j</code> may poke out of top or bottom of the black box.</li>
<li>Another mistake is replacing the text with empty characters of the same width. This is done to preserve the layout of subsequent characters, however it is possible to reserver engineer what text used to be there by looking at the widths of the blank characters and comparing them with the widths from the font. Ideally, any blank spacing should be accumulated so not to leak any information.</li>
<li>Finally, a common pitfall to be aware of is that sometimes you can simply figure out what used to be there based on context e.g. &#8220;Jane ■■■&#8221; appears in one place, but &#8220;Jane Doe&#8221; appears nearby.</li>
</ul>
<h2>How to redact text using the JPedal Viewer</h2>
<p>The <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">JPedal Viewer</a> has a tools menu which contains various <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/viewer/manipulate-files-from-the-viewer" target="_blank">operations you can perform on the currently opened document</a>.</p>
<p>The tools menu is hidden by default, so you will need to enable it by going to edit -> preferences -> menu, and selecting tools.</p>
<p>Now that the tools menu is visible, you can open a PDF document in the JPedal Viewer, navigate to the desired page, and select redact from the tools menu.</p>
<p><img fetchpriority="high" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-04-01-at-11.17.37.png" alt="redact text in the jpedal viewer" width="612" height="587" class="aligncenter size-full wp-image-38734" srcset="https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-04-01-at-11.17.37.png 612w, https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-04-01-at-11.17.37-300x288.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p>This will bring up a dialog box to confirm which page you want to draw over, press OK to confirm.</p>
<p>You can now drag a rectangle over the area you want to redact. Any text that intersects this rectangle will be removed and a black box will take its place.</p>
<p><img decoding="async" src="https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-scaled.png" alt="redacted pdf" width="2672" height="1458" class="aligncenter size-full wp-image-38739" srcset="https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-scaled.png 2672w, https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-300x164.png 300w, https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-1024x559.png 1024w, https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-768x419.png 768w, https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-1536x838.png 1536w, https://blog.idrsolutions.com/app/uploads/2026/04/Screenshot-2026-04-01-at-11.39.49-2048x1118.png 2048w" sizes="(max-width: 2672px) 100vw, 2672px" /></p>
<h2>Download JPedal</h2>
<p>You can download a copy of <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">the JPedal jar</a> from our website and get started using the <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">JPedal Viewer as a PDF redaction tool</a>.</p>
<h2>Resources</h2>
<p><ui></p>
<li><a href="https://www.idrsolutions.com/docs/jpedal/tutorials/viewer/manipulate-files-from-the-viewer" target="_blank">How to manipulate PDF files from the JPedal Viewer.</a></li>
<li><a href="https://www.idrsolutions.com/docs/jpedal/tutorials/viewer/view-pdf-in-java" target="_blank">Learn more about Viewing PDF files in Java.</a></li>
<li><a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">We can help you better understand the PDF format as developers who have been working with the format for more than 2 decades!</a></li>
</ul>
<p>The post <a href="https://blog.idrsolutions.com/how-to-redact-pdf-text-with-the-jpedal-viewer/">How to redact PDF text with the JPedal Viewer</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to remove unused objects from PDF file (Tutorial)</title>
		<link>https://blog.idrsolutions.com/remove-unused-objects-from-pdf-file-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 18:12:00 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Gemini said Guide]]></category>
		<category><![CDATA[java pdf library]]></category>
		<category><![CDATA[jpedal]]></category>
		<category><![CDATA[optimise]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[PDF file]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38690</guid>

					<description><![CDATA[<p>PDF files sometimes contain objects which are never used. This increases the file size and is wasteful. This tutorial shows you how to reduce the file size by removing unused objects from PDF in Java or using the command line. The PDF file format is not natively supported by Java, so to remove unused objects [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/remove-unused-objects-from-pdf-file-tutorial/">How to remove unused objects from PDF file (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>PDF files sometimes contain objects which are never used. This increases the file size and is wasteful. This tutorial shows you how to reduce the file size by removing unused objects from PDF in Java or using the command line.</p>
<p>The PDF file format is not natively supported by Java, so to remove unused objects from a PDF file you will need to download an external library. This tutorial uses <a href="https://www.idrsolutions.com/jpedal/">JPedal</a>. JPedal is the best Java PDF library for developers.</p>
<h2>How to remove unwanted objects from a PDF file programmatically</h2>
<ol>
<li>Add JPedal to your class or module path (download the <a href="https://www.idrsolutions.com/jpedal/#why-buy" target="_blank" rel="noopener">trial jar</a>)</li>
<li>Create a File handle pointing to the PDF file</li>
<li>Run the below code:<br />
<pre class='line-numbers' data-ad=JPedal><code class='language-java'>PdfOptimizer.optimizePDF(<br />
        new File(&quot;/path/to/input.pdf&quot;),<br />
        new File(&quot;/path/to/output.pdf&quot;),<br />
        PdfOptimizer.Optimization.REMOVEUNUSEDOBJECTS<br />
);<br />
</code></pre></li>
</ol>
<p>&nbsp;</p>
<h2>Using the command line</h2>
<ol>
<li>Download the JPedal <a href="https://www.idrsolutions.com/jpedal/#why-buy" target="_blank" rel="noopener">trial jar</a></li>
<li>Run the following command:<br />
<pre class='line-numbers' ><code class='language-bash'><pre>java -cp jpedal.jar org.jpedal.tools.PdfOptimizer --removeUnusedObjects inputFile outputFile</pre>

<br /></code></pre></li>
</ol>
<p>You can expand your <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank" rel="noopener">understanding of the PDF format</a> by reading our other articles. Similarly, if there is a specific term for PDF you would like to know more about, our <a href="https://blog.idrsolutions.com/glossary-of-pdf-terms/" target="_blank" rel="noopener">PDF Glossary</a> has an extensive list of common terms.</p>
<p>The post <a href="https://blog.idrsolutions.com/remove-unused-objects-from-pdf-file-tutorial/">How to remove unused objects from PDF file (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to extract text from a PDF as JSON</title>
		<link>https://blog.idrsolutions.com/extract-text-from-a-pdf-as-json/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 18:07:51 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Text]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[jpedal]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[marked]]></category>
		<category><![CDATA[marked content]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[structured content]]></category>
		<category><![CDATA[tagged]]></category>
		<category><![CDATA[tagged pdf]]></category>
		<category><![CDATA[wtpdf]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38688</guid>

					<description><![CDATA[<p>Some PDF files can be &#8220;tagged&#8221; which means they contain information about the structure of the file. This structure is embedded as metadata within the PDF and is made up of a hierarchy of tags that label elements such as headings, paragraphs, lists, tables, and images. This is very similar to HTML where text is [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/extract-text-from-a-pdf-as-json/">How to extract text from a PDF as JSON</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Some PDF files can be &#8220;tagged&#8221; which means they contain information about the structure of the file. This structure is embedded as metadata within the PDF and is made up of a hierarchy of tags that label elements such as headings, paragraphs, lists, tables, and images.</p>
<p>This is very similar to HTML where text is contained within elements that have meaning, such as <code>&lt;p&gt;</code> for paragraph, or <code>&lt;table&gt;</code> for table.</p>
<p>If a PDF file does contain structured content (also known as marked content), then it can be processed and converted into other formats.</p>
<h2>What is JSON?</h2>
<p>A JSON file (short for JavaScript Object Notation) is a lightweight, text-based format used for storing and exchanging structured data between systems.</p>
<p>It represents data as key-value pairs and arrays, making it easy for both machines and developers to read and write. JSON is commonly used in web applications to transmit data between server and a client, and is natively supported by most programming languages.</p>
<p>Despite its origin in JavaScript, JSON is language-independent and has become a universal data format across APIs and software systems.</p>
<h2>PDF vs JSON</h2>
<p>Both formats serve distinct purposes, PDF preserves the fixed visual layout of a document, making it ideal for sharing print-ready content like reports, contracts and official documents. It is widely used when consistent appearance and layout across devices are critical, and is one of the most universally supported document formats.</p>
<p>In contrast, JSON is designed for data exchange and storage, not presentation. JSON is commonly used in web development, APIs, and software applications to sent structured data like user profiles, settings, or real-time content between servers and clients.</p>
<p>JSON can be imported directly in text editors like VS studio without affecting the format, with PDFs that is not the case. JSON is also best suited to be crawled by AI technologies like LLMs due to its structural nature.</p>
<h2>Converting Structured PDF files to JSON</h2>
<p>Recently, we added <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/extract-text/extract-structured-content-from-structured-pdf-files" target="_blank">PDF to JSON support</a> to <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a>. If your PDF file contains structured content (<a href="https://blog.idrsolutions.com/how-to-find-out-if-a-pdf-file-has-structured-content/" target="_blank">how do I know?</a>), then JPedal will be able to convert it to JSON using the following code snippet:</p>
<p><pre class='line-numbers' data-ad=JPedal><code class='language-java'>ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();<br />
properties.setFileOutputMode(OutputModes.JSON);

<br />ExtractStructuredText.<br />
        writeAllStructuredTextOutlinesToDir(&quot;inputFile.pdf&quot;, password, &quot;outputFolder&quot;, null, null);<br />
</code></pre><br />
&nbsp;<br />
<a href="https://blog.idrsolutions.com/what-is-tagged-pdf/" target="_blank">Learn more about tagged PDF files.</a><br />
<a href="https://www.idrsolutions.com/jpedal/" target="_blank">Learn more about JPedal, our powerful PDF toolkit.</a></p>
<p>&nbsp;</p>
<p>This guide demonstrated how to convert structured PDF files into JSON format using just a few lines of Java code. It also highlighted the key differences between PDF and JSON to help you determine which format best suits your needs.</p>
<p>For more in-depth <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/">insights into PDFs</a>, feel free to explore our other articles — we’ve been working with the format for over a decade!</p>
<p>The post <a href="https://blog.idrsolutions.com/extract-text-from-a-pdf-as-json/">How to extract text from a PDF as JSON</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to add a CMYK image to a PDF in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-add-a-cmyk-image-to-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 15:40:18 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[byte]]></category>
		<category><![CDATA[bytes]]></category>
		<category><![CDATA[CMYK]]></category>
		<category><![CDATA[color space]]></category>
		<category><![CDATA[colour space]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[insert]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38671</guid>

					<description><![CDATA[<p>TL;DR Printers operate in CMYK colour space rather than RGB, so adding a CMYK image to a PDF will ensure printing accuracy. The JPedal Java PDF library supports this using the addImage() method. What are image colour spaces? A colour space is a way of representing pixels using a combination of different channels. Each channel [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-cmyk-image-to-a-pdf-in-java-tutorial/">How to add a CMYK image to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR</h2>
<p>Printers operate in CMYK colour space rather than RGB, so adding a CMYK image to a PDF will ensure printing accuracy. The <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal Java PDF library</a> supports this using the <a href="https://javadoc.idrsolutions.com/org/jpedal/manipulator/PdfManipulator.html#addImage(int,byte%5B%5D,int,int,org.jpedal.manipulator.AddImage.ColorSpace,float%5B%5D)" target="_blank"><code>addImage()</code> method</a>.</p>
<h2>What are image colour spaces?</h2>
<p>A colour space is a way of representing pixels using a combination of different channels. Each channel represents a colour and an intensity. The most common colour space is RGB (red, green, blue) which is used on computer monitors and phone screens, but there are many other options like CMYK (cyan, magenta, yellow, key AKA black) which is used for printing, or YCbCr (luma, blue, red) which is commonly used in highly compressed image formats.</p>
<h2>Why would you insert a CMYK image into a PDF?</h2>
<p>Commercial printers use the CMYK colour space so if you add images into your PDF as CMYK then you will ensure a greater accuracy when printing the documents.</p>
<h2>Can PDF support CMYK images?</h2>
<p>Yes, PDF supports CMYK and is the industry standard for professional printing because of it. While web-based PDFs usually use RGB, the PDF format can natively store four-colour CMYK data, embed specific colour profiles (like Fogra or GRACoL), and handle &#8220;spot colours&#8221; (Pantone).</p>
<h2>How to set up JPedal</h2>
<p>To get started using the JPedal PDF library, <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download the JPedal trial jar</a> from our website, and <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">add it to your Java project</a>.</p>
<h2>How to add a CMYK image to a PDF in Java</h2>
<p>By using the code snippet below you can flatten the target PDF. Using JPedal’s <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator</a> class:</p>
<ol>
<li>Load the document</li>
<li>Call the <code>addImage()</code> method and choose the CMYK colour space.</li>
<li>Save the result</li>
</ol>
<p><pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />// The bytes should be in the same format as the colour space you are trying to add.<br />
final byte[] imgBytes = &#8230;;<br />
pdf.addImage(new PageRanges(&quot;1&quot;), imgBytes, 100, 100, AddImage,ColorSpace,CMYK, new float[] {0, 0, 100, 100});

<br />pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.reset();<br />
pdf.closeDocument();<br />
</code></pre><br />
&nbsp;</p>
<h2>Download JPedal</h2>
<p>You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a JPedal trial jar</a> to see how it works.</p>
<h2>Resources</h2>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">manipulating PDF files in Java</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-cmyk-image-to-a-pdf-in-java-tutorial/">How to add a CMYK image to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Developer’s Guide to XFA Hell: Why Convert Forms to HTML</title>
		<link>https://blog.idrsolutions.com/the-developers-guide-to-xfa-hell-why-convert-forms-to-html/</link>
		
		<dc:creator><![CDATA[Daniel Warren]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 14:01:28 +0000</pubDate>
				<category><![CDATA[FormVu]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PDF forms]]></category>
		<category><![CDATA[XFA]]></category>
		<category><![CDATA[AcroForms]]></category>
		<category><![CDATA[Adobe XFA]]></category>
		<category><![CDATA[browser compatibility]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[digital transformation]]></category>
		<category><![CDATA[fillable PDF]]></category>
		<category><![CDATA[formvu]]></category>
		<category><![CDATA[HTML5 conversion]]></category>
		<category><![CDATA[HTML5 forms]]></category>
		<category><![CDATA[JSON extraction]]></category>
		<category><![CDATA[legacy software]]></category>
		<category><![CDATA[mobile PDF forms]]></category>
		<category><![CDATA[PDF 2.0]]></category>
		<category><![CDATA[PDF data extraction]]></category>
		<category><![CDATA[PDF Forms]]></category>
		<category><![CDATA[PDF to HTML5]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[XFA conversion]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38615</guid>

					<description><![CDATA[<p>If you’re reading this as a developer, there’s a good chance you’ve just lost a lot of time trying to get a standard PDF library to extract data from a government form, only to find that your library thinks the document is empty. Or maybe your client just called, furious that their customers can&#8217;t fill [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/the-developers-guide-to-xfa-hell-why-convert-forms-to-html/">The Developer’s Guide to XFA Hell: Why Convert Forms to HTML</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/daniel-warren/">Daniel Warren</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you’re reading this as a developer, there’s a good chance you’ve just lost a lot of time trying to get a standard PDF library to extract data from a government form, only to find that your library thinks the document is empty. Or maybe your client just called, furious that their customers can&#8217;t fill out your onboarding form on their iPhones.</p>
<p><strong>Welcome to XFA Hell. You aren&#8217;t alone!</strong></p>
<p>XFA (XML Forms Architecture) is a proprietary XML-based template format developed by JetForm for creating interactive and dynamic PDF forms. You can read more about XFA forms <a href="https://blog.idrsolutions.com/what-are-xfa-forms/">here</a>.</p>
<p>Across the internet, developers are struggling to create workarounds for XFA&#8217;s problem. Take this reddit post from weary developer<a href="https://www.reddit.com/r/pdf/comments/1q4si25/burned_through_thousands_of_ai_tokens_and_still/"> struggling with German government XFA forms titled</a>:</p>
<blockquote><p><strong>&#8220;Burned Through Thousands of AI Tokens and Still Can&#8217;t Beat This German Government PDF&#8221;</strong></p></blockquote>
<p>These aren&#8217;t just minor compatibility bugs. They are symptoms of a deprecated, proprietary and inherently non-web-friendly document architecture. With business implications, these forms become technical debt and are a pain for developers!</p>
<p>Users also have trouble displaying XFA forms on iOS and Android devices as stated in <a href="https://experienceleague.adobe.com/en/docs/experience-manager-65/content/forms/troubleshooting/xfa-pdf-forms-policy-protected-documents-not-displayed">this Adobe Experience Experience guide</a>. More often, people will see this dreaded error pop up on Acrobat:<br />
&nbsp;<br />
<a href="https://blog.idrsolutions.com/app/uploads/2026/03/Adobe-Acrobat-error-window-displays-the-following-.webp"><img decoding="async" src="https://blog.idrsolutions.com/app/uploads/2026/03/Adobe-Acrobat-error-window-displays-the-following--300x101.webp" alt="Acrobat XFA form error" width="300" height="101" class="aligncenter size-medium wp-image-38625" srcset="https://blog.idrsolutions.com/app/uploads/2026/03/Adobe-Acrobat-error-window-displays-the-following--300x101.webp 300w, https://blog.idrsolutions.com/app/uploads/2026/03/Adobe-Acrobat-error-window-displays-the-following-.webp 490w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
&nbsp;</p>
<p>In this post, we’ll look at why XFA is fundamentally broken for the modern web and why converting these forms to HTML with <a href="https://www.idrsolutions.com/formvu/">FormVu</a> isn&#8217;t just a workaround, it’s the definitive solution.</p>
<h2>Why XFA forms Fail Developers</h2>
<p>XFA was <a href="https://en.wikipedia.org/wiki/XFA">was added to the PDF 1.5 spec</a>, to handle dynamic, complex forms that traditional PDF (AcroForms) couldn&#8217;t. Think forms that add rows automatically, change entire sections based on user input or calculate complex formulas on the fly.</p>
<p>It accomplished this by embedding a complete XML-based form specification <em>inside</em> the PDF wrapper. While useful for its time, this architecture creates several critical, unsolvable problems for modern developers:</p>
<h3>Zero Mobile or Native Browser Support</h3>
<p>Modern web browsers (Chrome, Firefox, Safari) have built-in PDF viewers. Because XFA is proprietary and immensely complex, <a href="https://experienceleague.adobe.com/en/docs/experience-manager-65/content/forms/troubleshooting/xfa-based-forms-in-chrome-firefox-ie-internet-explorter-safari-edge">most popular browsers do not support it</a> by default. Trying to display on Mobile devices is even worse. </p>
<p>If your users try to open an XFA form, they’ll see a static one-page PDF with a message telling them to download Adobe Reader. In an era of mobile-first development, XFA forms are a dead end.</p>
<h3>Deprecated by the ISO Standard</h3>
<p>When PDF became an open standard (<a href="https://developer.adobe.com/document-services/docs/assets/5b15559b96303194340b99820d3a70fa/PDF_ISO_32000-2.pdf">ISO 32000</a>), XFA was included for compatibility. However, realizing its proprietary limitations, the ISO officially <a href="https://pdfa.org/pdf-2-0-the-worldwide-standard-for-electronic-documents-has-evolved/">deprecated XFA in the PDF 2.0 standard</a>.</p>
<p>If you are developing new workflows around XFA, you are investing in a technology that has already been declared dead by the custodians of the PDF format.</p>
<h2>The Solution: Convert XFA Forms to HTML5</h2>
<p>You don&#8217;t need another niche PDF library. You need to bridge the gap between 20-year-old proprietary tech and the modern web. The answer is HTML.</p>
<p>By converting your PDF forms to HTML, you will not only make your forms web-friendly and mobile-friendly, but have more granular control over the content.</p>
<h2>How FormVu Turns XFA into Native Web Experience</h2>
<p><a href="https://www.idrsolutions.com/formvu/">FormVu</a> is not a generic PDF to HTML converter. It is a specialised SDK designed by developers, specifically to handle the complexities of fillable PDF forms.</p>
<p>Here is how <a href="https://www.idrsolutions.com/formvu/">FormVu</a> solves the specific problems that are costing you development time:</p>
<ul>
<li>In addition to desktop, converted forms work seamlessly across all mobile devices. Using HTML, CSS and JavaScript, the forms can also be filled out offline.</li>
<li>FormVu provides powerful APIs across multiple languages (Java, command line, cloud-based). It fits into your existing workflow rather than forcing you to adopt an entire Adobe ecosystem (like AEM or LiveCycle).</li>
<li>FormVu offers self-hosted options, allowing you to convert and host the files on your own secure servers.</li>
</ul>
<h2>Stop Patching Legacy Tech: Ship Native HTML5 with FormVu</h2>
<p>If you are a developer, your job is to build efficient, scalable, and user-friendly systems. XFA is an obstacle to all three of those goals.</p>
<p>You can continue to struggle with standard PDF libraries to understand proprietary XML, or you can use <a href="https://www.idrsolutions.com/formvu/">FormVu</a> to convert them into HTML so you have greater control over your forms.</p>
<p>If you&#8217;re unsure, you can run test conversions using our <a href="https://www.idrsolutions.com/online-pdfform-to-html-converter">free online PDF form to HTML converter</a>, it uses the same tech as our API!</p>
<p><H2>FAQs</h2>
<details>
<summary>Q: How do I programmatically detect an XFA form?</summary>
<p>A: Check your PDF&#8217;s <code>/AcroForm</code> dictionary. If it contains an <code>/XFA</code> key pointing to a data stream, it’s an XFA form. Standard PDF forms only use the <code>/Fields</code> array.</p>
</details>
<details>
<summary>Q: What’s the difference between Static and Dynamic XFA?</summary>
<p>A: Static XFA forms have a fixed, unchanging layout. Dynamic XFA forms re-render on the fly, adding rows, hiding sections, and flowing across pages based on user input.</p>
</details>
<details>
<summary>Q: Does XFA use standard JavaScript?</summary>
<p>A: It supports standard JS, but heavily relies on FormCalc, Adobe’s proprietary scripting language. To migrate successfully, you need a tool that translates FormCalc logic into standard web JavaScript so your calculations don&#8217;t break.</p>
</details>
<details>
<summary>Q: Can I just &#8220;flatten&#8221; an XFA form to fix compatibility?</summary>
<p>A: Usually, no. Standard PDFs flatten easily, but attempting to programmatically flatten a dynamic XFA form often breaks the layout entirely or results in a blank page.</p>
</details>
<p>The post <a href="https://blog.idrsolutions.com/the-developers-guide-to-xfa-hell-why-convert-forms-to-html/">The Developer’s Guide to XFA Hell: Why Convert Forms to HTML</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/daniel-warren/">Daniel Warren</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to convert PDF files to ePUB</title>
		<link>https://blog.idrsolutions.com/convert-pdf-files-to-epub/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 10:38:04 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Text]]></category>
		<category><![CDATA[epub]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[jpedal]]></category>
		<category><![CDATA[marked]]></category>
		<category><![CDATA[marked content]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[structured content]]></category>
		<category><![CDATA[tagged pdf]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38669</guid>

					<description><![CDATA[<p>Not all PDFs are created equally. Some go beyond simple visual layouts and include internal tags that describe the document’s structure. These are known as structured or tagged PDFs. The Anatomy of a Tagged PDF Think of it like HTML—where a paragraph or table isn’t just visual, but defined by semantic tags like &#60;p&#62; or [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/convert-pdf-files-to-epub/">How to convert PDF files to ePUB</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Not all PDFs are created equally. Some go beyond simple visual layouts and include internal tags that describe the document’s structure. These are known as structured or tagged PDFs.</p>
<h2>The Anatomy of a Tagged PDF</h2>
<p>Think of it like HTML—where a paragraph or table isn’t just visual, but defined by semantic tags like <code>&lt;p&gt;</code> or <code>&lt;table&gt;</code>. In a similar way, a structured PDF includes markers that tell software what each part of the content represents.</p>
<p>If a PDF file does contain structured content (also known as marked content), then it can be processed and converted into other formats.</p>
<h2>What is an ePUB file?</h2>
<p>An EPUB file (short for Electronic Publication) is a widely-used eBook format designed for reflowable content, allowing text to adapt to different screen sizes. </p>
<p>It supports text, images, styles, multimedia, and interactivity, making it ideal for digital reading on devices like phones, tablets, and e-readers—though not natively supported by Kindle. EPUB is an open standard maintained by the W3C and is essentially a ZIP archive containing HTML, CSS, and metadata files.</p>
<h2>PDF vs ePUB</h2>
<p>Both formats have different use cases, where PDF preserves the fixed layout of the document, making it optimal for print-ready files like contracts, reports and official forms. PDFs are often used where consistent formatting is critical and is one the most widely supported file format.</p>
<p>On the other hand ePUB was made specifically for a better reading experience as it adapts to different screen sizes. It was primarily made for eReaders, though it does support multimedia as well in ePUB 3.</p>
<p>EPUB uses a reflowable layout that adapts to different screen sizes for flexible reading, while PDF uses a fixed layout that preserves the original design regardless of the device.</p>
<h2>Converting Structured PDF files to ePUB</h2>
<p>Recently, we added <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/extract-text/extract-structured-text-as-epub" target="_blank">PDF to ePUB support</a> to <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a>. If your PDF file contains structured content (<a href="https://blog.idrsolutions.com/how-to-find-out-if-a-pdf-file-has-structured-content/" target="_blank">how do I know?</a>), then JPedal will be able to convert it to ePUB using the following code snippet:</p>
<pre class='line-numbers' data-ad=JPedal><code class='language-java'>final ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();<br />
properties.setFileOutputMode(OutputModes.EPUB);<br />
properties.setEpubTitle(&quot;My EPUB&quot;);

<br />ExtractStructuredText.<br />
        writeAllStructuredTextOutlinesToDir(&quot;inputFileOrFolder&quot;, password, &quot;outputFolder&quot;, null, null);<br />
</code></pre>
<p><a href="https://blog.idrsolutions.com/what-is-tagged-pdf/" target="_blank">Learn more about tagged PDF files.</a><br />
<a href="https://www.idrsolutions.com/jpedal/" target="_blank">Learn more about JPedal, our powerful PDF toolkit.</a></p>
<p>This guide helped you find the differences between PDF and ePUB, which one might be suited to your needs. It also showed how you can convert structured PDF files to ePUB using a few lines of Java code. </p>
<p>You can read our other articles to <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format">learn more about PDFs</a> as we have been working on the format for more than a decade!</p>
<p>The post <a href="https://blog.idrsolutions.com/convert-pdf-files-to-epub/">How to convert PDF files to ePUB</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to flatten PDF layers in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-flatten-pdf-layers-in-java</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 16:21:08 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[combine layers]]></category>
		<category><![CDATA[flatten]]></category>
		<category><![CDATA[layers]]></category>
		<category><![CDATA[merge layers]]></category>
		<category><![CDATA[OC]]></category>
		<category><![CDATA[OCG]]></category>
		<category><![CDATA[OCMD]]></category>
		<category><![CDATA[optional content]]></category>
		<category><![CDATA[squash]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38648</guid>

					<description><![CDATA[<p>TL;DR Flattening PDF layers in Java is a way to lock a document&#8217;s appearance, ensure cross-device compatibility, and reduce file size by merging optional content into a single layer. Using the JPedal library, the process involves three main steps: Load: Initialize the PdfManipulator and load your PDF file. Flatten: Call the .flattenLayers() method to merge [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-flatten-pdf-layers-in-java">How to flatten PDF layers in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR</h2>
<p>Flattening PDF layers in Java is a way to lock a document&#8217;s appearance, ensure cross-device compatibility, and reduce file size by merging optional content into a single layer.</p>
<p>Using the <a href="https://www.idrsolutions.com/jpedal/">JPedal</a> library, the process involves three main steps:</p>
<ol>
<li>Load: Initialize the <code>PdfManipulator</code> and load your PDF file.</li>
<li>Flatten: Call the <code>.flattenLayers()</code> method to merge the content.</li>
<li>Save: Use <code>.apply()</code> and <code>.writeDocument()</code> to export the final, simplified PDF.</li>
</ol>
<h2>What does it mean to flatten a PDF?</h2>
<p>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.</p>
<h2>Why would you flatten PDF layers?</h2>
<p>A common reason for wanting to flatten layers is that it will preserve the document&#8217;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. </p>
<p>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.</p>
<h2>How to set up JPedal</h2>
<p>To get started using the JPedal PDF library, <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download the JPedal trial jar</a> from our website, and <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">add it to your Java project</a>.</p>
<h2>How to flatten layers in a PDF in Java</h2>
<p>By using the code snippet below you can flatten the target PDF. Using JPedal&#8217;s <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator</a> class:</p>
<ol>
<li>Load the document</li>
<li>Call the <code>flattenLayers()</code> method</li>
<li>Save the result</li>
</ol>
<p><pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />pdf.flattenLayers();

<br />pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.reset();<br />
pdf.closeDocument();<br />
</code></pre><br />
&nbsp;</p>
<h2>Download JPedal</h2>
<p>You can download a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial</a> jar to see how it works.</p>
<h2>Resources</h2>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">manipulating PDF files in Java</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<h2>FAQs</h2>
<details>
<summary>Q: Does flattening a PDF remove hidden layers?</summary>
<p>A: Yes. Any layers set to &#8220;hidden&#8221; or &#8220;invisible&#8221; are permanently discarded during the flattening process, while only the currently visible content is merged into the final background layer.</p>
</details>
<details>
<summary>Q: Can I undo the flattening process later?</summary>
<p>A: No. Once a PDF is flattened and saved, the layers are permanently merged into a single image-like layer. To make future changes, you must keep a backup of the original layered file.</p>
</details>
<details>
<summary>Q: Will flattening affect the text searchability of my PDF?</summary>
<p>A: Generally, no. Flattening specifically targets the structural layers and interactive elements (like annotations); the underlying text usually remains searchable unless it is within a hidden layer or you specifically choose to convert the entire page to an image.</p>
</details>
<p>The post <a href="https://blog.idrsolutions.com/how-to-flatten-pdf-layers-in-java">How to flatten PDF layers in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Java PDF to AVIF conversion (Tutorial)</title>
		<link>https://blog.idrsolutions.com/java-pdf-to-avif-conversion-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 11 Mar 2026 10:49:11 +0000</pubDate>
				<category><![CDATA[AVIF]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[aom]]></category>
		<category><![CDATA[av1]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[jpedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[rasterize]]></category>
		<category><![CDATA[render]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38608</guid>

					<description><![CDATA[<p>Why convert PDF files to AVIF images? A PDF is a vector image (so it is rendered when you display it at whatever size you specify). An AVIF is a modern image format that uses AV1 compresion. So to convert a PDF to a AVIF file we need to create a blank image and then [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/java-pdf-to-avif-conversion-tutorial/">Java PDF to AVIF conversion (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-03-11-at-10.42.59.png" alt="pdf to avif" width="934" height="518" class="aligncenter wp-image-38610" srcset="https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-03-11-at-10.42.59.png 934w, https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-03-11-at-10.42.59-300x166.png 300w, https://blog.idrsolutions.com/app/uploads/2026/03/Screenshot-2026-03-11-at-10.42.59-768x426.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></p>
<h2>Why convert PDF files to AVIF images?</h2>
<p>A PDF is a vector image (so it is rendered when you display it at whatever size you specify). An AVIF is a modern image format that uses AV1 compresion. So to convert a PDF to a AVIF file we need to create a blank image and then draw the PDF onto this.</p>
<p>This process is usually done with a PDF tool such as Acrobat however, <a href="https://www.idrsolutions.com/jpedal/convert-pdf-to-image">our Java PDF library</a> includes added functionality. There are lots of Open Source and commercial tools in most major languages. If you are using Java, it is not a function that is built into Java &#8211; you will need an external application to do this such as our JPedal PDF library. JPedal is the best Java PDF library for developers.</p>
<h2>How to convert PDF to AVIF in Java</h2>
<ol>
<li>Download a <a href="https://www.idrsolutions.com/jpedal/#why-buy">trial copy</a> of JPedal and add it to your IDE.</li>
<li>Create a File handle, InputStream or URL pointing to the PDF file</li>
<li>Include a password if file password protected</li>
<li>Open the PDF file</li>
<li>Iterate over the pages</li>
</ol>
<h3>and the Java code to convert PDF to AVIF…</h3>
<pre class='line-numbers' data-ad=JPedal><code class='language-java'>ConvertPagesToImages convert = new ConvertPagesToImages(&quot;inputFile.pdf&quot;);<br />
//convert.setPassword(&quot;password&quot;);<br />
if (convert.openPDFFile()) {<br />
    for (int page = 1; page &lt;= convert.getPageCount(); page++) {<br />
        final BufferedImage bi = convert.getPageAsImage(page);<br />
        final File out = new File(&quot;outputFolder&quot; + page + &quot;.avif&quot;);<br />
        JDeli.write(bi, OutputFormat.AVIF, out);<br />
    }<br />
}

<br />convert.closePDFfile();<br />
</code></pre>
<h2>Key points to remember</h2>
<p>The usual reason for doing this conversion is to display the content as an image (e.g. a thumbnail on a website). However, there are things so remember:</p>
<p><strong>1.</strong> Bitmapped images do not scale very well (unlike Vector formats like PDF). So you need to get the size correct. If you make it too small you will not be able to zoom in without pixelation. If you make it too big you will make the download slower and need more memory.</p>
<p><strong>2.</strong> Bitmapped images do not have some of the other advantages of PDF files (like text search).  You may need to add manual functionality to your application if you wish to have things like text highlighting.</p>
<p><strong>3.</strong> If you are doing it to print the PDF you will need a very large image to get a quality print at 300 or 600 dpi (what looks good on screen at 72dpi will not appear as crisp on a printout).</p>
<p>So long as you remember these, Java PDF to AVIF conversion is a straightforward process with a tool such as <a href="https://www.idrsolutions.com/jpedal/">JPedal</a>.</p>
<p>&nbsp;</p>
<p>The post <a href="https://blog.idrsolutions.com/java-pdf-to-avif-conversion-tutorial/">Java PDF to AVIF conversion (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Reorder Pages in a PDF Using Java (Step-by-Step Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-reorder-pages-in-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 25 Feb 2026 12:38:07 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[manipulate]]></category>
		<category><![CDATA[modify]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[page]]></category>
		<category><![CDATA[pages]]></category>
		<category><![CDATA[reorder]]></category>
		<category><![CDATA[shuffle]]></category>
		<category><![CDATA[swap]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38586</guid>

					<description><![CDATA[<p>TL;DR The JPedal Java PDF toolkit can reorder pages in a PDF file. Motivation In document processing workflows, page order is everything. Whether you are correcting a scanned document, organizing a business proposal, or programmatically building a report, the ability to move, swap, or reverse pages is a critical requirement for Java developers. While the [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-reorder-pages-in-a-pdf-in-java-tutorial/">How to Reorder Pages in a PDF Using Java (Step-by-Step Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR</h2>
<p>The <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal Java PDF toolkit</a> can reorder pages in a PDF file.</p>
<h2>Motivation</h2>
<p>In document processing workflows, page order is everything. Whether you are correcting a scanned document, organizing a business proposal, or programmatically building a report, the ability to move, swap, or reverse pages is a critical requirement for Java developers.</p>
<p>While the PDF format is notoriously difficult to manipulate directly, the <a href="https://www.idrsolutions.com/jpedal">JPedal</a> Java PDF Library provides a high-level <code>PdfManipulator</code> class that makes these changes in just a few lines of code.</p>
<h2>Why Reorder Pages Programmatically?</h2>
<p>You may want to reorder pages in a PDF to improve the structure or clarity of the document. For example, you might want to modify the order of steps in a business proposal. Page order can affect how people understand your document so a misplaced page should be corrected. Other reasons can include:</p>
<ul>
<li>Batch Processing: You need to fix the page order of thousands of documents.</li>
<li>Dynamic Assembly: You are merging documents and need to ensure the Table of Contents or Appendices are in the correct position.</li>
<li>Correction Logic: You need to reverse pages that were scanned in the wrong order.</li>
</ul>
<h2>Step-by-Step: Reordering PDF Pages in Java</h2>
<ol>
<li>First, you will need to download the JPedal jar. You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">get a trial jar</a> from our website.</li>
<li>Next, you need to add JPedal to your Java project. We have lots of guides on our support site for how to add JPedal to different types of projects. For example: <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">how to add JPedal to a maven project</a>.</li>
<li>Finally, you can add the code to reorder pages using the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator</a> class.</li>
</ol>
<p><pre class='line-numbers' data-ad=jpedal><code class='language-java'>// Load the PDF file<br />
final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />// Move page 1 to just before page 5<br />
pdf.movePage(1, 5);

<br />// Swap pages 3 and 4<br />
pdf.swapPages(3, 4);

<br />// Reverse the order of all pages in the document<br />
pdf.reversePages();

<br />// You can also remove pages<br />
pdf.removePage(new PageRanges(&quot;10-20&quot;));

<br />// Apply the queued manipulations and write the file to disk<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
pdf.reset();<br />
</code></pre><br />
&nbsp;</p>
<h2>Download JPedal</h2>
<p>You can download a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial</a> jar to see how it works.</p>
<h2>Resources</h2>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">manipulating PDF files in Java</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-reorder-pages-in-a-pdf-in-java-tutorial/">How to Reorder Pages in a PDF Using Java (Step-by-Step Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to remove blank pages from a PDF in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-remove-blank-pages-from-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 16:51:57 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[blank]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[clear]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[empty]]></category>
		<category><![CDATA[gap]]></category>
		<category><![CDATA[manipulate]]></category>
		<category><![CDATA[pages]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38578</guid>

					<description><![CDATA[<p>The JPedal Java PDF library can remove blank pages from documents. Rationale But why might you want to do this? A common reason would be for saving paper when printing documents. Or perhaps you want to remove empty gaps from a presentation. How to remove blank pages using Java Since Java does not provide any [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-blank-pages-from-a-pdf-in-java-tutorial/">How to remove blank pages from a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal Java PDF library</a> can remove blank pages from documents.</p>
<h2>Rationale</h2>
<p>But why might you want to do this? A common reason would be for saving paper when printing documents. Or perhaps you want to remove empty gaps from a presentation.</p>
<h2>How to remove blank pages using Java</h2>
<p>Since Java does not provide any native ways to interact with PDF files, you will need a PDF library. We have been developing <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a> for over 20 years and it contains a powerful <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator</a>.</p>
<p>Using the following code, we can scan the whole document and write out a version of it that does not contain any blank pages.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));<br />
pdf.removeBlankPages();<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
pdf.reset();<br />
</code></pre>
<h2>Download JPedal</h2>
<p>You can download a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial</a> jar to see how it works.</p>
<h2>Resources</h2>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">manipulating PDF files in Java</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-blank-pages-from-a-pdf-in-java-tutorial/">How to remove blank pages from a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>25 years of Heretical Thinking: Our Playbook</title>
		<link>https://blog.idrsolutions.com/25-years-of-heretical-thinking-our-playbook/</link>
		
		<dc:creator><![CDATA[chika]]></dc:creator>
		<pubDate>Wed, 11 Feb 2026 12:33:11 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<category><![CDATA[Autonomy]]></category>
		<category><![CDATA[Better Not Bigger]]></category>
		<category><![CDATA[Bootstrapping]]></category>
		<category><![CDATA[business of software]]></category>
		<category><![CDATA[Business Strategy]]></category>
		<category><![CDATA[company culture]]></category>
		<category><![CDATA[Customer Success]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Sustainable Growth]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38567</guid>

					<description><![CDATA[<p>Watch our BoS 2025 Talk: 25 Years of Heretical Thinking Consistency After 25 years in business, IDR Solutions has grown by doing things differently. We don&#8217;t chase VCs, scale unnecessarily or jump on trends. Instead, we&#8217;ve built a sustainable business through autonomy, deep customer relationships, and thinking long term while openly questioning the assumptions the [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/25-years-of-heretical-thinking-our-playbook/">25 years of Heretical Thinking: Our Playbook</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/chika/">chika</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em><a href="https://businessofsoftware.org/talks/25-years-of-heretical-thinking/">Watch our BoS 2025 Talk: 25 Years of Heretical Thinking</a> </em></p>
<h2>Consistency</h2>
<p>After 25 years in business, IDR Solutions has grown by doing things differently. We don&#8217;t chase VCs, scale unnecessarily or jump on trends. Instead, we&#8217;ve built a sustainable business through autonomy, deep customer relationships, and thinking long term while openly questioning the assumptions the software industry treats as default.</p>
<p>This approach is often described as heretical and focuses on choosing autonomy over hierarchy, relationships over rapid expansion and prioritising long term sustainable growth which ensure quality is maintained all around. </p>
<p>In this post, we want to unpack two perspectives from that journey. One looks inward, at how autonomy, trust and culture shape the way a small company operates day to day. The other looks outward, at why resisting “scale at all costs” and applying first principles thinking, encouraging questions and experimentation has been critical to building a resilient business.</p>
<p>This may not be every company&#8217;s winning formula but it presents an alternative lens that invites founders and teams to reflect on what &#8220;better, not bigger&#8221; might look like for them.</p>
<h2>Culture &#038; autonomy</h2>
<p>One of the principles that has shaped how we work at IDR Solutions is autonomy. As a small company, we’ve deliberately avoided heavy hierarchies and rigid processes. Instead, each member of our team is trusted to take ownership of their work, make decisions and act with the wider business in mind. This trust creates accountability naturally, not through layers of approval and signatures but instead through shared responsibility.</p>
<p>During our talk, I summed it up simply, “As a small company, there’s a lot of autonomy within each individual and we’re able to take action and make real impact&#8221; That autonomy has a direct effect on how we operate day to day. People aren’t waiting to be told what to do or how to do it. Problems are identified early, decisions are made promptly and progress happens without unnecessary friction.</p>
<p>It also influences how we grow. Growth at IDR hasn’t been about speed for its own sake. Instead, it’s been intentionally shaped by long term thinking, relationships with our customers, partners and colleagues and a commitment to quality. When people feel trusted and empowered, they care deeply about the outcomes of their work, not just the outputs.</p>
<p>Over time, this way of working has strengthened relationships across the company and with our customers. It’s helped us maintain a consistent culture, even as the business has evolved and ensured that quality is upheld across everything we do. Autonomy is a long term commitment that requires trust, clarity and patience. It’s been a key reason why IDR Solutions has been able to grow sustainably while staying true to our values. This culture of autonomy has also shaped our approach to growth itself—which brings us to one of our most deliberate choices, resisting the pressure to scale at all costs.</p>
<h2>(Do not) Scale at all Costs!</h2>
<p>One of the cornerstones of IDR Solutions&#8217; strategy has been prioritising sustainable growth over the &#8216;scale at all costs&#8217; mantra. Unlike many VC backed tech firms that burn cash to capture market share, we focus on maintaining a lean and profitable business model.</p>
<p>By not scaling the team or product suite too rapidly, we maintain a level of depth in technical expertise in our industry. This is primarily why customers like Academia have used our solutions to work with over 60 million PDFs!</p>
<p>What we see with a lot VC backed companies is the pursuit of hyper-growth. Some customers specifically chose IDR Solutions because they were small and could provide better, more personalized service compared to VC backed giants.</p>
<h2>Relationships over Transactions</h2>
<p>Our strategy is about long term partnerships, not just closing the next deal. By moving away from a one off sales mindset, we’ve built relationships that have lasted over 20 years. Because we aren&#8217;t chasing quarterly targets for investors, we can actually focus on what makes our clients successful over the long haul.</p>
<p>We&#8217;ve found that being small is our superpower. Many of our clients come to us specifically because they’re tired of the impersonal, bureaucratic feel of $100 million corporate giants. They want a dedicated, agile team that can promptly respond, not a transactional one where they’re just another number in a database.</p>
<p>At the end of the day, business is personal. We’d rather be a great product company than a commercially obsessed one. By focusing on solving real problems, we get to grow better alongside our users. It’s a shared journey where we aim to improve with our customers, not just get bigger at their expense.</p>
<h2>Why Communities Like Business of Software Are Essential</h2>
<p>A community like Business of Software is essential because it offers a real world reality-check. It&#8217;s easy to get lost in your own bubble, but these conferences create space for honest, informal conversations with people who actually face similar struggles. </p>
<p>We value these spaces because they focus on the messy truth of running a company rather than the polished versions you see in press releases. They&#8217;re also a reminder that there is no single playbook for success and that learning from each other is the best way to stay grounded.</p>
<h2>The Future of IDR Solutions</h2>
<p>Looking ahead, we are not interested in chasing a massive growth curve just for the sake of it. Our goal is to keep refining our craft and solving the tough technical problems our clients face as they move toward modern web environments. </p>
<p>We want to remain a company that is easy to talk to and quick to move. By staying lean and focusing on quality, we ensure we can keep doing work we are proud of for another 25 years without losing the personal touch that got us here. Are you curious about our approach? Whether you&#8217;re evaluating PDF solutions or simply interested in how a 25 year old company operates without VC funding, we&#8217;re happy to talk. That&#8217;s what being small and accessible means, real conversations.</p>
<p>The post <a href="https://blog.idrsolutions.com/25-years-of-heretical-thinking-our-playbook/">25 years of Heretical Thinking: Our Playbook</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/chika/">chika</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Convert PDF to HTML5: Preserving Layout</title>
		<link>https://blog.idrsolutions.com/convert-pdf-to-html5-preserving-layout/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 16:23:32 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[buildvu]]></category>
		<category><![CDATA[digital publishing]]></category>
		<category><![CDATA[Document Conversion]]></category>
		<category><![CDATA[fixed-layout HTML]]></category>
		<category><![CDATA[layout preservation]]></category>
		<category><![CDATA[PDF to HTML5]]></category>
		<category><![CDATA[SVG conversion]]></category>
		<category><![CDATA[web development tools]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38535</guid>

					<description><![CDATA[<p>Whether you’re a developer building a web application or a business looking to digitize a massive archive, you’ve likely struggled to choose the best way to display your documents. So you convert a beautifully designed document to HTML, only to find the fonts are missing, the images have shifted, and the tables are a jumbled [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/convert-pdf-to-html5-preserving-layout/">Convert PDF to HTML5: Preserving Layout</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Whether you’re a developer building a web application or a business looking to digitize a massive archive, you’ve likely struggled to choose the best way to display your documents. So you convert a beautifully designed document to HTML, only to find the fonts are missing, the images have shifted, and the tables are a jumbled mess.</p>
<p>If layout <em>fidelity</em> is your top priority, there is one solution that stands head and shoulders above the rest: BuildVu.</p>
<p>Here is why BuildVu is the industry-leading choice for converting PDF to HTML while keeping your document&#8217;s layout intact.</p>
<h2>The Challenge: Why Most Solutions Fail</h2>
<p>Most PDF-to-HTML tools are not specialised for conversions. They attempt to guess where paragraphs end and where columns begin. Because PDF is a fixed-layout format, this &#8220;guessing&#8221; leads to:</p>
<ul>
<li><strong>Broken Layouts:</strong> Overlapping text and misaligned images. The content (sometimes even the text) gets flattened to an image.</li>
<li><strong>Font Substitution:</strong> Your carefully chosen brand fonts are replaced by generic Arial or Times New Roman. This causes additional problems like text overlapping and incorrect line lengths.</li>
<li><strong>Bloated Code:</strong> Messy, unreadable HTML that is impossible to maintain. The HTML output also has larger file size, becoming slower to load in the browser.</li>
</ul>
<h2>Pixel-Perfect Layout Preservation</h2>
<p>BuildVu doesn&#8217;t try to guess your layout. It treats the PDF as a visual blueprint. By using a sophisticated conversion engine, it reproduces the exact coordinates of every element.</p>
<h3>Precision Mapping for Any Industry</h3>
<p>Whether you are converting complex architectural drawings, high-end magazines, or technical manuals with intricate diagrams, the HTML output is visually indistinguishable from the original PDF.</p>
<p><a href="https://www.idrsolutions.com/buildvu/#examples">Click here to see some samples of the BuildVu conversions.</a></p>
<h2>Advanced Font Conversion</h2>
<p>Fonts are one of the biggest hurdle in document conversion. When creating PDF files, authors may choose which fonts to embed inside the PDF file. </p>
<p>Most PDF files contain embedded fonts because it ensures a consistent appearance across platforms, though it is also common to avoid embedding common fonts such as Times New Roman because it reduces the PDF file size.</p>
<h3>Navigating Font Licensing and Compliance</h3>
<p>Some font licenses are permissive (such as <a href="https://openfontlicense.org/open-font-license-official-text/">SIL Open Font License</a>), whilst other licenses are more restrictive. There is no reliable way to tell programmatically what license a font has. </p>
<p>Many font licenses pre-date the internet, which means there is often no clear answer as to what is or is not allowed. BuildVu is designed to help you navigate these legal grey areas through specialized output settings.</p>
<h3>Customizable Text Modes</h3>
<p>BuildVu handles fonts differently depending on which Text Mode is used:</p>
<ul>
<li><code>shapetext_nonselectable</code> modes: BuildVu displays a flattened version of the fonts which avoids writing out any font files. Text selection is not possible in this mode.</li>
<li><code>shapetext_selectable</code> modes: BuildVu displays a flattened version of the fonts in addition to writing out a license-safe version of the fonts which is used for text selection purposes. The license-safe version of the fonts contains only width information.</li>
<li><code>realtext</code> modes: BuildVu writes out any embedded font files as part of the conversion.</li>
</ul>
<h3>Intelligent Fallback System</h3>
<p>When PDF files use fonts that are not embedded, BuildVu ensures your document remains readable and professional by using high-quality open-source fallback fonts, including:</p>
<ul>
<li>Liberation Serif &#038; Liberation Sans</li>
<li>Noto Sans Condensed &#038; Noto Sans Symbols2</li>
<li>Tex Gyre Cursor</li>
<li>GNU Unifont</li>
<li>Anton</li>
</ul>
<h3>Efficient Asset Management</h3>
<p>To keep file sizes small and performance high, BuildVu uses smart logic for font output:</p>
<ul>
<li><strong>Shared Fonts:</strong> When embedded fonts are shared by multiple pages in the PDF file, BuildVu will only write out a single copy of the font.</li>
<li><strong>Versioning and Mapping:</strong> If BuildVu writes out multiple font files with similar names, it is because the PDF file stores different versions of the font with the same name or because the font maps multiple glyphs onto the same extraction value (which requires a new copy of the font).</li>
</ul>
<h2>High Performance with Small File Sizes</h2>
<p>A common fear with high-fidelity conversion is massive file sizes. BuildVu uses an optimized SVG/HTML5 hybrid approach.</p>
<h3>Optimization Through Hybrid Tech</h3>
<ul>
<li><strong><a href="https://developer.mozilla.org/en-US/docs/Web/SVG">SVG</a> for Graphics:</strong> Vector graphics stay crisp at any zoom level.</li>
<li><strong>HTML for Text:</strong> Text remains real text, making it SEO-friendly and searchable without the weight of a giant image file.</li>
</ul>
<h2>Standard Converters vs BuildVu</h2>
<p>The table below shows the main differences between any standard converter and a developer tool like BuildVu:</p>
<table>
<tr>
<th>Feature</th>
<th>Standard Converters</th>
<th>BuildVu</th>
</tr>
<tr>
<td>Layout Accuracy</td>
<td>Low (Tries to reflow)</td>
<td>High (Fixed Layout)</td>
</tr>
<tr>
<td>Searchability</td>
<td>Often lost in &#8220;Image Mode&#8221;</td>
<td>100% Searchable Text</td>
</tr>
<tr>
<td>Fonts</td>
<td>Substitutes with generic fonts</td>
<td>Converts/Embeds original fonts</td>
</tr>
<tr>
<td>Mobile Support</td>
<td>Often breaks on small screens</td>
<td>Built-in Responsive Viewers</td>
</tr>
</table>
<h2>Built for Developers</h2>
<p>Unlike black-box online tools, BuildVu is a developer-first library. It integrates seamlessly into your existing stack.</p>
<h3>Enterprise-Grade Integration</h3>
<ul>
<li>Java SDK / REST API: Automate conversions at scale.</li>
<li>Self-Hosted: Keep your data secure on your own servers—no need to send sensitive documents to a third-party cloud.</li>
<li>Customizable Viewer: Use the IDRViewer to provide a professional magazine-style or continuous scroll reading experience directly in the browser.</li>
</ul>
<h2>Trial BuildVu for free</h2>
<p>If you need your web-based documents to look exactly like their printed counterparts, <a href="https://www.idrsolutions.com/buildvu/">BuildVu</a> is the tool that delivers the necessary precision. It bridges the gap between the rigid structure of a PDF and the flexibility of the modern web.</p>
<p>The post <a href="https://blog.idrsolutions.com/convert-pdf-to-html5-preserving-layout/">Convert PDF to HTML5: Preserving Layout</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Google Reverses Course: Chromium to Restore JPEG XL Support</title>
		<link>https://blog.idrsolutions.com/google-reverses-course-chromium-to-restore-jpeg-xl-support/</link>
		
		<dc:creator><![CDATA[Nadir]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 13:00:15 +0000</pubDate>
				<category><![CDATA[JDeli]]></category>
		<category><![CDATA[JPEGXL]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Google Chromium]]></category>
		<category><![CDATA[Image Compression]]></category>
		<category><![CDATA[JPEG XL]]></category>
		<category><![CDATA[pdf association]]></category>
		<category><![CDATA[Rust Programming]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38475</guid>

					<description><![CDATA[<p>TL;DR Google has reversed its 2022 decision and will bring JPEG XL back to Chromium, driven by developer pressure and growing adoption, using a memory-safe Rust implementation. The long-standing battle over the future of web imagery has reached a stunning conclusion. Google’s Chromium team, the gatekeepers for Chrome, Edge, and Brave, has officially announced plans [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/google-reverses-course-chromium-to-restore-jpeg-xl-support/">Google Reverses Course: Chromium to Restore JPEG XL Support</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR</h2>
<p>Google has reversed its 2022 decision and will bring <a href="https://jpegxl.info/">JPEG XL</a> back to Chromium, driven by developer pressure and growing adoption, using a memory-safe Rust implementation.</p>
<p>The long-standing battle over the future of web imagery has reached a stunning conclusion. Google’s Chromium team, the gatekeepers for Chrome, Edge, and Brave, has officially <a href="https://issues.chromium.org/issues/40168998">announced plans</a> to integrate a JPEG XL (JXL) decoder, effectively killing the &#8220;obsolete&#8221; tag that has dogged the format since 2022.</p>
<p>The move marks a rare and high-profile retreat for Google, which previously claimed the format lacked &#8220;ecosystem interest&#8221; despite a vocal outcry from photographers, developers, and open-source advocates.</p>
<h2>The &#8220;Memory-Safe&#8221; Path Forward</h2>
<p>While the previous experimental support for JXL relied on a C++ decoder, Google is setting a higher bar for its return. Rick Byers, a Chrome tech lead, emphasized that the team is looking for a &#8220;memory-safe&#8221; implementation.</p>
<p>This points directly toward Rust, a programming language designed to prevent the memory vulnerabilities common in C++. A proposal is already underway, led by Chromium committer Helmut Januschka, to utilize jxl-rs—a <a href="https://github.com/libjxl/jxl-rs">Rust-based decoder</a> born out of Google’s own research department. </p>
<p>This approach addresses the security concerns previously cited by other browser vendors like Mozilla.</p>
<h2>Why the Change of Heart?</h2>
<p>What changed Google’s mind after three years of silence? Several factors appear to have created a &#8220;perfect storm&#8221; for JXL’s comeback:</p>
<ul>
<li><strong>The PDF Factor:</strong> The recent decision by the PDF Association to make JXL a <a href="https://pdfa.org/pdf-errata-makeover/">preferred solution</a> made it nearly impossible for Chromium to ignore the format, as Chrome serves as a primary PDF viewer for millions.</li>
<li><strong>The Interop 2026 Survey:</strong> Results from the <a href="https://2025.stateofhtml.com/en-US/features/graphics-multimedia/">State of HTML survey</a> showed that JXL support was a top priority for web developers, signalling that ecosystem interest was actually at an all-time high.</li>
<li><strong>The Safari Precedent:</strong> With Apple already offering partial support in Safari, Google faced the risk of being the odd man out in the race for high-fidelity, high-efficiency web content.</li>
</ul>
<h2>A New Era for Web Media</h2>
<p>JPEG XL is widely considered superior to both the aging JPEG and the newer AVIF in several key areas. It offers lossless transcoding of old JPEGs (reducing file size by 20% without losing a single pixel of data) and supports massive resolutions and high bit-depths essential for professional HDR photography.</p>
<h2>Seamless JPEG XL Integration with JDeli</h2>
<p>For developers and organizations looking to capitalize on this resurgence immediately, <a href="https://www.idrsolutions.com/jdeli/">JDeli</a> provides a robust, high-performance image library that simplifies JPEG XL adoption. </p>
<p>Our pure java library allows Java applications to read JXL files with ease, offering a reliable bridge for legacy systems transitioning to modern standards. </p>
<p>Its high-speed processing and support for complex image metadata make it an ideal choice for enterprise environments that require the ultra-high resolution and HDR capabilities the PDF Association now champions.</p>
<h2>What’s Next?</h2>
<p>The &#8220;chicken and egg&#8221; problem that has plagued JPEG XL, where browsers won&#8217;t support it because there&#8217;s no content, and creators won&#8217;t use it because there&#8217;s no browser support, is effectively over. </p>
<p>With Chromium on board, Adobe and other software giants are expected to fast-track native JXL export tools.</p>
<p>The post <a href="https://blog.idrsolutions.com/google-reverses-course-chromium-to-restore-jpeg-xl-support/">Google Reverses Course: Chromium to Restore JPEG XL Support</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to add a table of contents to a PDF in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-add-a-table-of-contents-to-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Tue, 13 Jan 2026 16:32:52 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[manipulator]]></category>
		<category><![CDATA[outlines]]></category>
		<category><![CDATA[table of contents]]></category>
		<category><![CDATA[toc]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38469</guid>

					<description><![CDATA[<p>To add a table of contents to a PDF file in Java, you can use our PDF toolkit JPedal. Once you have downloaded the JPedal jar, you can use the following lines of code to generate a table of contents based on the bookmarks that already exist in the file. See our other blog post [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-table-of-contents-to-a-pdf-in-java-tutorial/">How to add a table of contents to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>To add a table of contents to a PDF file in Java, you can use our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">PDF toolkit JPedal</a>.</p>
<p>Once you have downloaded the <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal jar</a>, you can use the following lines of code to generate a table of contents based on the bookmarks that already exist in the file. See our other blog post on <a href="https://blog.idrsolutions.com/how-to-add-bookmarks-to-pdf-files-in-java-tutorial/" target="_blank">how to add bookmarks to a PDF file</a>.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));<br />
pdf.addTableOfContents(1, PaperSize.A4_PORTRAIT, BaseFont.Helvetica, 14, new float[] {0, 0, 0});<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p>You can customise the page dimensions, font, font size, and font color. <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator#generate-a-table-of-contents" target="_blank">Learn more on our support site</a>.</p>
<h2>Resources</h2>
<p>JPedal contains a powerful <a href="https://www.idrsolutions.com/jpedal/manipulate-pdf-pages-in-java" target="_blank">PDF Manipulator</a> which you can use to perform bulk edits to your documents. </p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-table-of-contents-to-a-pdf-in-java-tutorial/">How to add a table of contents to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JPEG XL Finds New Life in PDF Standards</title>
		<link>https://blog.idrsolutions.com/jpeg-xl-finds-new-life-in-pdf-standards/</link>
		
		<dc:creator><![CDATA[Nadir]]></dc:creator>
		<pubDate>Tue, 13 Jan 2026 12:30:48 +0000</pubDate>
				<category><![CDATA[JDeli]]></category>
		<category><![CDATA[JPEGXL]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[JPEG XL]]></category>
		<category><![CDATA[jpeg xl compatibility]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[pdf jpeg xl]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38444</guid>

					<description><![CDATA[<p>TL;DR: Despite being sidelined by Google’s Chrome team years ago, the JPEG XL (JXL) image format has secured a major win. The PDF Association has announced it will integrate JXL into the official PDF specification as the &#8220;preferred solution&#8221; for high-end imaging, potentially forcing tech giants to reconsider the format’s &#8220;obsolete&#8221; status. The &#8220;format wars&#8221; [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/jpeg-xl-finds-new-life-in-pdf-standards/">JPEG XL Finds New Life in PDF Standards</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>TL;DR:</h2>
<p>Despite being sidelined by Google’s Chrome team years ago, the JPEG XL (JXL) image format has secured a major win. <a href="https://youtu.be/DjUPSfirHek?si=Ay5G6AF2OEHY3e2F">The PDF Association has announced</a> it will integrate JXL into the official PDF specification as the &#8220;preferred solution&#8221; for high-end imaging, potentially forcing tech giants to reconsider the format’s &#8220;obsolete&#8221; status.</p>
<p>The &#8220;format wars&#8221; just took an unexpected turn. In a move that breathed fresh air into a supposedly dying technology, the PDF Association has officially thrown its weight behind JPEG XL, expanding its scope for <a href="https://caniuse.com/jpegxl">compatibility</a>.</p>
<p>During a recent European conference, <a href="https://www.linkedin.com/in/peter-v-wyatt/">Peter Wyatt</a>, CTO of the PDF Association, confirmed that the organization, which manages the ISO standards for PDF, will adopt JPEG XL to modernize how documents handle high-quality imagery. The decision marks a significant pivot point for a format that has spent the last three years in a state of digital limbo.</p>
<h2>Why PDF Chose JXL?</h2>
<p>While the web industry has been hesitant, the PDF Association sees JXL as the answer to several long-standing technical hurdles. Wyatt highlighted the format&#8217;s ability to handle <strong>HDR (High Dynamic Range)</strong> content and its staggering scalability.</p>
<p>Key technical advantages cited include:</p>
<ul>
<li><strong>Massive Resolution:</strong> Support for images exceeding 1 billion pixels.</li>
<li><strong>Deep Color:</strong> Up to 32 bits per channel across 4,099 channels.</li>
<li><strong>Efficiency:</strong> Superior compression compared to traditional JPEGs without losing image metadata.</li>
</ul>
<h2>The Chrome Controversy</h2>
<p>The adoption is a direct challenge to the narrative set by Google. In late 2022, the Chromium team famously stripped JXL support from the world’s most popular browser, labeling it &#8220;obsolete&#8221; and claiming a lack of ecosystem interest.</p>
<p>This move sparked a firestorm among developers and photographers who argued that JXL was being sacrificed to favor AVIF, a rival format backed by Google. Critics, including the original creators of JXL, have long maintained that the format’s technical superiority was being ignored for corporate strategy.</p>
<h2>A Fragmented Landscape</h2>
<p>While the PDF Association&#8217;s endorsement is a massive endorsement, the road to mainstream use remains bumpy:</p>
<ul>
<li><strong>Apple:</strong> Currently provides <a href="https://developer.apple.com/documentation/avfoundation/avvideocodectype/jpegxl">partial support</a> across iOS and macOS, though features like animated JXLs remain restricted.</li>
<li><strong>Mozilla:</strong> Firefox developers are open to the format but are waiting for a more secure, <a href="https://github.com/libjxl/jxl-rs">Rust-based decoder</a> to mitigate the risks associated with the current C++ implementation.</li>
<li><strong>Microsoft:</strong> Windows 11 users currently require a <a href="https://apps.microsoft.com/detail/9mzprth5c0tb">separate extension</a> to view the files natively.</li>
</ul>
<h2>Effortless JPEG XL Support with JDeli</h2>
<p>As JPEG XL gains traction within the PDF standard, <a href="https://www.idrsolutions.com/jdeli/">JDeli</a> provides a seamless bridge for Java developers looking to stay ahead of the curve. Our high-performance image library offers robust support for reading and writing JXL files, ensuring your applications can handle the massive resolutions and deep color profiles mentioned above without complex native dependencies.</p>
<p>By integrating <a href="https://www.idrsolutions.com/jdeli/">JDeli</a>, you can automatically convert JXL images for use in legacy PDF workflows or generate modern, JXL-encoded PDFs that meet the latest industry specifications.</p>
<h2>The Bottom Line</h2>
<p>By making JPEG XL a &#8220;preferred solution&#8221; for the world’s most ubiquitous document format, the PDF Association is making it much harder for browser engines to ignore. If Chrome users begin opening PDFs containing JXL data, Google may find its &#8220;obsolete&#8221; label increasingly difficult to defend.</p>
<p>For now, JPEG XL remains an <a href="https://cloudinary.com/blog/the-case-for-jpeg-xl">efficient choice for developers</a>, a high-performance tool waiting for the rest of the web to catch up.</p>
<p>The post <a href="https://blog.idrsolutions.com/jpeg-xl-finds-new-life-in-pdf-standards/">JPEG XL Finds New Life in PDF Standards</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>New options for our PDF merger</title>
		<link>https://blog.idrsolutions.com/new-options-for-our-pdf-merger/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 11:52:08 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[Merge]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[combine]]></category>
		<category><![CDATA[concatenate]]></category>
		<category><![CDATA[divider]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[interleave]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[mergning]]></category>
		<category><![CDATA[normalise]]></category>
		<category><![CDATA[normalize]]></category>
		<category><![CDATA[page]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38418</guid>

					<description><![CDATA[<p>In the latest release of our PDF library JPedal, we added some new features to our PDF merging tool. These new settings allow for greater control over the output when merging two or more PDF files. How to use each new feature First, you will need to create a list of MergeOptions and add each [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/new-options-for-our-pdf-merger/">New options for our PDF merger</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In the latest release of our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">PDF library JPedal</a>, we added some new features to our <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/merge-pdfs" target="_blank">PDF merging tool</a>. These new settings allow for greater control over the output when merging two or more PDF files.</p>
<h2>How to use each new feature</h2>
<p>First, you will need to create a list of <a href="https://javadoc.idrsolutions.com/org/jpedal/tools/PdfMerge.MergeOption.html" target="_blank"><code>MergeOption</code>s</a> and add each option to the list.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final ArrayList&lt;MergeOption&gt; options = new ArrayList&lt;&gt;();<br />
options.add(MergeOption.INTERLEAVE);<br />
</code></pre>
<p>Then you can call <code>PdfMerge.mergeFiles()</code> and pass the options list.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>PdfMerge.mergeFiles(new File[] {new File(&quot;inputFile1.pdf&quot;), &#8230;}, new File(&quot;outputFile.pdf&quot;), options);<br />
</code></pre>
<p>

</p>
<p>&nbsp;</p>
<p>

</p>
<h3>Add a dividing page</h3>
<p>To add a blank page in between each input document, you can use <code>MergeOption.ADD_DIVIDING_PAGE</code>.</p>
<h3>Add a footer</h3>
<p>To add a footer to all pages which includes the original filename and page number, you can use <code>MergeOption.ADD_FOOTER</code>.</p>
<p>You can customise the appearance of the footer using <a href="https://javadoc.idrsolutions.com/org/jpedal/tools/PdfMergeAttributes.html" target="_blank"><code>PdfMergeAttributes</code></a>.</p>
<h3>Interleave</h3>
<p>To merge documents by alternating pages from each input document, you can use <code>MergeOption.INTERLEAVE</code>.</p>
<p>Learn more about <a href="https://blog.idrsolutions.com/how-to-interleave-merge-pdfs-in-java-tutorial/" target="_blank">interleave merging</a>.</p>
<h3>Normalize page size</h3>
<p>To ensure all pages in the output document are the same dimensions as the first page, you can use <code>MergeOption.NORMALISE_PAGE_SIZE_TO_MATCH_FIRST</code>.</p>
<h3>Normalize page rotation</h3>
<p>To ensure all pages in the output document have the same orientation as the first page, you can use <code>MergeOption.NORMALISE_ROTATION_TO_MATCH_FIRST</code>.</p>
<p>

</p>
<p>&nbsp;</p>
<p>

</p>
<h2>Download JPedal to get started</h2>
<p>Download a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal jar</a> from our website to instantly start merging PDF files.</p>
<h2>Resources</h2>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/merge-pdfs" target="_blank">how to merge PDFs in Java</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/new-options-for-our-pdf-merger/">New options for our PDF merger</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Manipulate PDF files in the JPedal Viewer</title>
		<link>https://blog.idrsolutions.com/manipulate-pdf-files-in-the-jpedal-viewer/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 24 Dec 2025 11:44:16 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[edit]]></category>
		<category><![CDATA[manipulate]]></category>
		<category><![CDATA[modify]]></category>
		<category><![CDATA[page]]></category>
		<category><![CDATA[pages]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[viewer]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38263</guid>

					<description><![CDATA[<p>The PDF library JPedal contains a &#8216;tools&#8217; menu in the Viewer which allows you to make quick edits to PDF files, such as copying, rotating, cropping, and many more. The menu is hidden by default so you will need to update your preferences to see it. You can either do this in the Viewer&#8217;s preferences [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/manipulate-pdf-files-in-the-jpedal-viewer/">Manipulate PDF files in the JPedal Viewer</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The <a href="https://www.idrsolutions.com/jpedal/" target="_blank">PDF library JPedal</a> contains a &#8216;tools&#8217; menu in the <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">Viewer</a> which allows you to make quick edits to PDF files, such as copying, rotating, cropping, and many more.</p>
<p>The menu is hidden by default so you will need to <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/viewer/customise-the-user-interface-in-the-java-pdf-viewer#tools-menu" target="_blank">update your preferences</a> to see it. You can either do this in the Viewer&#8217;s preferences window, or in the <code>properties.xml</code> file.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.30.40.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.30.40.png" alt="JPedal Preferences Window" width="712" height="587" class="aligncenter size-full wp-image-38264" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.30.40.png 712w, https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.30.40-300x247.png 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></a></p>
<p>Once enabled, you can perform the following operations:</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.32.36.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.32.36.png" alt="JPedal tools menu" width="965" height="546" class="aligncenter size-full wp-image-38265" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.32.36.png 965w, https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.32.36-300x170.png 300w, https://blog.idrsolutions.com/app/uploads/2025/12/Screenshot-2025-12-24-at-10.32.36-768x435.png 768w" sizes="auto, (max-width: 965px) 100vw, 965px" /></a></p>
<p><a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">Download a JPedal trial jar</a> and try for yourself!</p>
<h2>Resources</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/viewer/how-to-add-a-pdf-viewer-to-your-java-application" target="_blank">JPedal Viewer</a>.</p>
<p>Learn more about <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">manipulating PDF files</a> in Java.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/manipulate-pdf-files-in-the-jpedal-viewer/">Manipulate PDF files in the JPedal Viewer</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to remove annotations from PDF files in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-remove-annotations-from-pdf-files-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 14:45:51 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[annotate]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[remove]]></category>
		<category><![CDATA[sanitise]]></category>
		<category><![CDATA[sanitize]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38260</guid>

					<description><![CDATA[<p>Short answer: you can remove annotations from PDF files using JPedal. The PDF file format is very complex and contains many features to boost interactivity. One such feature is the ability for PDF files to contain annotations which allow you to draw over, highlight, label, and comment on documents without modifying the existing content. While [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-annotations-from-pdf-files-in-java-tutorial/">How to remove annotations from PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Short answer: you can remove annotations from PDF files using <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a>.</p>
<p>The PDF file format is very complex and contains many features to boost interactivity. One such feature is the ability for PDF files to contain annotations which allow you to draw over, highlight, label, and comment on documents without modifying the existing content.</p>
<p>While this is a useful feature, you may want to remove annotations from documents, for example to remove text highlighting that has been done with annotations.</p>
<p>Our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">PDF toolkit JPedal</a> allows you to remove annotations from PDF files with only a few lines of code!</p>
<p>To do this you need to <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a JPedal jar</a>, then run the following code:</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));<br />
pdf.removeAnnotations();<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p>You may also want to consider <a href="https://blog.idrsolutions.com/how-to-sanitize-pdf-files-removing-hidden-risks/" target="_blank">other sanitization options</a> to clean your documents.</p>
<h2>Resources</h2>
<p>You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a trial jar</a> from our website.</p>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-annotations-from-pdf-files-in-java-tutorial/">How to remove annotations from PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mastering Server-Side PDF Processing in Java</title>
		<link>https://blog.idrsolutions.com/mastering-server-side-pdf-processing-in-java/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Fri, 19 Dec 2025 15:51:51 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[enterprise software]]></category>
		<category><![CDATA[pdf application]]></category>
		<category><![CDATA[PDF extraction]]></category>
		<category><![CDATA[server jvm crash]]></category>
		<category><![CDATA[server side]]></category>
		<category><![CDATA[server side pdf processing]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38224</guid>

					<description><![CDATA[<p>The Hidden Risks in Server-Side PDF Processing PDFs are the lifeblood of enterprise document workflows, but processing them at scale on a server is a complex engineering challenge. Most developers understand the architectural strain that high-volume PDF handling puts on a backend. The Native Code Fragility Many Java PDF libraries are actually wrappers around native [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/mastering-server-side-pdf-processing-in-java/">Mastering Server-Side PDF Processing in Java</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>The Hidden Risks in Server-Side PDF Processing</h2>
<p>PDFs are the lifeblood of enterprise document workflows, but processing them at scale on a server is a complex engineering challenge. Most developers understand the architectural strain that high-volume PDF handling puts on a backend.</p>
<h3>The Native Code Fragility</h3>
<p>Many Java PDF libraries are actually wrappers around native C++ binaries (via JNI). In a desktop environment, a crash simply closes the application. On a server, a native crash is catastrophic, it bypasses Java’s exception handling and takes down the entire Java Virtual Machine (JVM).</p>
<h3>The Memory Problem</h3>
<p>PDF files are not linear; they are complex object trees. Many standard libraries attempt to load the entire document into memory to process it. When your server tries to handle 50 concurrent requests for 100MB PDFs, the heap usage spikes instantly, leading to the dreaded <code>OutOfMemoryError (OOM)</code>.</p>
<h3>Concurrency and Thread Contention</h3>
<p>A server is a multi-threaded environment by nature. If a PDF library uses static shared variables or isn&#8217;t designed for re-entrancy, concurrent threads will interfere with each other. </p>
<p>This results in &#8220;ghost&#8221; data appearing in documents or, worse, internal deadlocks that cause your CPU usage to hit 100% while processing nothing.</p>
<h2>Why JPedal for Server-Side PDF Processing?</h2>
<p><a href="https://www.idrsolutions.com/jpedal/">JPedal</a> is uniquely suited for this role because it is built on a 100% native Java codebase with zero third-party dependencies, eliminating common stability and licensing issues. </p>
<p>It provides robust tools for high-volume tasks like <a href="https://www.idrsolutions.com/jpedal/java-pdf-renderer">PDF-to-image conversion</a>, <a href="https://www.idrsolutions.com/jpedal/extract-structured-content">extraction</a>, and <a href="https://www.idrsolutions.com/jpedal/process-pdf-in-java">manipulation</a> directly on your server, ensuring cross-platform portability and simplified deployment in any Java environment (e.g., Spring Boot, Jakarta EE).</p>
<p>With JPedal you have:</p>
<ul>
<li><strong>100% Java &#038; Zero Dependencies Eliminate:</strong> JNI &#8220;black box&#8221; crashes and third-party security vulnerabilities (like Log4j). Deploy instantly on Docker, Linux, or Cloud with a single JAR, no native binaries or complex environment setup required.</li>
<li><strong>High-Throughput Performance:</strong> Engineered for speed, JPedal is on par with the leading alternatives. Its thread-safe architecture allows for seamless concurrent processing without the risk of internal state corruption or &#8220;ghost data.&#8221;</li>
<li><strong>Intelligent Resource Handling:</strong> Prevent OutOfMemoryError with random-access loading that only pulls required objects into the heap. Disk-based image caching allows your server to process massive, image-heavy PDFs using a fraction of the memory required by standard libraries.</li>
<li><strong>Commercial-Grade Stability:</strong> Get direct support from the actual developers building the library, no tiered helpdesks. JPedal offers transparent, one-time server licensing that scales with your infrastructure without per-user or per-click fees.</li>
</ul>
<table style="width:100%; border-collapse: collapse; text-align: left;">
<thead>
<tr style="background-color: #f2f2f2;">
<th style="padding: 12px; border: 1px solid #ddd;">Capability</th>
<th style="padding: 12px; border: 1px solid #ddd;">JPedal (Server SDK)</th>
<th style="padding: 12px; border: 1px solid #ddd;">Alternatives</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Core Tech</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">100% Pure Java (No JNI)</td>
<td style="padding: 12px; border: 1px solid #ddd;">Native C++ Wrappers</td>
</tr>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Dependencies</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">Zero (Self-contained)</td>
<td style="padding: 12px; border: 1px solid #ddd;">High (3rd-party bloat)</td>
</tr>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Stability</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">Catchable Java Exceptions</td>
<td style="padding: 12px; border: 1px solid #ddd;">Fatal JVM Crashes</td>
</tr>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Memory</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">Smart Random Access</td>
<td style="padding: 12px; border: 1px solid #ddd;">Full Heap Loading</td>
</tr>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Scaling</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">Native Thread Safety</td>
<td style="padding: 12px; border: 1px solid #ddd;">Resource Locking Issues</td>
</tr>
<tr>
<td style="padding: 12px; border: 1px solid #ddd;"><strong>Deployment</strong></td>
<td style="padding: 12px; border: 1px solid #ddd;">Single JAR (Cloud-ready)</td>
<td style="padding: 12px; border: 1px solid #ddd;">Complex Native Setup</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Use Case: Converting PDF to Image on Large Scale</h2>
<p>Imagine a bank converting 150,000 legacy mortgage statements into high-fidelity images for a new portal over a single weekend. Processing this volume on the backend with unoptimized libraries is a recipe for disaster.</p>
<h3>Tutorial</h3>
<p>Here&#8217;s how JPedal simplifies this step-by-step:</p>
<ol>
<li>Download <a href="https://www.idrsolutions.com/jpedal/your-trial">JPedal trial jar</a>.</li>
<li>Create a File handle, InputStream or URL pointing to the PDF file</li>
<li>Include a password if file password protected</li>
<li>Open the PDF file</li>
<li>Iterate over the pages</li>
<li>Close the PDF file</li>
</ol>
<h3>The Pure Java Code&#8230;</h3>
<p><pre class='line-numbers' data-ad=JPedal><code class='language-java'>File file = new File(&quot;/path/to/document.pdf&quot;));<br />
ConvertPagesToHiResImages extract=new ConvertPagesToHiResImages(file);<br />
//extract.setPassword(&quot;password&quot;);<br />
if (extract.openPDFFile()) {<br />
int pageCount = extract.getPageCount();<br />
for (int page = 1; page &lt;= pageCount; page++) {<br />
BufferedImage img = extract.getPageAsImage(page, hasAlpha);<br />
}<br />
}<br />
extract.closePDFfile();<br />
</code></pre><br />
&nbsp;</p>
<h2>Ready to Power Your Java Backend?</h2>
<p>Choosing a library for server-side PDF processing in Java is an architectural decision. JPedal is intentionally built to remove the pain points associated with native dependencies, memory scaling, and complex licensing that plague other solutions.</p>
<p>But if you&#8217;re still unsure, <a href="https://www.idrsolutions.com/jpedal/your-trial">trial JPedal</a> yourself and test our PDF SDK in your development workflow.</p>
<p><H2>FAQs</h2>
<details>
<summary>Q: How do I manage concurrent requests without exhausting server resources?</summary>
<p>A: Use a managed thread pool rather than spawning new processes for every document. This keeps the JVM stable and allows you to set a hard limit on the number of simultaneous PDF tasks, preventing CPU and memory spikes during traffic bursts.</p>
</details>
<details>
<summary>Q: Can I process PDFs in a headless Linux or Docker environment?</summary>
<p>A: Yes, provided your library does not require a graphical display (X11) or native OS dependencies. For cloud-native deployments, choose a 100% Java implementation to ensure portability and avoid the complexity of installing native libraries in your containers.</p>
</details>
<details>
<summary>Q: Why use server-side processing instead of client-side?</summary>
<p>A: Server-side processing offers superior security (no raw files sent to the browser), consistent performance across all devices, and the ability to handle complex tasks, like high-fidelity conversion or digital signing that would crash a mobile browser.</p>
</details>
<p>The post <a href="https://blog.idrsolutions.com/mastering-server-side-pdf-processing-in-java/">Mastering Server-Side PDF Processing in Java</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to crop a PDF file in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-crop-a-pdf-file-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 18 Dec 2025 13:21:18 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[clip]]></category>
		<category><![CDATA[crop]]></category>
		<category><![CDATA[margin]]></category>
		<category><![CDATA[odf]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[scale]]></category>
		<category><![CDATA[trim]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38235</guid>

					<description><![CDATA[<p>Our Java PDF library JPedal contains a powerful PDF Manipulator which you can use to crop PDF files as well as performing other common edits. Cropping pages in a PDF document is useful if you want to remove margins, or focus on a specific section. Unlike image cropping, PDF cropping adjusts the visible area of [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-crop-a-pdf-file-in-java-tutorial/">How to crop a PDF file in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">Java PDF library JPedal</a> contains a powerful PDF Manipulator which you can use to crop PDF files as well as performing other common edits.</p>
<p>Cropping pages in a PDF document is useful if you want to remove margins, or focus on a specific section. Unlike image cropping, PDF cropping adjusts the visible area of the page without modifying its content.</p>
<p>You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a trial copy</a> from our website.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />pdf.cropPage(new PageRanges(&quot;1-10&quot;), 0.5f, 0.5f, ScaleMode.SCALE_BY_FACTOR);<br />
pdf.cropPage(new PageRanges(&quot;1-10&quot;), 595, 842, ScaleMode.SCALE_TO_DIMENSION);<br />
pdf.apply();

<br />pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p>You can either crop the page by a scale factor, or to a specific dimension.</p>
<p>See the <a href="https://javadoc.idrsolutions.com/org/jpedal/manipulator/PdfManipulator.html#copyPage(int,int)" target="_blank">Javadoc</a> for more settings.</p>
<h2>Resources</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator#load-and-write-documents" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-crop-a-pdf-file-in-java-tutorial/">How to crop a PDF file in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Convert AVIF to JPG in Bulk (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-convert-avif-to-jpg-in-bulk-tutorial/</link>
		
		<dc:creator><![CDATA[Amy Pearson]]></dc:creator>
		<pubDate>Fri, 12 Dec 2025 13:49:27 +0000</pubDate>
				<category><![CDATA[AVIF]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDeli]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[avif to jpg]]></category>
		<category><![CDATA[avif to jpg java]]></category>
		<category><![CDATA[convert avif]]></category>
		<category><![CDATA[convert avif to jpg]]></category>
		<category><![CDATA[convert avif to jpg in java]]></category>
		<category><![CDATA[java avif to jpg]]></category>
		<category><![CDATA[java conversion avif to jpg]]></category>
		<category><![CDATA[java convert avif]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38211</guid>

					<description><![CDATA[<p>If you’re working with a large number of AVIF files, converting them to JPG in bulk can streamline your workflow, especially when the JPG format is required for multiple applications. You can read, write and convert AVIF files in Java with JDeli, our pure Java library. AVIF (AV1 Image File Format) is a modern image [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-avif-to-jpg-in-bulk-tutorial/">How to Convert AVIF to JPG in Bulk (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg-300x300.png" alt="bulk convert avif to jpg" width="300" height="300" class="aligncenter size-medium wp-image-38214" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg-300x300.png 300w, https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg-150x150.png 150w, https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg-120x120.png 120w, https://blog.idrsolutions.com/app/uploads/2025/12/tiff-to-jpg.png 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>If you’re working with a large number of AVIF files, converting them to JPG in bulk can streamline your workflow, especially when the JPG format is required for multiple applications.</p>
<p>You can <a href="https://www.idrsolutions.com/jdeli/avif">read, write and convert</a> AVIF files in Java with JDeli, our pure Java library.</p>
<p>AVIF (AV1 Image File Format) is a modern image format offering superior compression efficiency compared to JPEG and PNG. Converting images to AVIF results in significantly smaller file sizes with high visual quality. This leads to faster loading times and reduced bandwidth use on the web and other platforms.</p>
<p>In this article, I’ll show you how to convert AVIF images to JPG using Java and <a href="https://www.idrsolutions.com/docs/jdeli/tutorials/converting/jpg-converter">JDeli</a>, making your files easier to work with. JDeli stands out as one of the most powerful Java libraries for handling and manipulating images.</p>
<h2>Bulk convert AVIF to JPG using Java</h2>
<ol>
<li>Download the <a href="https://www.idrsolutions.com/jdeli/#why-buy" target="_blank" rel="noopener">JDeli trial jar.</a></li>
<li>Process image if needed (scale, sharpen, lighten, watermark, etc)</li>
<li>Write out BufferedImage as JPG image file</li>
</ol>
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>BufferedImage bufferedImage = JDeli.read(new File(&quot;avifImageFile.avif&quot;));<br />
// Read AVIF image into Java

<br />bufferedImage = operations.apply(BufferedImage bufferedImage);<br />
// Process image (Optional)

<br />JDeli.write(bufferedImage, &quot;jpg&quot;, new File(&quot;jpgImageFile.jpg&quot;));<br />
// Write out BufferedImage as JPEG image file<br />
</code></pre>
<p>&nbsp;</p>
<h2>Export AVIF to JPG in one line of code</h2>
<p>With the <code>JDeli.convert()</code> method you can save PNG as JPG in just one line of code.</p>
<p><strong>Using File</strong><br />
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>JDeli.convert(File inFile, File outFile);</code></pre><br />
<strong>Using InputStream and OutputStream</strong><br />
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>JDeli.convert(InputStream inputStream, OutputStream outputStream, &quot;jpg&quot;);</code></pre><br />
<strong>Using byte[]</strong><br />
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>byte[] outputData = JDeli.convert(byte[] inputData, &quot;jpg&quot;);</code></pre><br />
<strong>Configure Output Settings</strong><br />
You can use this option to specify an <a href="https://files.idrsolutions.com/maven/site/jdeli/apidocs/com/idrsolutions/image/jpeg/options/JpegEncoderOptions.html" target="_blank" rel="noopener">EncoderOptions</a> object for configuring output settings such as image compression.<br />
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>JDeli.convert(File inFile, EncoderOptions outputOptions, File outfile);</code></pre></p>
<p>&nbsp;</p>
<h2>How to bulk convert AVIF to JPG from the command line</h2>
<p>You can turn PNG to JPG using command line or bash, bat, and PowerShell scripts. This method also enables JDeli to be invoked from any programming language that supports creating a child process.<br />
<pre class='line-numbers' data-ad=JDeli><code class='language-java'>java -jar jdeli.jar &#8211;convert jpg &quot;inputFileOrDir&quot; &quot;outputDir&quot;<br />
</code></pre></p>
<p>In this tutorial you learned how to bulk convert AVIF to JPG in bulk. JDeli has AVIF support for reading and writing as well, you read our <a href="https://www.idrsolutions.com/docs/jdeli/avif-support/">documentation</a> to find out more.</p>
<p>As experienced Java developers, we help you <a href="/working-with-images-in-java/" target="_blank" data-ec="example-category" data-ea="example-action" data-el="example-label">work with images in Java</a> and bring over a decade of hands-on experience with many image file formats.</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-avif-to-jpg-in-bulk-tutorial/">How to Convert AVIF to JPG in Bulk (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to write AVIF image files in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-write-avif-image-files-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 15:45:38 +0000</pubDate>
				<category><![CDATA[AVIF]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDeli]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[avif image writing in java]]></category>
		<category><![CDATA[avif java]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[write avif]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=33958</guid>

					<description><![CDATA[<p>In this article, I will cover how to write out images as AVIF files in Java. We also have a related article covering how to read AVIF files in Java. ImageIO does not write AVIF file types so you will need to use an external library. We believe that JDeli is the only pure, complete [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-write-avif-image-files-in-java-tutorial/">How to write AVIF image files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In this article, I will cover how to write out images as <a href="https://blog.idrsolutions.com/what-is-the-avif-image-format/">AVIF</a> files in Java. We also have a related article covering how to <a href="https://blog.idrsolutions.com/how-to-read-avif-files-in-java-tutorial/">read AVIF</a> files in Java.</p>
<p>ImageIO does not write AVIF file types so you will need to use an external library. We believe that JDeli is the only pure, complete Java implementation available so we will document that.</p>
<p>If you are looking for a free solution, there is an AVIF library on <a href="https://github.com/umjammer/vavi-image-avif" target="_blank" rel="noopener noreferrer">GitHub</a> (which includes Java wrappers).</p>
<h2>How to write an image as a AVIF file</h2>
<ol>
<li>Add JDeli to your class or module path. (download the <a title="JDeli download" href="https://www.idrsolutions.com/jdeli/?mtm_campaign=Blog-trial-downloads&#038;mtm_kwd=blog%20articles&#038;mtm_campaign=BlogTrialDownloads" target="_blank" rel="noopener">trial jar</a>).</li>
<li>Create a File (or OutputStream) object</li>
<li>Pass image, AVIF type, and File (or OutputStream) object into write method</li>
</ol>
<h3>and the Java code to write AVIF…</h3>
<p><pre class='line-numbers' data-ad=JDeli><code class='language-java'>File file = new File(&quot;/path/to/outputFile.AVIF&quot;));<br />
JDeli.write(bufferedImage, &quot;AVIF&quot;, file);

<br />//In JDeli you can also use a typesafe version<br />
JDeli.write(bufferedImage, OutputFormat.AVIF, file);

<br />//or pass in a <a href=&quot;https://files.idrsolutions.com/maven/site/jdeli/apidocs/com/idrsolutions/image/avif/options/AvifEncoderOptions.html&quot;> object for more control over AVIF image output</a><br />
AVIFEncoderOptions options = new AVIFEncoderOptions();<br />
JDeli.write(bufferedImage, options, file);<br />
</code></pre><br />
&nbsp;<br />
<p>As experienced Java developers, we help you <a href="/working-with-images-in-java/" target="_blank" data-ec="example-category" data-ea="example-action" data-el="example-label">work with images in Java</a> and bring over a decade of hands-on experience with many image file formats.</p></p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-write-avif-image-files-in-java-tutorial/">How to write AVIF image files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JDeli: The Memory-Efficient &#038; Performance Replacement for Java ImageIO</title>
		<link>https://blog.idrsolutions.com/jdeli-the-memory-efficient-performance-replacement-for-java-imageio/</link>
		
		<dc:creator><![CDATA[Amy Pearson]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 16:10:48 +0000</pubDate>
				<category><![CDATA[AVIF]]></category>
		<category><![CDATA[HEIC]]></category>
		<category><![CDATA[JDeli]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[JPEG2000]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[TIFF]]></category>
		<category><![CDATA[WebP]]></category>
		<category><![CDATA[alternative imageio]]></category>
		<category><![CDATA[ImageIO]]></category>
		<category><![CDATA[imageio alternative]]></category>
		<category><![CDATA[imageio comparison]]></category>
		<category><![CDATA[imageio crash]]></category>
		<category><![CDATA[ImageIO issues]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38161</guid>

					<description><![CDATA[<p>JDeli is the industry-leading, high-performance replacement for the default javax.imageio.ImageIO package. It resolves common issues associated with the standard library, offering up to 7X faster image loading and significantly lower peak memory consumption, making it the definitive memory efficient Java image library. TL;DR Speed: JDeli is up to 10x faster than ImageIO (for TIFF writing) [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/jdeli-the-memory-efficient-performance-replacement-for-java-imageio/">JDeli: The Memory-Efficient &#038; Performance Replacement for Java ImageIO</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>JDeli is the industry-leading, high-performance replacement for the default <code>javax.imageio.ImageIO</code> package. It resolves common issues associated with the standard library, offering up to 7X faster image loading and significantly lower peak memory consumption, making it the definitive memory efficient Java image library.</p>
<h2>TL;DR</h2>
<ul>
<li>Speed: JDeli is up to 10x faster than ImageIO (for TIFF writing) and over 7x faster for standard PNG decoding.</li>
<li>Stability/Memory: JDeli is written fully in Java, preventing the notorious JVM crashes caused by native code dependencies in ImageIO and offering more stable memory management.</li>
<li>Modern Formats: Supports critical modern formats missing in core Java, including HEIC, AVIF, and JPEG XL.</li>
<li>Performance Detail: Reads JPEG 2000 files over 2.5x faster than ImageIO with the JAI plugin.</li>
</ul>
<h2>Why Replace ImageIO?</h2>
<h3>Core Issues with the Default Java ImageIO</p>
<h3>
<p><strong>Limited Modern and Complex Format Support</strong> The default library lacks native support for essential contemporary formats and complex professional formats. </p>
<p>This forces developers to rely on unstable, often deprecated third-party plugins (like JAI), which only partially address the problem. For example, ImageIO offers no native support for crucial modern formats like HEIC (used by Apple) or complex formats like JPEG 2000 and AVIF.</p>
<p><strong>Unoptimized Decoders Lead to Slow Performance</strong> ImageIO&#8217;s decoders rely on older, often unoptimized implementations, leading to a bottleneck in processing high-resolution images. This results in slow throughput, especially when processing large batches of images common in web services or data pipelines. </p>
<p>Performance benchmarks show ImageIO is often significantly slower than specialized libraries for common operations, sometimes lagging by over 7x (as seen in PNG decoding).</p>
<p><strong>Poor Memory Management and JVM Crash Risk</strong> ImageIO is notorious for its poor memory management. It frequently requires loading the entire, uncompressed image into memory using non-optimized data structures. </p>
<p>Furthermore, its reliance on unstable, platform-specific native (C/C++) code dependencies often leads to uncontrolled memory usage outside the Java Heap. This dramatically increases the risk of the dreaded OutOfMemoryError and can cause entire JVM crashes on server-side or cloud deployments.</p>
<h2>JDeli as the Superior Drop-in Replacement</h2>
<p>JDeli is engineered from the ground up to be a robust, high-performance, and stable alternative to ImageIO, designed for the demands of modern Java ecosystems.</p>
<p><strong>Structure:</strong> JDeli provides familiar reading and writing APIs that can easily replace existing ImageIO functions with minimal code changes.</p>
<p><strong>Key Feature:</strong> JDeli utilizes a completely optimized, low-level Java implementation instead of relying on the legacy Sun/Oracle code base or problematic third-party native binaries. </p>
<p>This eliminates the root cause of ImageIO’s instability and ensures superior speed and memory management across all supported platforms.</p>
<h2>JDeli vs ImageIO Overview</h2>
<p>Below you can find a comparison between JDeli and ImageIO, and how both are designed for different use cases:</p>
<table>
<thead>
<tr>
<th>Feature / Metric</th>
<th>Default Java ImageIO</th>
<th>JDeli Java Image Library</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Code Base Stability</strong></td>
<td>Relies heavily on <strong>unstable native code</strong> (C/C++), often via JAI plugins.</td>
<td><strong>100% Pure Java Core</strong> for all primary formats. Optional native acceleration is integrated and vetted.</td>
</tr>
<tr>
<td><strong>Crash Risk (OOM/JVM)</strong></td>
<td><strong>High Risk.</strong> Prone to <strong><code>OutOfMemoryError</code></strong> and <strong>JVM crashes</strong> due to unmanaged off-heap memory allocation.</td>
<td><strong>Zero Risk</strong> from unmanaged native code. Prevents heap-related <strong>JVM crashes</strong> by controlling memory usage within the Java Heap.</td>
</tr>
<tr>
<td><strong>Peak Memory Usage (PMU)</strong></td>
<td><strong>High.</strong> Loads entire uncompressed image into non-optimized <code>BufferedImage</code> structures. Lacks memory control.</td>
<td><strong>Low.</strong> Features optimized memory handling and a specific <strong>low-memory mode</strong> for significant PMU reduction.</td>
</tr>
<tr>
<td><strong>Modern Format Support</strong></td>
<td><strong>Poor.</strong> Requires unstable plugins for JPEG 2000, and generally lacks <strong>HEIC, AVIF, and JPEG XL</strong>.</td>
<td><strong>Excellent.</strong> Natively supports all critical modern formats (HEIC, AVIF, JPEG 2000, WebP).</td>
</tr>
<tr>
<td><strong>Multithreading Support</strong></td>
<td><strong>Limited</strong> and often non-thread-safe when dealing with native code dependencies.</td>
<td><strong>Full multithreading support</strong> available for concurrent image processing, aiding performance.</td>
</tr>
</tbody>
</table>
<h2>Code Example: JDeli for Memory-Efficient Image Processing</h2>
<p>This example shows how simple it is to use JDeli to read and write a HEIC image, demonstrating the replacement capability while implicitly utilizing its high-performance, memory-optimized core.</p>
<p><pre class='line-numbers' data-ad=JDeli><code class='language-java'>// Read HEIC files

<br />JDeli.read(File heicFile);

<br />JDeli.read(byte[] heicData);

<br />JDeli.read(InputStream heicStream);

<br />// Write HEIC files

<br />JDeli.write(myBufferedImage, &quot;heic&quot;);

<br />// Convert to and from HEIC files<br />
JDeli.convert(File inFile, File outFile);

<br />JDeli.convert(InputStream inStream, OutputStream outStream, String format);

<br />byte[] outputData=JDeli.convert(byte[] inputData, String format);<br />
</code></pre><br />
&nbsp;</p>
<h2>Conclusion</h2>
<p>For Java developers seeking a powerful and stable alternative, <a href="https://www.idrsolutions.com/jdeli/">JDeli</a> is the clear answer, designed to replace the outdated ImageIO. It is the definitive memory-efficient Java image library, eliminating the instability risks of native code while delivering superior speed.</p>
<h2>Benchmarks Resources</h2>
<p>The benchmarks mentioned in this post were performed using the Java Microbenchmark Harness test. If you&#8217;re curious, you can view the <a href="https://www.idrsolutions.com/docs/jdeli/tutorials/performance-comparison">detailed results of the test</a>.</p>
<p>As experienced Java developers, we help you <a href="/working-with-images-in-java/" target="_blank" data-ec="example-category" data-ea="example-action" data-el="example-label">work with images in Java</a> and bring over a decade of hands-on experience with many image file formats.</p>
<p>The post <a href="https://blog.idrsolutions.com/jdeli-the-memory-efficient-performance-replacement-for-java-imageio/">JDeli: The Memory-Efficient &#038; Performance Replacement for Java ImageIO</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference – Part 6 Completing the Orient Express</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 09:38:52 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38078</guid>

					<description><![CDATA[<p>After yesterday&#8217;s Bulgarian marathon, today is a much gentler last stage. The overnight sleep was the most comfortable yet with a spacious 4 bed compartment with dropdown beds. We had a very early start with a knock on the door at 4am to climb off the train with all our luggage for passport check and [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Travelling to Istanbul by train for DevFest conference – Part 6 Completing the Orient Express</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>After yesterday&#8217;s <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Bulgarian marathon</a>, today is a much gentler last stage. </p>
<p>The overnight sleep was the most comfortable yet with a spacious 4 bed compartment with dropdown beds.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_9363/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9363-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9363-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9363-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_9369/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9369-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9369-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9369-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_9365/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9365-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9365-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9365-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>We had a very early start with a knock on the door at 4am to climb off the train with all our luggage for passport check and bag scan. There was even a small duty free shop.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-225x300.jpeg" alt="customs" width="225" height="300" class="aligncenter size-medium wp-image-38124" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3814-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>From the train, there is a great view of the Bosphorus and the city and last minute chance to finish my book.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_9379/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9379-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9379-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9379-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_3828/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3828-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3828-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3828-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/img_3830/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3830-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3830-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_3830-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>Our overnight train took us into Istanbul and 2 stops on the Metro brought us to Sirkeci Station, traditional terminus for the Orient Express and less than 100 yards from the Bosphorus (note cat sleeping on car roof behind me).</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/station-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/station-225x300.jpg" alt="" width="225" height="300" class="aligncenter size-medium wp-image-38128" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/station-225x300.jpg 225w, https://blog.idrsolutions.com/app/uploads/2025/12/station-768x1024.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/12/station-1152x1536.jpg 1152w, https://blog.idrsolutions.com/app/uploads/2025/12/station-1536x2048.jpg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>It&#8217;s an emotional moment and a huge sense of accomplishment! Our hotel is just 50 yards up a side street and there is a selection of cats to welcome us to their city and our home for the next 5 nights.</p>
<h2>Reflections on &#8216;Riding the Orient Express&#8217;</h2>
<p>It has definitely been a very different type of trip to flying to Turkey. The whole journey has been surprisingly straight-forward but did involve more organisation and planning. </p>
<p>I am not sure you would choose between flying OR taking the train. The experiences are so different that your motivations would be very different. I can tell you that if you choose to take the train:-</p>
<ul>
<li>You will need a more relaxed frame of mind</li>
<li>It will cost more in cash and time and less in CO2 emissions.</li>
<li>You will have an adventure, not a trip</li>
<li>There will be the opportunity to see so much more of Europe</li>
</ul>
<p>So I think it really comes down to whether this is a trip or a journey for you&#8230;</p>
<h2>Some tips if you decide to try the train</h2>
<p>There is lots of useful information online to help you and here is my contribution for you </p>
<ul>
<li>Do you homework. There are lots of useful online resources, including <a href="https://www.seat61.com/">the Man in Seat 61</a>. If you do not feel up to it, there are agents who will plan it all for you.</li>
<li>You have total freedom so tailor the trip. If you want extra days in a city, it&#8217;s not a problem.</li>
<li>Always use common sense.</li>
<li>We found the trip generally safe but keep your valuables hidden on you</li>
<li>And lastly, always pack at least one &#8216;Gen Z&#8217; for the trip. Drop them in any random city and within a couple of minutes they will have decoded the local transport system and bought some tickets online</li>
</ul>
<p>Thanks for joining us on our trip and whether you ever do it literally, or just joined us in spirit, always enjoy the ride&#8230;. </p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Travelling to Istanbul by train for DevFest conference – Part 6 Completing the Orient Express</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference – Part 5 Crossing Bulgaria</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Tue, 02 Dec 2025 18:10:03 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38045</guid>

					<description><![CDATA[<p>After the (now unusual) experience of a night in one place, we were in Ted&#8217;s Coffee for 9.30am to collect our tickets for tonight&#8217;s Sophia Express. Mark was there early to hand them over and we had a good chat about life in Romania and how it compared with the UK. So far we have [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Travelling to Istanbul by train for DevFest conference – Part 5 Crossing Bulgaria</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>After the (now unusual) experience of <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">a night in one place</a>, we were in Ted&#8217;s Coffee for 9.30am to collect our tickets for tonight&#8217;s Sophia Express. Mark was there early to hand them over and we had a good chat about life in Romania and how it compared with the UK.</p>
<p>So far we have taken 4 trains to cross Europe. This time of year, there is no direct train from Bucharest to Istanbul so we have 4 small day trains to take us to across the country for our final overnight train from <a href="https://en.wikipedia.org/wiki/Dimitrovgrad,_Bulgaria">Dimitrovgrad</a>. It&#8217;s a chance to catch up on work, do some reading, or simply watch the world go by.</p>
<h2>Bulgarian trains</h2>
<p>These are day trains so back to seats and carriages. Our first train had open compartments and then we have separate compartments. You will note the colourful exteriors!</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9340/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9340-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9340-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9340-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9356/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9356-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9356-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9356-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9347/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9347-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9347-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9347-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>The stations</h2>
<p>We have stops at Russe, Gorna Orjahovica and Dimitrovgrad with time at each to grab some food and a drink. The stations are not as grand as previous ones and have much smaller Christmas trees. They still have a Soviet feel to them in my opinion.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9336/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9336-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9336-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9336-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9331/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9331-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9331-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9331-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9334/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9334-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9334-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9334-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9350/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9350-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9350-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9350-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9345/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9345-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9345-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9345-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9348/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9348-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9348-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9348-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>The Views</h2>
<p>Green, rural, flat would be my summary in 3 words. We did have one major Geographical feature (and it&#8217;s a big one) when we crossed the River Danube.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9343/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9343-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9343-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9343-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9317/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9317-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9317-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9317-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9329-2/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9329-2-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9329-2-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9329-2-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>New friends</h2>
<p>It seems to be a legal requirement for Bulgarian stations to have a cat at each station! They are clearly very much in charge and graciously allow us to make temporary use of their stations.<br />

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9353/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9353-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9353-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9353-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9354/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9354-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9354-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9354-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
</p>
<h2>Language challenges</h2>
<p>The Bulgarians use a different alphabet. Luckily I am able to resolve some difficult translation issues with some sign language and help from a local!</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9355/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9355-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9355-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9355-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/img_9349/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9349-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9349-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9349-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>The last leg</h2>
<p>We will finish with our final overnight train which leaves at 11pm to take us into Turkey and Istanbul. Last task before turning in is to switch our phones to a different SIM for Turkey. And we will be woken up for a late night passport check on the border.</p>
<p>So join us tomorrow for <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">the final instalment</a> as we complete the trip and arrive in Istanbul. We will review how the journey went and offer some advice for next time.</p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Travelling to Istanbul by train for DevFest conference – Part 5 Crossing Bulgaria</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference – Part 4 Bucharest &#8211; an unlikely holiday destination</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Mon, 01 Dec 2025 19:27:06 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=38013</guid>

					<description><![CDATA[<p>After enjoying our free drink in the Premium lounge at Budapest, we boarded the 7.05pm overnight train to Bucharest. Through Transylvania and the Carpathians This time it is a 3-person couchette with our own sink and a reassuring solid wooden door. I noted the doors are also locked at both ends of the carriage and [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Travelling to Istanbul by train for DevFest conference – Part 4 Bucharest &#8211; an unlikely holiday destination</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>After <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">enjoying our free drink</a> in the Premium lounge at Budapest, we boarded the 7.05pm overnight train to Bucharest.</p>
<h2>Through Transylvania and the Carpathians</h2>
<p>This time it is a 3-person couchette with our own sink and a reassuring solid wooden door. I noted the doors are also locked at both ends of the carriage and we have our own guard.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9168/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9168-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="3-bed courchette" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9168-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9168-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9167/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9167-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Romanian train" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9167-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9167-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>The beds are the most spacious and comfortable and we get a duvet, not sheets, but it was also the bumpiest ride. Our train does not get in until 11.35am so we get some stunning views of the Carpathians in the morning.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9172/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9172-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9172-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9172-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9171/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9171-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9171-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9171-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9170/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9170-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9170-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9170-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>Exploring Bucharest</h2>
<p>The City of Bucharest may not be the first place that comes to mind as a top holiday destination but there is plenty to see and do here. Our first stop is to drop our bags at the hotel &#8211; you need to stay a night as the trains do not overlap. Then into town&#8230;</p>
<p>For lunch we found a place recommended online which turned out to be grander than we had anticipated but very nice. The food was very tasty and they were very friendly.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9196/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9196-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9196-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9196-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9190/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9190-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9190-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9190-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9194/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9194-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9194-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9194-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>Afterwards, we headed to Constitution Square where you can see the <a href="https://en.wikipedia.org/wiki/Palace_of_the_Parliament">Palace of the Parliament</a> (the World&#8217;s heaviest building). In the square we found the nicest Christmas market yet &#8211; not too crowded and a wide range of genuine gifts as well as food and drink.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9213/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9213-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9213-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9213-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9211/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9211-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9211-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9211-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9212/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9212-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9212-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9212-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>Our next stop was the old town to enjoy the sights. Be careful as the cobbled streets are very uneven. If you get cold, there are plenty of places to get a hot drink and warm up.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9217/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9217-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9217-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9217-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9220/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9220-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9220-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9220-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9216/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9216-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9216-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9216-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>Dinner was some traditional Romanian food in a warm cellar &#8211; another online recommendation.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-300x225.jpeg" alt="" width="300" height="225" class="aligncenter size-medium wp-image-38030" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9286-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>December 1st is Romania&#8217;s Great Union Day so there were lots of flags, buildings were lit up and we saw the start of the military torchlit procession in the evening. With all the Christmas lights as well, the city was very bright and cheery.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9288-2/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9288-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9288-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9288-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9299/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9299-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9299-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9299-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/img_9305/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9305-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9305-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9305-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>A night off from the trains</h2>
<p>Tonight will be spent in a hotel &#8211; it will seem strange to wake up in the same place we went to sleep! </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-300x225.jpeg" alt="" width="300" height="225" class="aligncenter size-medium wp-image-38031" srcset="https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/12/IMG_9180-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Tomorrow will be meeting our agent Mark at 9.30am to pick up our tickets for the Sofia Express (you cannot buy these online) and the rest of the day spent on Bulgarian trains including the overnight one to <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">take us into Istanbul</a> on Wednesday morning. </p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Travelling to Istanbul by train for DevFest conference – Part 4 Bucharest &#8211; an unlikely holiday destination</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference – Part 3 onwards to Budapest</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Sun, 30 Nov 2025 19:12:27 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37976</guid>

					<description><![CDATA[<p>Another day another night train. After a full day in Prague, it&#8217;s time for another night train&#8230;. Journey to Budapest Tonight it&#8217;s a six berth sleeper run by Czech trains. This time we have a companion as far as Bratislava &#8211; a cheerful man returning home from a fish conference. Unlike the previous night, we [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Travelling to Istanbul by train for DevFest conference – Part 3 onwards to Budapest</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Another day another night train. After a <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">full day in Prague</a>, it&#8217;s time for another night train&#8230;.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-300x225.jpeg" alt="Czech sleeper train" width="300" height="225" class="aligncenter size-medium wp-image-37983" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9077-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>Journey to Budapest</h2>
<p>Tonight it&#8217;s a six berth sleeper run by Czech trains. This time we have a companion as far as Bratislava &#8211; a cheerful man returning home from a fish conference.</p>
<p>Unlike the previous night, we cannot open the windows but the heating controls work better and the carriage is cooler.</p>
<p>The ticket Inspector advises us to lock our door as there have been a spate of thefts on the trains. Indeed, someone with a torch does try our (very) securely locked door at 3am! </p>
<p>We wake up to find our train following the Danube and arrive in Budapest at 8.30am today. </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-300x225.jpeg" alt="Danube" width="300" height="225" class="aligncenter size-medium wp-image-37984" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9082-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Our evening train departs from a different station so our first task is to drop the luggage there and have breakfast before we head into town.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9089-4/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9089-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9089-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9089-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9163/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9163-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9163-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9163-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<h2>Sight seeing in Budapest</h2>
<p>First stop is the parliament building and a first view of the Danube. It looks impressive in pictures and even more so in real life. Budapest is really 2 cities in one with Buda on one side of the river, and Pest the other side. </p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9092/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9092-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9092-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9092-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9110/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9110-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9110-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9110-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9093/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9093-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9093-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9093-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>You can cross over the chain bridge and walk up the hill to the National gallery and Castle. There are stunning views of the city from here. We spend the morning exploring and also visit The Fisherman&#8217;s Bastion. We find a cosy bagel shop in the old town for lunch.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9107/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9107-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9107-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9107-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9115/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9115-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9115-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9115-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9119/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9119-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9119-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9119-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9116/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9116-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9116-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9116-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9128/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9128-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9128-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9128-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9125/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9125-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9125-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9125-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>After lunch, it is time to cross back over the Chain bridge back into Pest and stroll through the Christmas markets to St. Stephen&#8217;s Basilica. This is a beautiful Catholic church &#8211; light a candle to remember someone special.</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9140/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9140-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9140-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9140-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9142/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9142-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9142-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9142-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9138/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9138-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9138-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9138-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9136/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9136-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9136-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9136-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9135/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9135-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9135-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9135-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9137/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9137-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9137-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9137-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>You are probably feeling it would be nice to refeshen up after all this activity, and the <a href="https://www.szechenyibath.hu/">Széchenyi Thermal Baths</a> is just the place! This is a whole complex of indoor and outdoor pools ranging from 19-38 Celcius and several dry and wet saunas. We spent a very relaxed few hours trying them all. </p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9148/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9148-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9148-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9148-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/img_9147/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9147-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9147-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9147-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>Then there is time for dinner and back to the station for our 7pm train to Bucharest. </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-300x225.jpeg" alt="timetable" width="300" height="225" class="aligncenter size-medium wp-image-38004" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9164-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Pro tip from <a href="https://www.seat61.com/" target="_blank">Man in Seat 61</a> is that your sleeper ticket gives you free access to the warm Premium lounge with free drink and food.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-300x225.jpeg" alt="lounge" width="300" height="225" class="aligncenter size-medium wp-image-38017" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9166-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>I hope you enjoyed our all too brief stay in this amazing city and we will meet you next in <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Bucharest</a>&#8230;</p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Travelling to Istanbul by train for DevFest conference – Part 3 onwards to Budapest</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference &#8211; Part 2 Travelling to Prague</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Sat, 29 Nov 2025 20:44:49 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37942</guid>

					<description><![CDATA[<p>Welcome to Prague &#8211; I am glad you could make it after all that planning. Let&#8217;s catch-up on the trip so far&#8230; Getting to Brussels The most stressful part of the journey was the taxi to the station &#8211; everyone wanted to drive through Tonbridge today. We managed to catch our backup train but it [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Travelling to Istanbul by train for DevFest conference &#8211; Part 2 Travelling to Prague</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Welcome to Prague &#8211; I am glad you could make it after <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">all that planning</a>. Let&#8217;s catch-up on the trip so far&#8230;</p>
<h2>Getting to Brussels</h2>
<p>The most stressful part of the journey was the taxi to the station &#8211; everyone wanted to drive through Tonbridge today. We managed to catch our backup train but it was too close for comfort.</p>
<p>We took a local train to London where we picked up the EuroStar from a very busy St. Pancras. We thought it was Friday traffic but the staff said it was like this most days in November and December with the holiday season. </p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_8970/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8970-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Eurostar" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8970-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8970-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_8971/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8971-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Eurostar" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8971-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8971-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>The EuroStar was on time but none of us could get the wifi to work. So time to grab a coffee, and catch-up on some reading or sleep before we arrive at Brussels for a coffee and pick up the overnight train.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-300x225.jpeg" alt="train on time" width="300" height="225" class="aligncenter size-medium wp-image-37946" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8977-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>The European Sleeper</h2>
<p>The Night Train takes us all the way to Prague via Rotterdam, Berlin, and Dresden.</p>
<p>It&#8217;s not the most modern train but it more than makes up for this in character and it&#8217;s warm and friendly. </p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_8981/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8981-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Eurosleepr train" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8981-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8981-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_8982/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8982-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Eurosleepr train inside" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8982-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8982-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_8983-2/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8983-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="Eurosleepr train carriage" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8983-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_8983-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>There is no buffet car but you can order food and drink on your phone which is brought to your carriage. I was surprised at the broad range of travellers &#8211; students, families, retirees.</p>
<p>There is no wifi but I had a strong phone signal and a steady stream of notifications from Vodafone marked the passage across borders.</p>
<p>Our carriage has 2 seats and converts into 5 beds for sleeping with fold down bunks &#8211; I think it would be a little crowded if you had 5 people in here! The type of people who take the trip are considerate and friendly.</p>
<p>There was a little noise with some young children getting off at Berlin (6.20am) but I slept really well.  Blankets and sheets are provided. </p>
<p>We ordered some coffees and ate breakfast watching the world roll by outside including a stretch following the Elbe. We arrived in Prague 30 minutes behind schedule.</p>
<p>The night train has the lowest priority on railways and both trips I have taken have arrived later. So don&#8217;t rely on a tight connection after the Night Train.</p>
<h2>Welcome to Prague</h2>
<p>Your first destination at Prague station is the left luggage lockers to deposit surplus bags. This needs a phone for pin verification to open the lockers.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-225x300.jpeg" alt="lockers at Prague" width="225" height="300" class="aligncenter size-medium wp-image-37960" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9005-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>Then it is into Prague. The city is very walkable but there are trams if you prefer. It is cold so make sure you are dressed up warm. </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-225x300.jpeg" alt="dress warm" width="225" height="300" class="aligncenter size-medium wp-image-37961" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3485-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>If you do get cold, there are lots of bars and stands at the Christmas markets selling hot drinks. There are lots of Tourists here for the Christmas experience.</p>
<p>Prague is a treasure trove of cobbled streets and we have the markets and lights to see and even an ice skating rink. There are inviting smells everywhere&#8230; </p>
<p>We walked to Wenceslas Square before heading off to explore the Old Town and the Christmas markets. Make sure you are in the main square for 3pm when the Astronomical clock strikes.</p>
<p>There are lots of concerts and events being advertised. We walked into St. Nicholas&#8217;s church which was hosting multiple performing choirs from across Europe.</p>
<p>We also walked across the Charles bridge and explored the grounds of the Castle. There is also an excellent view from there of the city. There is no shortage of places to Warm up and sample the local Czech food and cakes.</p>
<p>Here is a sample of the places we saw&#8230;</p>

<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9011/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9011-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9011-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9011-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9013/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9013-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9013-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9013-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9015/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9015-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9015-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9015-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9016/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9016-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9016-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9016-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9025/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9025-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9025-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9025-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9026/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9026-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9026-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9026-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9030/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9030-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9030-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9030-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9069/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9069-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9069-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9069-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/img_9071/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9071-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9071-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9071-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>

<p>At the end of the trip we found a beer bar called Valhalla where we sampled several Czech beers and played cards until it was time to return to the station.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-225x300.jpeg" alt="cheers" width="225" height="300" class="aligncenter size-medium wp-image-37962" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9073-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>Finally we caught our overnight train to Budapest where <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">we will next see you</a>.</p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Travelling to Istanbul by train for DevFest conference &#8211; Part 2 Travelling to Prague</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Travelling to Istanbul by train for DevFest conference &#8211; Part 1 the plan</title>
		<link>https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Fri, 28 Nov 2025 06:38:19 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37830</guid>

					<description><![CDATA[<p>This year, we decided to do something special by taking the train rather than flying to attend the DevFest conference in Istanbul. So join us on this 2,000-mile rail adventure across Europe as we follow the legendary Orient Express route&#8230; Why take the train? Our train journey is around 2,000 miles and will be taking [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Travelling to Istanbul by train for DevFest conference &#8211; Part 1 the plan</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-300x225.jpg" alt="orient express" width="300" height="225" class="aligncenter size-medium wp-image-37838" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-300x225.jpg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-1024x768.jpg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-768x576.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-1536x1152.jpg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/Orient_Express_Spoorwegmuseum-2048x1536.jpg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
This year, we decided to do something special by taking the train rather than flying to attend the <a href="https://devfest.istanbul/" target="_blank">DevFest</a> conference in Istanbul. So join us on this 2,000-mile rail adventure across Europe as we follow the legendary <a href="https://en.wikipedia.org/wiki/Orient_Express" target="_blank">Orient Express</a> route&#8230;</p>
<h2>Why take the train?</h2>
<p>Our train journey is around 2,000 miles and will be taking us 5 days. If you flew the journey would take less than a day. It would produce at least twice the pollution. </p>
<p>You would also miss out on the chance to see some of Europe&#8217;s most beautiful cities (all decorated for Christmas) and to watch Europe out of the window. We are trading speed and some convenience for less pollution and an adventure rather than just a journey.</p>
<h2>How hard was booking?</h2>
<p>There are <a href="https://www.byway.travel/destination/europe/europe-by-train" target="_blank">travel agents</a> who will book the trip for you and take care of all the details. </p>
<p>Booking a train yourself is definitely more complex than the flying option. Luckily there are lots of resources to help you including the excellent <a href="https://www.seat61.com/" target="_blank">Man In Seat 61</a> website. </p>
<p>We are travelling second class for the journey as generally there did not seem a great benefit to the extra cost of first class. There is an interrail pass which you can purchase but it does not cover all the trains. We priced it up and discounts we gained did not cover the cost in this instance.</p>
<p>For the overnight trains there are a whole host of options ranging from a seat, a bed in a shared compartment or your own private carriage. As there are 3 of us travelling together, it was cheapest to book a cabin and we get more space. If you are a woman travelling on her own, all the train services offer the option of female only cabins.</p>
<p>We found the whole process very straightforward although the <a href="https://en.wikipedia.org/wiki/Bosphorus_Express" target="_blank">Romanian trains</a> require you to use a travel agent or intermediary and collect your tickets when you arrive in Romania (🤞). </p>
<p>On a trip like this, you can set the budget and the time to suit you. So if you want a week in one city on the way, it is easy to adapt your plans.</p>
<h2>What if I miss a connection?</h2>
<p>The biggest fear most people have with a trip like this is that they will miss a train because of a delay or cancellation. No form of travel is immune to this (you may be sitting on a comfortable train reading about an IT meltdown at Heathrow grounding all flights).</p>
<p>If we miss a train, we have some fallback plans (later trains) and worst-case scenario, we have to spend some extra time in a city. The key is to allow time in your schedule so a delay is not a disaster. </p>
<h2>Our itinerary</h2>
<p>There is no direct train service so we are going to be taking multiple trains, following one of the traditional routes of the Orient Express. We will have some time for site-seeing on the way. Here&#8217;s the summary plan:-</p>
<ol>
<li>Trains to London St. Pancras, where we pick up the <a href="https://www.eurostar.com/uk-en" target="_blank">Eurostar</a> to Brussels and then the <a href="https://www.europeansleeper.eu/" target="_blank">Eurosleeper</a> to Prague. We  will have a day to look around.
</li>
<li>Overnight train from Prague to Budapest with a day in the former imperial capital.
</li>
<li>Overnight train from Budapest to Bucharest. Due to timing we will be spending the night in the city
</li>
<li>Trains through Romania and Bulgaria, taking the overnight Sophia express and arriving next morning in Istanbul.
</li>
</ol>
<h2>Your Essential Packing List</h2>
<p>Beds and sheets are provided on the overnight parts. If you need to work or communicate, all the trains have wifi and there is a buffet car for hot drinks and snacks. Remember your EU socket for the plugs and bring a light bag for our city exploration (we can leave the luggage at the station).</p>
<p>Stunning views from the trains are included as standard in this trip and you will probably spend most of your time looking out the window as we travel across Europe and through the Balkans. I am especially looking forward to my first ride through the <a href="https://en.wikipedia.org/wiki/Carpathian_Mountains" target="_blank">Carpathians</a>. So remember your camera!</p>
<p>The European Sleeper sells a deck of cards on the train which is a great way to pass the time and get to make some new friends.</p>
<p>Turkey was not one of the 51 destinations included in my Vodaphone mobile package so I purchased a virtual SIMM to use while there.</p>
<p>It may be cold so remember to bring some warm clothes and your hat and gloves.</p>
<h2>Essential reading for the train</h2>
<p>You will probably want to bring some appropriate listening or reading material for the journey &#8211; I have packed the 2 iconic books <strong>Murder on the Orient Express</strong> and <strong>Stamboul Train</strong>. The more adventurous may prefer some <a href="https://en.wikipedia.org/wiki/Count_Dracula" target="_blank">Bram Stoker</a> or prepare for our destination with anything by <a href="https://en.wikipedia.org/wiki/Orhan_Pamuk" target="_blank">Orhan Pamuk</a>.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/books-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/books-300x205.jpg" alt="Some books to read on the train" width="300" height="205" class="aligncenter size-medium wp-image-37698" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/books-300x205.jpg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/books-1024x698.jpg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/books-768x524.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/books-1536x1047.jpg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/books-2048x1396.jpg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> </p>
<h2>What should we expect in the cities?</h2>
<p>We have hit the jackpot on our stops as the European Christmas markets start this weekend. In Prague we should be able to visit the Castle, look round Wenceslas and Old Square, stroll across Charles Bridge and see the Christmas Tree Lighting ceremony. </p>
<p>In Budapest we&#8217;ll have time to stroll around both sides of the city, visit St. Stephen&#8217;s Basilica and maybe freshen up at the <a href="https://www.szechenyibath.hu/">Széchenyi Thermal Baths</a>. Remember to bring your swimming costume.</p>
<p>We will arrive in Bucharest for <a href="https://en.wikipedia.org/wiki/Great_Union_Day" target="_blank">Great Union Day</a>, which is the country&#8217;s National Holiday. So there will be lots of parades, events and yet more Christmas Markets! There is a torchlight parade at 7pm.</p>
<h2>Sit back and enjoy the ride</h2>
<p>We are now ready to set off, so get comfortable, order a drink from the buffet car and watch the world fly by our window. See you in <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2</a> where we will update you on the first leg of the trip and show you around Prague&#8230;</p>
<h2>Share the whole Orient Express journey</h2>
<p>This is part of a series of articles covering our journey from London to Istanbul by train. The whole set is:-</p>
<ol>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Part 1 &#8211; The plan</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-2-travelling-to-prague/">Part 2 &#8211; Travelling to Prague</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-3-onwards-to-budapest/">Part 3 &#8211; Onwards to Budapest</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-4-bucharest/">Part 4 &#8211; Bucharest, an unlikely holiday destination</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-5-crossing-bulgaria/">Part 5 &#8211; Crossing Bulgaria</a></li>
<li><a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-6-completing-the-orient-express/">Part 6 &#8211; Completing the Orient Express</a></li>
</ol>
<p>The post <a href="https://blog.idrsolutions.com/travelling-to-istanbul-by-train-for-devfest-conference-part-1-the-plan/">Travelling to Istanbul by train for DevFest conference &#8211; Part 1 the plan</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to add AI to the JPedal Viewer (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-add-ai-to-the-jpedal-viewer/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 27 Nov 2025 14:21:28 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[bard]]></category>
		<category><![CDATA[chat bot]]></category>
		<category><![CDATA[chat window]]></category>
		<category><![CDATA[chatgpt]]></category>
		<category><![CDATA[claude]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[grok]]></category>
		<category><![CDATA[llama]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[openai]]></category>
		<category><![CDATA[pdfgpt]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37824</guid>

					<description><![CDATA[<p>The JPedal Viewer is the best Java PDF Viewer because it so easily customizable. JPedal provides access to the underlying Swing components which allows you to extend it with custom behaviour and additional UI elements. In this tutorial, I am going to show you how to add a chat window to the Viewer which allows [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-ai-to-the-jpedal-viewer/">How to add AI to the JPedal Viewer (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">JPedal Viewer</a> is the best Java PDF Viewer because it so easily customizable.</p>
<p>JPedal provides access to the underlying Swing components which allows you to extend it with custom behaviour and additional UI elements.</p>
<p>In this tutorial, I am going to show you how to add a chat window to the Viewer which allows users to ask a large language model questions about the document they have open.</p>
<p><a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">Download a JPedal trial jar</a> to try this yourself!</p>
<p>First we need to make a chat window that can be embedded in the Viewer. I won&#8217;t write the complete source code here because it is a couple hundred lines long, but you can find the full class <a href="https://github.com/idrsolutions/pdf-ai-chat/blob/main/src/main/java/com/idrsolutions/examples/ChatPanel.java" target="_blank">here</a>.</p>
<p>The important part is that we need some kind of callback to receive the messages the user sends.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>public class ChatPanel extends JPanel {

<br />    private transient Consumer<String> sendHandler;

<br />    &#8230;

<br />    private void sendCurrentText() {<br />
        addMessage(text, true);

<br />        if (sendHandler != null) {<br />
            try {<br />
                sendHandler.accept(text);<br />
            } catch (Exception ex) {<br />
                LogWriter.warning(ex, &quot;Exception sending message: &quot; + ex.getMessage());<br />
            }<br />
        }<br />
    }

<br />}<br />
</code></pre>
<p>Now we can add this to JPedal by getting a handle to the JTabbedPane which represents the side bar in the Viewer.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final Viewer viewer = new Viewer();<br />
viewer.setupViewer();

<br />final ChatPanel chatPanel = new ChatPanel();

<br />final JTabbedPane sideTabBar = viewer.getSwingGUI().getSideTabBar();<br />
sideTabBar.addTab(&quot;AI&quot;, new ImageIcon(), chatPanel);<br />
</code></pre>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-scaled.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-scaled.png" alt="AI chat window" width="2672" height="1465" class="aligncenter size-full wp-image-37883" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-scaled.png 2672w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-300x164.png 300w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-1024x561.png 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-768x421.png 768w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-1536x842.png 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-26-at-12.28.58-2048x1123.png 2048w" sizes="auto, (max-width: 2672px) 100vw, 2672px" /></a></p>
<p>The chat window works, but it does not do anything yet so we need to add the AI capabilities.</p>
<p>Again, I won&#8217;t give the full code here (you can see it <a href="https://github.com/idrsolutions/pdf-ai-chat" target="_blank">on our GitHub</a>), but essentially we can use the callback from the chat window and pass that to the AI, along with the context from the PDF.</p>
<p>In this example, I show how to provide the text extracted from the document, and also an image of the page which some AIs may be able to use for OCR.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>chatPanel.setSendHandler(userMessage -> new Thread(() -> {<br />
        try {<br />
            final PdfDecoderInt pdfDecoder = viewer.getPdfDecoder();<br />
            final int pageNum = viewer.getSwingGUI().getValues().getCurrentPage();

<br />            // Get the text from the current page<br />
            final PdfPageData pageData = pdfDecoder.getPdfPageData();<br />
            final String pageText = pdfDecoder.getGroupingObject().extractTextInRectangle(<br />
                    pageData.getMediaBoxX(pageNum),<br />
                    pageData.getMediaBoxY(pageNum),<br />
                    pageData.getMediaBoxWidth(pageNum),<br />
                    pageData.getMediaBoxHeight(pageNum),<br />
                    pageNum,<br />
                    false, false);

<br />            // Get the image of the current page<br />
            final BufferedImage pageImage = pdfDecoder.getPageAsImage(pageNum);

<br />            final Optional<String> response = gpt.ask(userMessage, pageText, pageImage);<br />
            chatPanel.addMessage(response.orElse(&quot;&quot;), false);<br />
        } catch (Exception ex) {<br />
            chatPanel.addMessage(&quot;Error: &quot; + ex.getMessage(), false);<br />
        }<br />
}).start());<br />
</code></pre>
<p>Here is the final result!</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-scaled.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-scaled.png" alt="JPedal AI chat" width="2672" height="1465" class="aligncenter size-full wp-image-37901" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-scaled.png 2672w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-300x164.png 300w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-1024x561.png 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-768x421.png 768w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-1536x842.png 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/Screenshot-2025-11-27-at-14.10.47-2048x1123.png 2048w" sizes="auto, (max-width: 2672px) 100vw, 2672px" /></a></p>
<h2>Resources</h2>
<p>You can <a href="https://github.com/idrsolutions/pdf-ai-chat" target="_blank">find all the source code on our GitHub page</a>.</p>
<p>Find out <a href="https://blog.idrsolutions.com/category/jpedal/" target="_blank">what else you can do with JPedal</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-ai-to-the-jpedal-viewer/">How to add AI to the JPedal Viewer (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to convert PDF to SVG in Python (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-python-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 14 Nov 2025 15:19:57 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[converting pdf to svg in python]]></category>
		<category><![CDATA[pdf to svg]]></category>
		<category><![CDATA[pdf to svg converting]]></category>
		<category><![CDATA[python convert pdf to svg]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37789</guid>

					<description><![CDATA[<p>Introduction You can easily convert PDF files to SVG with Python using the BuildVu microservice. With this tutorial you will be able to use the BuildVu cloud API, which could be either: The IDRsolutions trial and cloud-based subscription service Or using your own self-hosted BuildVu microservice Although these services can be accessed using standard HTTP [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-python-tutorial/">How to convert PDF to SVG in Python (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>You can easily convert PDF files to SVG with Python using the BuildVu microservice. With this tutorial you will be able to use the BuildVu cloud API, which could be either:</p>
<ul>
<li>The IDRsolutions trial and cloud-based subscription service</li>
<li>Or using your own <a href="https://github.com/idrsolutions/buildvu-microservice-example/">self-hosted BuildVu microservice</a></li>
</ul>
<p>Although these services can be accessed using standard HTTP requests, this tutorial uses our open-source <a href="https://github.com/idrsolutions/idrsolutions-python-client">Python IDRCloudClient</a>, which offers a straightforward Python wrapper for the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md">REST API</a>.</p>
<h2>Why SVGs are better for Python</h2>
<p>SVGs can be directly rendered in web frameworks like Flask or Django, allowing seamless integration with frontend technologies and interactive dashboards. </p>
<p>Since SVGs are text-based XML, they are simple to manipulate programmatically with Python scripts, while PDFs require more complex parsing and offer less flexibility for dynamic or interactive web content.</p>
<h2>Prerequisites</h2>
<p>You can install the <a href="https://pypi.org/project/idrcloudclient/">IDRCloudClient package</a> via pip by running the following command:</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'>pip install IDRCloudClient<br />
</code></pre>
<p>&nbsp;</p>
<h2>Code Example</h2>
<p>Below is a simple code example for converting PDF files to SVG. Details on configuration options and advanced features are provided afterward.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'><pre>
from IDRSolutions import IDRCloudClient

client = IDRCloudClient('https://cloud.idrsolutions.com/cloud/' + IDRCloudClient.BUILDVU)

try:
    result = client.convert(
        # token='Token', # Required only when connecting to the IDRsolutions trial and cloud subscription service
        input=IDRCloudClient.UPLOAD, 
        file='/path/to/exampleFile.pdf'
    )
    outputURL = result['downloadUrl']

    client.downloadResult(result, 'path/to/output/dir')

    if outputURL is not None:
        print(&quot;Download URL: &quot; + outputURL)

except Exception as error:
    print(error)
</pre>

<br /></code></pre></p>
<p>&nbsp;</p>
<h2>Return result to a callback URL</h2>
<p>The BuildVu Microservice allows you to specify a callback URL to receive the conversion <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md#conversion-status">status</a> after processing is finished. This approach eliminates the need to keep polling the service to check for completion. Simply include the callback URL in the parameters when calling the convert method, as shown in the following example.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'><pre>
result = client.convert(
    # token='Token', # Required only when connecting to the IDRsolutions trial and cloud subscription service
    input=IDRCloudClient.UPLOAD,
    callbackUrl='http://listener.url',
    file='/path/to/exampleFile.pdf'
)
</pre>

<br /></code></pre>
<p>&nbsp;</p>
<h2>Configuration Options</h2>
<p>The BuildVu API accepts a stringified JSON object containing key value pair configuration options to customise your conversion. The settings should be provided to the convert method. A full list of the configuration options to convert PDF files to HTML or SVG can be found <a href="https://www.idrsolutions.com/docs/buildvu/settings/">here</a>.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'><pre>
settings='{&quot;key&quot;:&quot;value&quot;,&quot;key&quot;:&quot;value&quot;}'
</pre>

<br /></code></pre><br />
&nbsp;</p>
<h2>Upload by URL</h2>
<p>In addition to uploading a local file, you can specify a URL for the BuildVu Microservice to fetch and convert. To do this, update the input and file parameters in the convert method as shown below.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'><pre>
input=IDRCloudClient.DOWNLOAD
url='http://exampleURL/exampleFile.pdf'
</pre>

<br /></code></pre><br />
&nbsp;</p>
<h2>Using Authentication</h2>
<p>If you have set up your own BuildVu Microservice and it requires authentication for PDF to HTML or SVG conversions, you must supply your username and password with every request. This is done by passing an auth variable to the convert method, as shown below.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-python'><pre>
auth=('username', 'password'))
</pre>

<br /></code></pre></p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-python-tutorial/">How to convert PDF to SVG in Python (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to convert PDF to SVG in Javascript (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-javascript-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 14 Nov 2025 15:19:50 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[convert pdf to svg]]></category>
		<category><![CDATA[converting pdf to svg javascript]]></category>
		<category><![CDATA[pdf to svg]]></category>
		<category><![CDATA[pdf to svg javascript]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37799</guid>

					<description><![CDATA[<p>Introduction This tutorial explains how to convert PDF files to SVG in Javascript using the hosted BuildVu Cloud API, including examples such as: The IDRsolutions trial or cloud subscription service Your own self-hosted BuildVu microservice instance Although the above services can be accessed using standard HTTP requests, this tutorial uses our open-source JavaScript IDRCloudClient, which [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-javascript-tutorial/">How to convert PDF to SVG in Javascript (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>This tutorial explains how to convert PDF files to SVG in Javascript using the hosted BuildVu Cloud API, including examples such as:</p>
<ul>
<li>The IDRsolutions trial or cloud subscription service</li>
<li>Your own <a href="https://github.com/idrsolutions/buildvu-microservice-example/">self-hosted BuildVu microservice instance</a></li>
</ul>
<p>Although the above services can be accessed using standard HTTP requests, this tutorial uses our open-source <a href="https://github.com/idrsolutions/idrsolutions-js-client">JavaScript IDRCloudClient</a>, which offers a straightforward JavaScript wrapper for the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md">REST API</a>.</p>
<h2>Why SVGs Work Better with JavaScript</h2>
<p>SVGs are better for JavaScript developers than PDFs for display because SVG files are native to the web, scalable without loss of quality, and can be easily styled or animated with JavaScript and CSS. </p>
<p>Developers can embed SVG directly into HTML, customize it dynamically, and create interactive or responsive graphics, while PDFs are less flexible, mainly intended for print or document preservation and not directly manipulated in-browser. </p>
<h2>Prerequisites</h2>
<p>To add the client to your project, include the file idrcloudclient.js and add the following line to enable access to it:</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
&lt;script src=&quot;path/to/idrcloudclient.js&quot; type=&quot;text/javascript&quot;</script>&gt;
</pre>

<br /></code></pre>
<h2>Code Example</h2>
<p>Below is a simple code example showing how to convert PDF files to SVG. Additional configuration options and advanced features are detailed later in this guide.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
var endpoint = 'https://cloud.idrsolutions.com/cloud/' + IDRCloudClient.BUILDVU;
var parameters =  { 
    //token: 'Token', //Required only when connecting to the IDRsolutions trial and cloud subscription service
    input: IDRCloudClient.UPLOAD,
    file: 'path/to/exampleFile.pdf'
}

function progressListener(e) {
    console.log(JSON.stringify(e));
}

function failureListener(e) {
    console.log(e);
    console.log('Failed!');
}

function successListener(e) {
    console.log(JSON.stringify(e));
    console.log('Download URL: ' + e.downloadUrl);
}

IDRCloudClient.convert({
    endpoint: endpoint,
    parameters: parameters,
    
    // The below are the available listeners
    progress: progressListener,
    success: successListener,
    failure: failureListener
});
</pre>

<br /></code></pre></p>
<p>You can find an example that uses the JavaScript client <a href="https://files.idrsolutions.com/js-trial-client/buildvu/">here</a>.</p>
<h2>Return result to a callback URL</h2>
<p>The BuildVu Microservice accepts a callback url to send the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md#conversion-status">status</a> of a conversion on completion. Using a callback url removes the need to poll the service to determine when the conversion is complete.</p>
<p>The callback url can be provided to the parameters variable as shown below.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
var parameters =  {
    //token: 'Token', //Required only when connecting to the IDRsolutions trial and cloud subscription service
    input: IDRCloudClient.UPLOAD,
    callbackUrl: 'http://listener.url',
    file: 'path/to/exampleFile.pdf'
}
</pre>

<br /></code></pre>
<h2>Configuration Options</h2>
<p>The BuildVu API accepts a stringified JSON object with key-value pair configuration options to customize your conversion. These settings should be included in the parameters array. A complete list of configuration options for converting PDF files to SVG is available <a href="https://www.idrsolutions.com/docs/buildvu/settings/">here</a>.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
settings: '{&quot;key&quot;:&quot;value&quot;,&quot;key&quot;:&quot;value&quot;}'
</pre>

<br /></code></pre>
<h2>Upload by URL</h2>
<p>In addition to uploading a local file, you can also provide a URL for the BuildVu Microservice to download and convert. To do this, replace the input and file values in the parameters variable with the following:<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
input: IDRCloudClient.DOWNLOAD
url: 'http://exampleURL/exampleFile.pdf'
</pre>

<br /></code></pre></p>
<h2>Using Authentication</h2>
<p>If your deployed BuildVu Microservice requires authentication to convert PDF files to SVG, you must include a username and password with each conversion request. These credentials are passed as username and password variables to the convert method, as shown below.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-javascript'><pre>
username: 'username',
password: 'password',
</pre>

<br /></code></pre>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-javascript-tutorial/">How to convert PDF to SVG in Javascript (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to convert PDF to SVG in C# (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-c-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 14 Nov 2025 15:19:43 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[c# converting pdf to svg]]></category>
		<category><![CDATA[convert pdf to svg c#]]></category>
		<category><![CDATA[pdf to svg convert]]></category>
		<category><![CDATA[pdf to svg in c#]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37808</guid>

					<description><![CDATA[<p>Introduction This tutorial explains how to convert PDF files to SVG in C# using the hosted BuildVu Cloud API, including examples such as: The IDRsolutions trial version or cloud subscription A self-hosted BuildVu microservice instance Although the above services can be accessed via standard HTTP requests, this tutorial uses our open-source C# IDRCloudClient, which offers [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-c-tutorial/">How to convert PDF to SVG in C# (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>This tutorial explains how to convert PDF files to SVG in C# using the hosted BuildVu Cloud API, including examples such as:</p>
<ul>
<li>The IDRsolutions trial version or cloud subscription</li>
<li>A <a href="https://github.com/idrsolutions/buildvu-microservice-example/">self-hosted BuildVu microservice</a> instance</li>
</ul>
<p>Although the above services can be accessed via standard HTTP requests, this tutorial uses our open-source <a href="https://github.com/idrsolutions/idrsolutions-csharp-client">C# IDRCloudClient</a>, which offers an easy-to-use C# wrapper for the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md">REST API</a>.</p>
<h2>Prerequisites</h2>
<p>Install the <a href="https://www.nuget.org/packages/idrsolutions-csharp-client/">idrsolutions-csharp-client package</a> via NuGet using the following command:<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
nuget install idrsolutions-csharp-client
</pre>

<br /></code></pre></p>
<h2>Code Example</h2>
<p>Below is a simple code example demonstrating how to convert PDF files to SVG. Additional configuration options and advanced features are described further down.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
using System;
using System.Collections.Generic;
using idrsolutions_csharp_client;

class ExampleUsage
{
    static void Main(string[] args)
    {
        
        var client = new IDRCloudClient(&quot;https://cloud.idrsolutions.com/cloud/&quot; + IDRCloudClient.BUILDVU);

        try
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>
            { 
                //[&quot;token&quot;] = &quot;Token&quot;, //Required only when connecting to the IDRsolutions trial and cloud subscription service
                [&quot;input&quot;] = IDRCloudClient.UPLOAD,
                [&quot;file&quot;] = &quot;path/to/input.pdf&quot;
            };

            Dictionary<string, string> results = client.Convert(parameters);

            String outputUrl = results.GetValueOrDefault(&quot;downloadUrl&quot;, &quot;No download URL provided&quot;);
            
            client.DownloadResult(results, &quot;path/to/output/dir&quot;);

            Console.WriteLine(&quot;Converted: &quot; + outputUrl);
        }
        catch (Exception e)
        {
            Console.WriteLine(&quot;Conversion failed: &quot; + e.Message);
        }
    }
}
</pre>

<br /></code></pre>
<h2>Return result to a callback URL</h2>
<p>The BuildVu Microservice can accept a callback URL to report the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md#conversion-status">status</a> of a conversion once it is complete. Using a callback URL eliminates the need to poll the service to check when the conversion has finished. You can provide the callback URL to the convert method as shown below.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
Dictionary<string, string> parameters = new Dictionary<string, string>
{ 
    //[&quot;token&quot;] = &quot;Token&quot;, //Required only when connecting to the IDRsolutions trial and cloud subscription service
    [&quot;callbackUrl&quot;] = &quot;http://listener.url&quot;,
    [&quot;input&quot;] = IDRCloudClient.UPLOAD,
    [&quot;file&quot;] = &quot;path/to/input.pdf&quot;
};
</pre>

<br /></code></pre>
<h2>Configuration Options</h2>
<p>The BuildVu API accepts a stringified JSON object with key-value pair configuration options to customize your conversion. These settings should be included in the parameters array. A complete list of configuration options for converting PDF files to SVG is available <a href="https://www.idrsolutions.com/docs/buildvu/settings/">here</a>.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
[&quot;settings&quot;] = &quot;{\&quot;key\&quot;:\&quot;value\&quot;,\&quot;key\&quot;:\&quot;value\&quot;}&quot;
</pre>

<br /></code></pre>
<h2>Upload by URL</h2>
<p>In addition to uploading a local file, you can provide a URL for the BuildVu Microservice to download and convert. To do this, replace the input and file values in the parameters variable with the following.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
[&quot;input&quot;] = IDRCloudClient.DOWNLOAD
[&quot;url&quot;] = &quot;http://exampleURL/exampleFile.pdf&quot;
</pre>

<br /></code></pre></p>
<h2>Using Authentication</h2>
<p>If your self-hosted BuildVu Microservice requires a username and password to convert PDF files to SVG, you must include them with each conversion request. These credentials are passed as username and password variables to the convert method, as shown below.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-c#'><pre>
var client = new IDRCloudClient(&quot;http://exampleURL.com/&quot; + IDRCloudClient.BUILDVU, &quot;username&quot;, &quot;password&quot;);
</pre>

<br /></code></pre>
<p>The post <a href="https://blog.idrsolutions.com/how-to-convert-pdf-to-svg-in-c-tutorial/">How to convert PDF to SVG in C# (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How we use dogfooding at IDRsolutions</title>
		<link>https://blog.idrsolutions.com/how-we-use-dogfooding-at-idrsolutions/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Tue, 11 Nov 2025 15:51:14 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[idrsolutions]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apex]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[buildvu]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[microservice]]></category>
		<category><![CDATA[pipeline]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[tomcat]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37649</guid>

					<description><![CDATA[<p>At IDRsolutions, we eat our own dog food! We have weekly and monthly analytics reports that help us keep track of our KPIs, and we like to save a copy of these each time they are generated. These reports come from Looker Studio, however we prefer to use Basecamp as our single source of truth [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-we-use-dogfooding-at-idrsolutions/">How we use dogfooding at IDRsolutions</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-scaled.jpg" alt="dogfooding" width="4986" height="3420" class="aligncenter size-full wp-image-37770" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-scaled.jpg 4986w, https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-300x206.jpg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-1024x702.jpg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-768x527.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-1536x1054.jpg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/pexels-bill-emrich-64742-230785-2048x1405.jpg 2048w" sizes="auto, (max-width: 4986px) 100vw, 4986px" /></p>
<p>At IDRsolutions, we <a href="https://en.wikipedia.org/wiki/Eating_your_own_dog_food" target="_blank">eat our own dog food</a>!</p>
<p>We have weekly and monthly analytics reports that help us keep track of our KPIs, and we like to save a copy of these each time they are generated. These reports come from Looker Studio, however we prefer to use Basecamp as our <a href="https://en.wikipedia.org/wiki/Single_source_of_truth" target="_blank">single source of truth</a> so ideally, the reports should be archived somewhere, then made available on Basecamp.</p>
<p>Up until recently, we had a manual task for somebody to login to Looker Studio, download the PDF, and upload it to Basecamp. So we did what developers do best, and automated the whole process!</p>
<p>Looker Studio has a scheduling system where it will email a PDF generated from the report at regular intervals. We enabled this so that we could receive the report PDF in Salesforce where we have an Apex trigger to detect it, which then allows us to use our <a href="https://www.idrsolutions.com/buildvu/" target="_blank">PDF to HTML converter BuildVu</a>, to convert and store the file.</p>
<p>Using techniques described in <a href="https://www.apexhours.com/governor-friendly-asynchronous-processing-from-triggers/" target="_blank">this article</a>, we pick up the PDF as it arrives in Salesforce:</p>
<pre class='line-numbers' ><code class='language-java'>// Whenever a new file arrives on Salesforce, filter it to see if it is the weekly report PDF.

<br />EmailMessage emailMessage = [SELECT Id, Subject, FromAddress, ParentId FROM EmailMessage WHERE Id = :contentDocumentLink.LinkedEntityId LIMIT 1];<br />
if (emailMessage == null || !emailMessage.Subject.contains(&#8216;Weekly Report&#8217;) || emailMessage.FromAddress != &#8216;looker-studio-noreply@google.com&#8217;) {<br />
    continue;<br />
}

<br />ContentDocument contentDocument = [SELECT Id, FileExtension FROM ContentDocument WHERE Id = :contentDocumentLink.ContentDocumentId LIMIT 1];<br />
if (contentDocument == null || contentDocument.FileExtension.toLowerCase() != &#8216;pdf&#8217;) {<br />
    continue;<br />
}<br />
</code></pre>
<p>Then we send it to our internal <a href="https://www.idrsolutions.com/docs/buildvu/tutorials/cloud/app-server/deploy-buildvu-with-tomcat" target="_blank">microservice running BuildVu</a> where the PDF is converted to HTML and a link to the conversion is posted on Basecamp:</p>
<pre class='line-numbers' ><code class='language-java'>@future(callout = true)<br />
public static void postWeeklyReport(String pdfUrl) {

<br />    // Post to storage<br />
    HttpResponse response = Utils.executePOSTRequest(&#8216;callout:IDRstorage/buildvu&#8217;, &#8216;input=download&#038;settings={&quot;org.jpedal.pdf2html.originalFileName&quot;:&quot;&#8216; + EncodingUtil.urlEncode(name, &#8216;UTF-8&#8217;) + &#8216;&quot;}&#038;url=&#8217; + EncodingUtil.urlEncode(pdfUrl, &#8216;UTF-8&#8217;));

<br />    String uuid = Utils.getValue(response.getBody(), &#8216;uuid&#8217;);

<br />    // Post to Basecamp<br />
    Utils.executePOSTRequest(&#8216;https://3.basecampapi.com/&#8217; + accountId + &#8216;/buckets/123456/message_boards/12345678/messages.json&#8217;,<br />
        &#8216;{&quot;subject&quot;:&quot;Weekly Report &#8211; &#8216; + currentDay + &#8216; &#8216; + currentMonth<br />
                + &#8216;&quot;,&quot;content&quot;:&quot;&lt;div&gt;&lt;a href=\\\&quot;https://idrstorage.idrsolutions.com/view?id=&#8217; + uuid + &#8216;\\\&quot;&gt;IDRstorage&lt;/a&gt;&lt;/div&gt;&quot;,&quot;status&quot;:&quot;active&quot;,&quot;category_id&quot;:&quot;12345678&#8243;}&#8217;);<br />
}<br />
</code></pre>
<p>Dogfooding the latest builds of BuildVu has surfaced multiple product enhancements that wouldn&#8217;t have emerged without firsthand use.</p>
<h2>Download BuildVu</h2>
<p>Download a <a href="https://www.idrsolutions.com/buildvu/your-trial" target="_blank">BuildVu trial jar</a> so you can add a clean, modern PDF to HTML converter to your document processing pipeline.</p>
<h2>Resources</h2>
<p>Learn more about how the <a href="https://www.idrsolutions.com/docs/buildvu/tutorials/cloud/languages/access-buildvu-using-curl" target="_blank">BuildVu API</a> works.</p>
<p>Curious to learn more about <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">how PDF files work</a>?</p>
<p>The post <a href="https://blog.idrsolutions.com/how-we-use-dogfooding-at-idrsolutions/">How we use dogfooding at IDRsolutions</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IDRsolutions: A DevFest Introspective</title>
		<link>https://blog.idrsolutions.com/idrsolutions-a-devfest-introspective/</link>
		
		<dc:creator><![CDATA[Nadir]]></dc:creator>
		<pubDate>Mon, 10 Nov 2025 16:39:51 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[devfest]]></category>
		<category><![CDATA[devfest istanbul]]></category>
		<category><![CDATA[istanbul]]></category>
		<category><![CDATA[software conference]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37516</guid>

					<description><![CDATA[<p>For more than a decade GDG Istanbul has held a special place in the story of IDRsolutions. What began as a single visit to connect with like-minded developers has evolved into an annual tradition that reflects our commitment to collaboration and community engagement. How it all began In 2013 in San Francisco, 2 shy Turkish [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/idrsolutions-a-devfest-introspective/">IDRsolutions: A DevFest Introspective</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>For more than a decade <a href="https://devfest.istanbul/">GDG Istanbul</a> has held a special place in the story of IDRsolutions. What began as a single visit to connect with like-minded developers has evolved into an annual tradition that reflects our commitment to collaboration and community engagement.</p>
<h2>How it all began</h2>
<p>In 2013 in San Francisco, 2 shy Turkish developers (<a href="https://www.linkedin.com/in/nilaycskn/">Nilay Coskun</a> and <a href="https://www.linkedin.com/in/muratyener/">Murat Yener</a>) made their way round all the stands at the JavaOne Conference looking for speakers for the new DevFest conference they were trying to start in Istanbul.</p>
<p>From our stand, Mark watched them gallantly take rejection from stand after stand and overheard their pitch. They finally arrived on the IDRsolutions stand and before they even had a chance to speak, Mark said &#8220;I am free then. I would love to be involved if you would like to invite me&#8221;.</p>
<p>They looked slightly bewildered and said &#8220;But we don&#8217;t even have a date yet&#8221;.</p>
<p>Mark continued &#8220;The 2 great passions in my life are IT and  History. I love sharing my passion for software development and I have never had the chance to visit the city and see all the sites I studied as part of my Mediaeval History course. So whatever the date it is, I will be there if you would like to invite me&#8221;</p>
<p>And so it all began&#8230;.</p>
<h2>The Spirit of DevFest</h2>
<p>DevFest Istanbul isn’t your typical tech conference. It’s a place where developers, engineers, students, and tech enthusiasts meet to share ideas and learn from each other.</p>
<p>What makes it great is the open and curious atmosphere. People genuinely want to explore new things and push limits together. That’s something we really connect with, because we believe progress starts with open minds and candid conversations.</p>
<h2>Engaging with the Developer Community</h2>
<p>Every year, DevFest offers us the chance to engage directly with a diverse audience which includes students taking their first steps into the industry to veterans tackling complex challenges. </p>
<p>These conversations not only keep us grounded in the realities of software development but also help understand how our tools can better serve those building the next generation of applications.</p>
<p>Listening to the community remains one of the most valuable parts of our DevFest experience.</p>
<h2>Delivering Technical Talks</h2>
<p>Our technical talks at DevFest are designed to be more than guides. We aim to share problems developers face with PDFs and how we are solving these problems, using the latest development tools.<br />
&nbsp;<br />
<a href="https://blog.idrsolutions.com/app/uploads/2025/11/2023.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/2023.jpg" alt="" width="367" height="460" class="aligncenter size-full wp-image-37598" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/2023.jpg 367w, https://blog.idrsolutions.com/app/uploads/2025/11/2023-239x300.jpg 239w" sizes="auto, (max-width: 367px) 100vw, 367px" /></a><br />
Through these sessions, we showcase what we have built but also learn how others approach similar problems. The dialogue that follows is what makes each talk worthwhile.</p>
<p>Since we have been returning to DevFest Istanbul for so many years, we have a <a href="https://www.linkedin.com/posts/idrsolutions_chika-emebo-mark-stephens-how-to-display-activity-7386359717377527808-gZNO?utm_source=share&#038;utm_medium=member_desktop&#038;rcm=ACoAACzfWOIBQP1gQ-AHDoObhjiEYQI7FpNNBc8">collection of talks</a> from the past which you can watch to get an idea of what to expect.</p>
<h2>Empowering New Hires</h2>
<p>DevFest is also an important part of our internal culture. New hires at IDR Solutions are encouraged to join us in Istanbul as part of their professional growth. </p>
<p>For many, it’s their first experience at a large-scale tech event and a chance to engage with ideas beyond the confines of day-to-day work. It also gives placement students opportunities to contribute fresh perspectives, enriching our team with <a href="https://blog.idrsolutions.com/worlds-collide-generational-diversity-is-your-superpower/">generational diversity</a>.<br />
&nbsp;<br />
<a href="https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024-913x1024.jpg" alt="" width="913" height="1024" class="aligncenter size-large wp-image-37604" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024-913x1024.jpg 913w, https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024-267x300.jpg 267w, https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024-768x861.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/devfest-2024.jpg 1167w" sizes="auto, (max-width: 913px) 100vw, 913px" /></a></p>
<p>This exposure fosters both technical curiosity and confidence and has been an important aspect of our <a href="https://blog.idrsolutions.com/top-strategies-for-employee-retention/">retention strategy</a> over the years.</p>
<h2>Beyond the Conference</h2>
<p>While DevFest itself is a highlight, the city of Istanbul adds another layer to the experience. Between sessions, our team takes time to explore its rich history, architecture, and cuisine.</p>
<p>Besides, it&#8217;s not every day that you see <em>cats in the streets, cats in the shops and cats in every other place you can possibly imagine!</em> Be wary though, they only accept the highest quality food or you are simply not worthy&#8230;</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/cat.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/cat.jpg" alt="" width="612" height="408" class="aligncenter size-full wp-image-37601" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/cat.jpg 612w, https://blog.idrsolutions.com/app/uploads/2025/11/cat-300x200.jpg 300w" sizes="auto, (max-width: 612px) 100vw, 612px" /></a></p>
<p>These shared moments away from the conference hall <a href="https://blog.idrsolutions.com/team-building-through-work-activities/">strengthen our team spirit</a> and remind us that creativity thrives when you step outside the familiar.</p>
<p>We&#8217;re looking to continue tradition and visit to the Turkish Bath house, Hürrem Sultan Hamamı for the <a href="https://blog.idrsolutions.com/experience-the-best-2-hours-of-your-life-in-istanbul/">best 2 hours of our life!</a>. A definite highlight is joining fellow <a href="https://devfest.istanbul/speakers">Speakers</a> (new and old) on the Speaker&#8217;s tour of the hotspots in Istanbul.</p>
<h2>The journey is part of the adventure</h2>
<p>This year, Mark has decided to travel in style and <a href="https://blog.idrsolutions.com/riding-the-orient-express-to-devfest-istanbul/">will be taking the &#8216;Orient Express&#8217;</a>, which will not only help reduce our <a href="https://files.idrsolutions.com/Examples/IDRViewer/IDR_Carbon_Footprint_Report/index.html?page=1">carbon output</a> but also give an opportunity to experience hotspots like Brussels, Budapest, Vienna and Bucharest. </p>
<p>It&#8217;s a 5 day journey so he has obtained some suitable reading material from his favourite Indy bookshop.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/books-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/books-300x205.jpg" alt="Some books to read on the train" width="300" height="205" class="aligncenter size-medium wp-image-37698" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/books-300x205.jpg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/books-1024x698.jpg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/books-768x524.jpg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/books-1536x1047.jpg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/books-2048x1396.jpg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>Conclusion</h2>
<p>DevFest Istanbul is one of our favourite conferences and we aim to return for a long time to come. It is not just the excellent talks, the beauty of Istanbul or the sense of being part of a movement, what makes this conference special are the people!</p>
<p>The post <a href="https://blog.idrsolutions.com/idrsolutions-a-devfest-introspective/">IDRsolutions: A DevFest Introspective</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>7 things to do while you are attending DevFest Istanbul</title>
		<link>https://blog.idrsolutions.com/7-things-to-do-while-you-are-attending-devfest-istanbul/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Mon, 10 Nov 2025 15:42:06 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37739</guid>

					<description><![CDATA[<p>If you are attending DevFest Istanbul on Sunday 7th December 2025, you are guaranteed a great time! It&#8217;s an amazingly friendly event, with lots of speakers to hear and stands to visit (remember to drop by the IDRsolutions stand and grab your free stickers). But you are also in Istanbul &#8211; the capital city of [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/7-things-to-do-while-you-are-attending-devfest-istanbul/">7 things to do while you are attending DevFest Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you are attending <a href="https://devfest.istanbul/">DevFest Istanbul</a> on Sunday 7th December 2025, you are guaranteed a great time! It&#8217;s an amazingly friendly event, with lots of speakers to hear and stands to visit (remember to drop by the IDRsolutions stand and grab your free stickers).</p>
<p>But you are also in Istanbul &#8211; the capital city of the world for much of its history (and still considered unrivalled by many). So set aside some extra time and arrive early to enjoy the city. Here are 7 ideas from us to do as well as attend the event.</p>
<h2>1. Shop in the Egyptian Bazaar</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-225x300.jpeg" alt="Egyptian Bazaar" width="225" height="300" class="aligncenter size-medium wp-image-37740" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/bazaar-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a><br />
You could all too easily get lost in this huge, covered maze of shops. It is full of sights, sounds and smells to dazzle the senses and a great place to get some unique presents. </p>
<h2>2. Cruise along the Bosphorus</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/cruise-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/cruise-300x225.jpeg" alt="cruise" width="300" height="225" class="aligncenter size-medium wp-image-37751" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/cruise-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/cruise-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/cruise-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/cruise-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/cruise-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
One of the best ways to see the city is from the water. Get comfortable and enjoy the ride.</p>
<h2>3. Descend into the underground Cistern</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/cistern-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/cistern-225x300.jpeg" alt="cistern" width="225" height="300" class="aligncenter size-medium wp-image-37741" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/cistern-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/cistern-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/cistern-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/cistern-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a><br />
Built originally as a Mediaeval water store for the city, the Basilica Cistern was rediscovered in the 16th Century. It has been used as a location in the James Bond film &#8216;From Russia with Love&#8217; and is now restored and lit up. Walk round its 336 columns but watch out for the Medusa&#8217;s head.</p>
<h2>4. Get your photo at Topkapi Palace</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/topaki-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/topaki-300x225.jpeg" alt="topaki" width="300" height="225" class="aligncenter size-medium wp-image-37742" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/topaki-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/topaki-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/topaki-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/topaki-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/topaki-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
There are lots of stunning views to see and take photos so remember your camera. This is the speakers tour at the Topkapi Palace &#8211; the Sultan obviously has the best views from his residence.</p>
<h2>5. Walk along the seafront at Night</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-300x225.jpeg" alt="night" width="300" height="225" class="aligncenter size-medium wp-image-37743" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/sea-night-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Istanbul is always buzzing and spectacular, especially at night. Walk along the seafront and take in the light show.</p>
<h2>6. Visit Troy</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-262x300.jpeg" alt="trojan horse" width="262" height="300" class="aligncenter size-medium wp-image-37700" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-262x300.jpeg 262w, https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-895x1024.jpeg 895w, https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-768x879.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-1342x1536.jpeg 1342w, https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse-1789x2048.jpeg 1789w, https://blog.idrsolutions.com/app/uploads/2025/11/trojan-horse.jpeg 1826w" sizes="auto, (max-width: 262px) 100vw, 262px" /></a><br />
It&#8217;s a full day trip which takes you along the Bosphorus and you also sail across the Hellespont. It&#8217;s the mythical city of Homer&#8217;s Iliad (the original blockbuster) and you can really imagine Brad Pitt&#8217;s Achilles walking on the same ground. It&#8217;s also a real place and the birthplace of Archaeology.  </p>
<h2>7. Say hello to the cats</h2>
<p>
<a href='https://blog.idrsolutions.com/7-things-to-do-while-you-are-attending-devfest-istanbul/cats-2/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/cats-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/cats-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/cats-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<a href='https://blog.idrsolutions.com/7-things-to-do-while-you-are-attending-devfest-istanbul/art/'><img loading="lazy" decoding="async" width="150" height="150" src="https://blog.idrsolutions.com/app/uploads/2025/11/art-150x150.jpeg" class="attachment-thumbnail size-thumbnail" alt="cats" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/art-150x150.jpeg 150w, https://blog.idrsolutions.com/app/uploads/2025/11/art-120x120.jpeg 120w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>
<br />
Istanbul is home to a large number of cats. You can&#8217;t miss them so introduce yourself.</p>
<p>The post <a href="https://blog.idrsolutions.com/7-things-to-do-while-you-are-attending-devfest-istanbul/">7 things to do while you are attending DevFest Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How history suggests the AI revolution will play out&#8230;</title>
		<link>https://blog.idrsolutions.com/how-history-suggests-the-ai-revolution-will-play-out/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 15:58:13 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37715</guid>

					<description><![CDATA[<p>What can the old-fashioned printing press teach us about AI? More than you might think&#8230; How History might show the future Yesterday, I was lucky enough to attend the TURING x SYSTM Growth Summit. All the talks were brilliant, and choosing your favourite is like choosing your favourite child. But as a History graduate, the [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-history-suggests-the-ai-revolution-will-play-out/">How history suggests the AI revolution will play out&#8230;</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>What can the old-fashioned printing press teach us about AI? More than you might think&#8230;</p>
<h2>How History might show the future</h2>
<p>Yesterday, I was lucky enough to attend the <a href="https://turingfest.com/turingxsystm/" target="_blank">TURING x SYSTM Growth Summit</a>. All the talks were brilliant, and choosing your favourite is like choosing your favourite child. </p>
<p>But as a History graduate, the one which struck a real chord with me was Matt Learner&#8217;s look at how previous revolutions have played out, and what this might look like with the AI revolution. History never repeats but it often rhymes.</p>
<p>The talk looked at comparable technological revolutions and Matt focussed on the invention of Printing and the Internet. Both have followed 4 specific phases.</p>
<h2>A revolution in 4 stages</h2>
<p>The revolution starts with <strong>infrastructure</strong>, which is initially <strong>applied to existing practices</strong> before <strong>enabling radical new ideas</strong> and <strong>business models</strong>. </p>
<p>For example, the print revolution began with Gutenberg trying to produce bibles faster and cheaper, and eventually led to modern innovations like on-demand printing of Pokemon cards.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/printing-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/printing-300x225.jpeg" alt="print revolution" width="300" height="225" class="aligncenter size-medium wp-image-37716" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/printing-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/printing-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/printing-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/printing-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/printing-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>The internet followed the same pattern: starting with laying cables and protocols (infrastructure), then digitizing existing media like newspapers (application to existing models), followed by social networks and user-generated content (radical new ideas), and finally subscription services and the creator economy (new business models).</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/internet-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/internet-300x225.jpeg" alt="internet revolution" width="300" height="225" class="aligncenter size-medium wp-image-37717" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/internet-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/internet-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/internet-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/internet-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/internet-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Matt then applied this same framework to where we are with AI today.</p>
<h2>Lessons for the AI era</h2>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/ai-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/ai-300x225.jpeg" alt="AI revolution phases diagram" width="300" height="225" class="aligncenter size-medium wp-image-37719" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/ai-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/ai-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/ai-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/ai-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/ai-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Judging by the soaring valuation of Nvidia stock, we are still at phase one. So the key thing we need to do is spot what has changed and which constraints no longer apply. For instance, AI removes the constraint that quality content requires human expertise and time—anyone can now generate professional-level writing, images, or code in seconds.</p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/constraint-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/constraint-300x225.jpeg" alt="constraints" width="300" height="225" class="aligncenter size-medium wp-image-37720" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/constraint-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/constraint-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/constraint-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/constraint-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/constraint-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>What does it all mean?</h2>
<p>We&#8217;re at the infrastructure stage, watching the foundations being laid. The big opportunities won&#8217;t come from better AI models—they&#8217;ll come from figuring out which impossible things are now possible.</p>
<p>Figure that out and you could have the next Unicorn&#8230;</p>
<p>The post <a href="https://blog.idrsolutions.com/how-history-suggests-the-ai-revolution-will-play-out/">How history suggests the AI revolution will play out&#8230;</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Working with Images in Java</title>
		<link>https://blog.idrsolutions.com/working-with-images-in-java/</link>
		
		<dc:creator><![CDATA[Amy Pearson]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 14:32:43 +0000</pubDate>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DICOM]]></category>
		<category><![CDATA[EMF]]></category>
		<category><![CDATA[GIF]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[HEIC]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDeli]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[JPEG2000]]></category>
		<category><![CDATA[JPEGXL]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[PSD]]></category>
		<category><![CDATA[SGI]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[TIFF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WebP]]></category>
		<category><![CDATA[WMF]]></category>
		<category><![CDATA[images java developer]]></category>
		<category><![CDATA[java image library]]></category>
		<category><![CDATA[java image manipulation]]></category>
		<category><![CDATA[java image processing]]></category>
		<category><![CDATA[java tutorials]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37620</guid>

					<description><![CDATA[<p>Java developers working with Image files have limited options. Since starting the company in 1999, we’ve been frustrated by the limited options available for image handling in Java. Libraries like ImageIO often fell short, with restricted format support and occasional JVM crashes, making pure Java workflows difficult to maintain. Which is why in 2015, we [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/working-with-images-in-java/">Working with Images in Java</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Java developers working with Image files have limited options. Since starting the company in 1999, we’ve been frustrated by the limited options available for image handling in Java.</p>
<p>Libraries like ImageIO often fell short, with restricted format support and occasional JVM crashes, making pure Java workflows difficult to maintain.</p>
<p>Which is why in 2015, we decided to compile all of our knowledge into <strong><a href="https://www.idrsolutions.com/jdeli/">JDeli</a></strong>, our <strong>pure Java Image Library</strong>. You can <a href="https://www.idrsolutions.com/jdeli/#why-buy">trial JDeli</a> yourself, and use this <strong>java-ready library</strong> to solve your image processing needs.</p>
<p>This post serves as a repository of all the knowledge we have compiled over the years, around the most commonly used image formats and image related processes.</p>
<h2>Learn about Image Formats</h2>
<p>Discover the key characteristics, use cases, and advantages of popular image formats. This section explains how each format works so you can choose the right one for your application or workflow.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/what-is-jpeg-xl/">What is JPEG XL?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-jbig2/">What is JBIG2?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-the-avif-image-format/">What is AVIF image format?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-sgi-file-format/">What is SGI file format?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-dicom/">What is a Dicom File?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-tiff/">What is TIFF?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-gif/">What is GIF?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-jpeg-2000/">What is JPEG 2000?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-psd/">What is PSD?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-png/">What is PNG?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-jpeg/">What is JPEG?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-bmp/">What is BMP?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-heic/">What is Heic?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-webp-image-format/">What is a WebP file?</a></li>
</ul>
<h2>Read Image Formats</h2>
<p>Learn how to read and decode different image formats in Java. Each tutorial provides step-by-step guidance using JDeli to access and process image data efficiently.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/how-to-read-avif-files-in-java-tutorial/">How to read AVIF files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-psd-images-in-java/">How to read PSD images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-wmf-images-in-java/">How to read WMF images in Java</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-jpeg-xl-images-in-java/">How to read JPEG XL images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-emf-files-in-java/">How to read EMF files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-webp-files-in-java/">How to read WebP files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-gif-files-in-java/">How to read GIF files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-jpeg2000-in-java/">How to Read JPEG 2000 in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-exif-metadata-from-image-files/">How to read EXIF metadata from Image files</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-jpeg-images-in-java/">How to read JPEG images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-tiff-images-in-java/">How to read TIFF images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-png-files-in-java/">How to read PNG files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-bmp-images-in-java/">How to read BMP images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-heic-files-in-java/">How to read Heic files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-sgi-images-in-java/">How to read SGI images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-read-dicom-files-in-java/">How to read DICOM Image files in Java (Tutorial)</a></li>
</ul>
<h2>Write File Formats</h2>
<p>Understand how to create and export images in multiple formats using Java. These tutorials show how to write images to disk or streams while controlling compression, colour profiles, and metadata.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/how-to-write-avif-image-files-in-java-tutorial/">How to write AVIF images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-tiff-images-in-java/">How to write TIFF images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-heic-image-files-in-java/">How to write HEIC image files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-gif-image-files-in-java/">How to write GIF image files in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-webp-images-in-java/">How to write WebP images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-out-png-images-in-java/">How to write PNG Images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-jpeg2000-images-in-java/">How to write JPEG 2000 Images in Java</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-jpeg-images-in-java/">How to write JPEG Images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-write-bmp-images-in-java/">How to write BMP images in Java (Tutorial)</a></li>
</ul>
<h2>Convert Image Formats</h2>
<p>Find out how to convert images between different formats in bulk or individually. These guides demonstrate practical Java examples for format conversion, optimizing workflows for speed and quality.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/how-to-mass-convert-bmp-to-jpg-tutorial/">How to mass convert BMP to JPG (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-mass-convert-tiff-to-jpg-tutorial/">How to mass convert TIFF to JPG (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-mass-convert-png-to-jpg-tutorial/">How to mass convert PNG to JPG (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-bulk-convert-webp-to-jpg-tutorial/">How to bulk convert WebP to JPG (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-convert-heic-to-jpg-in-bulk-tutorial/">How to convert HEIC to JPG in bulk (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-convert-wmf-files-to-svg-in-java-with-jdeli/">How to convert WMF files to SVG in Java with JDeli</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-convert-emf-files-to-svg-in-java/">How to convert EMF files to SVG in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-convert-an-image-to-a-pdf-in-java/">How to convert an image to a PDF in Java (Tutorial)</a></li>
</ul>
<h2>Image Manipulation in Java</h2>
<p>Explore how to perform common image manipulation tasks directly in Java. Learn to crop, resize, blur, scale, and rotate images programmatically using JDeli for fast and accurate results.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/how-to-manipulate-images-in-java-using-jdeli/">How to Manipulate Images in Java using JDeli</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-blur-an-image-in-java-with-code-examples/">Blurring Images in Java: Simple &#038; Gaussian Blur Code Examples</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-crop-an-image-in-java/">How to crop an image in Java</a></li>
<li><a href="https://blog.idrsolutions.com/scaling-images-in-java-with-jdeli/">Scaling Images in Java with JDeli</a></li>
<li><a href="https://blog.idrsolutions.com/how-to-resize-images-in-java/">How to resize images in Java (Tutorial)</a></li>
<li><a href="https://blog.idrsolutions.com/image-rotation-in-java/">Image Rotation In Java</a></li>
</ul>
<h2>Compression in Java</h2>
<p>Get an overview of the compression methods used in image processing. This section explains various algorithms and compares their performance to help you select the most efficient option for your needs.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/what-is-lzw-compression/">What is LZW compression?</a></li>
<li><a href="https://blog.idrsolutions.com/what-is-ccitt-compression/">What is CCITT compression?</a></li>
<li><a href="https://blog.idrsolutions.com/how-does-ccitt-compress-image-data/">How does CCITT compress image data?</a></li>
<li><a href="https://blog.idrsolutions.com/comparing-webp-compression-algorithms/">Comparing WebP compression algorithms</a></li>
<li><a href="https://blog.idrsolutions.com/comparing-png-compression-algorithms/">Comparing PNG Compression Algorithms</a></li>
<li><a href="https://blog.idrsolutions.com/comparing-tiff-compression-algorithms/">Comparing TIFF Compression Algorithms</a></li>
<li><a href="https://blog.idrsolutions.com/ccitt-compression-guide/">CCITT Compression Guide</a></li>
</ul>
<h2>How Java Handles Images and ColorSpaces</h2>
<p>Understand how Java processes images and manages color spaces across different libraries and APIs. This series explains key concepts behind Java’s image representation, manipulation, and color handling mechanisms.</p>
<ul>
<li><a href="https://blog.idrsolutions.com/how-does-java-handle-different-images-and-colorspaces-part-1/">How does Java handle different Images and ColorSpaces – Part 1</a></li>
<li><a href="https://blog.idrsolutions.com/how-does-java-handle-different-images-and-colorspaces-part-2/">How does Java handle different Images and ColorSpaces – Part 2</a></li>
<li><a href="https://blog.idrsolutions.com/how-does-java-handle-different-images-and-colorspaces-part-3-introducing-the-bufferedimage/">How does Java handle different Images and ColorSpaces – Part 3 Introducing the BufferedImage</a></li>
<li><a href="https://blog.idrsolutions.com/how-does-java-handle-different-images-and-colorspaces-part-4-imageio-and-other-image-libraries/">How does Java handle different Images and ColorSpaces – Part 4 ImageIO and other image libraries</a></li>
</ul>
<p>The post <a href="https://blog.idrsolutions.com/working-with-images-in-java/">Working with Images in Java</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/amy/">Amy Pearson</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PDF processing with Spring Boot (Tutorial)</title>
		<link>https://blog.idrsolutions.com/pdf-processing-with-spring-boot-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 11:55:02 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[jpedal]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring boot]]></category>
		<category><![CDATA[spring.io]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37619</guid>

					<description><![CDATA[<p>What is Spring Boot? Spring Boot is a framework for efficiently building production level Java apps. It builds on top of the Spring framework by offering out of the box configuration and setup. It allows developers to build and deploy microservices and APIs with minimal tweaking required. How to process PDF files? JPedal is our [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/pdf-processing-with-spring-boot-tutorial/">PDF processing with Spring Boot (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>What is Spring Boot?</h2>
<p><a href="https://spring.io/projects/spring-boot" target="_blank">Spring Boot</a> is a framework for efficiently building production level Java apps. It builds on top of the Spring framework by offering out of the box configuration and setup. It allows developers to build and deploy microservices and APIs with minimal tweaking required.</p>
<h2>How to process PDF files?</h2>
<p><a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a> is our Java PDF SDK which enables developers to <a href="https://www.idrsolutions.com/jpedal/java-pdf-renderer" target="_blank">convert</a>, <a href="https://www.idrsolutions.com/jpedal/manipulate-pdf-pages-in-java" target="_blank">manipulate</a>, <a href="https://www.idrsolutions.com/docs/jpedal/printing/" target="_blank">print</a>, and <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">view</a> PDF files within Java applications. It provides APIs for <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/convert-images/convert-pdf-to-bufferedimage" target="_blank">rendering PDFs to images</a>, <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/extract-text/extract-structured-content-from-structured-pdf-files" target="_blank">extracting text and metadata</a>, <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator#load-and-write-documents" target="_blank">manipulating pages</a>, and much more! JPedal supports both server side and desktop use cases, making it suitable for integrating PDF functionality into web applications, or document processing pipelines.</p>
<h2>Spring Boot PDF processing</h2>
<p>Combining JPedal with Spring Boot allows developers to build web services which require processing PDFs. For example, a Spring Boot REST API could use JPedal to convert uploaded PDFs into images.</p>
<p>This provides the following benefits:</p>
<ul>
<li><strong>Scalability</strong>: Spring Boot handles concurrency and deployment, while JPedal manages the PDF processing</li>
<li><strong>Simplicity</strong>: Minimal configuration for both the web layer (Spring Boot) and document layer (JPedal)</li>
<li><strong>Extensibility</strong>: Easy to integrate with databases or other cloud services</li>
</ul>
<p>Together, JPedal and Spring Boot form a robust stack for creating PDF driven Java applications with web capabilities.</p>
<h2>How to set up a Spring Boot project with JPedal</h2>
<p>Now we are going to make a simple microservice which converts PDFs into PNGs.</p>
<p>First, visit <a href="https://start.spring.io/" target="_blank">Sprint Initializr</a> and create a new project. Add &#8216;Spring Web&#8217; as a dependency.</p>
<p>Second, you will need to <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a JPedal jar</a>, and <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">add it to your Java project</a>.</p>
<p>Next, create a service class which will perform the PDF to PNG conversion:</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>@Service<br />
public class PdfService {

<br />    public File renderPdfToImage(final File pdfFile, final int page) throws Exception {<br />
        final File outputDir = new File(&quot;output&quot;);<br />
        if (!outputDir.exists()) {<br />
            outputDir.mkdirs();<br />
        }

<br />        final ConvertPagesToImages convert = new ConvertPagesToImages(pdfFile.getAbsolutePath());

<br />        if (!convert.openPDFFile()) {<br />
            convert.closePDFfile();<br />
        }

<br />        final BufferedImage bi = convert.getPageAsImage(page);

<br />        final File out = Paths.get(outputDir.getAbsolutePath(),<br />
                pdfFile.getName() + &quot;-&quot; + page + &quot;.png&quot;).toFile();

<br />        final PngEncoderOptions options = new PngEncoderOptions();<br />
        JDeli.write(bi, options, out);

<br />        convert.closePDFfile();

<br />        return out;<br />
    }

<br />}<br />
</code></pre>
<p>Then create a new controller class which will handle the REST requests:</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>@RestController<br />
@RequestMapping(&quot;/pdf&quot;)<br />
public class PdfController {

<br />    private final PdfService pdfService;

<br />    public PdfController(final PdfService pdfService) {<br />
        this.pdfService = pdfService;<br />
    }

<br />    @PostMapping(value = &quot;/convert&quot;, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)<br />
    public ResponseEntity<Resource> convertPdf(@RequestParam(&quot;file&quot;) final MultipartFile file,<br />
            @RequestParam(&quot;page&quot;) final int page) throws Exception {

<br />        final File temp = File.createTempFile(&quot;upload&quot;, &quot;.pdf&quot;);<br />
        file.transferTo(temp);<br />
        final File output = pdfService.renderPdfToImage(temp, page);

<br />        final InputStreamResource resource = new InputStreamResource(new FileInputStream(output));<br />
        return ResponseEntity.ok()<br />
                .header(HttpHeaders.CONTENT_DISPOSITION, &quot;attachment; filename=\&quot;&quot; + output.getName() + &quot;\&quot;&quot;)<br />
                .contentLength(output.length())<br />
                .contentType(MediaType.APPLICATION_OCTET_STREAM)<br />
                .body(resource);<br />
    }

<br />}<br />
</code></pre>
<p>Finally, update the <code>application.properties</code> file to include the following settings:</p>
<pre class='line-numbers' ><code class='language-java'>spring.servlet.multipart.enabled=true<br />
spring.servlet.multipart.max-file-size=20MB<br />
spring.servlet.multipart.max-request-size=20MB<br />
</code></pre>
<p>Now you can start the microservice using:</p>
<pre class='line-numbers' ><code class='language-java'>./mvnw spring-boot:run<br />
</code></pre>
<p>Once the build completes, you can send a PDF to the microservice and have it converted:</p>
<pre class='line-numbers' ><code class='language-java'>curl -X POST http://localhost:8080/pdf/convert -F file=@/Users/Shared/inputFile.pdf -F page=1 -o output.png<br />
</code></pre>
<h2>Source code</h2>
<p>All of the code in this article can be found on our GitHub: <a href="https://github.com/idrsolutions/jpedal-springboot-example" target="_blank">jpedal-springboot-example</a>.</p>
<h2>Download JPedal now</h2>
<p>You may <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a trial copy of JPedal</a> to get familiar with how it works.</p>
<p></p>
<h2>Learn more</h2>
<p>Find out <a href="https://blog.idrsolutions.com/category/jpedal/" target="_blank">what else you can do with JPedal</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/pdf-processing-with-spring-boot-tutorial/">PDF processing with Spring Boot (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to interleave merge PDFs in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-interleave-merge-pdfs-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Thu, 06 Nov 2025 16:35:14 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[Merge]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[combine]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[documents]]></category>
		<category><![CDATA[interlace]]></category>
		<category><![CDATA[interleave]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[weave]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37682</guid>

					<description><![CDATA[<p>The Java PDF library JPedal allows developers to merge PDF files using interleaving. Download a JPedal trial jar to try it out! What is interleaving? To interleave two or more PDF files means to combine them into a single document where the output file contains alternating pages from each input file. For example, say you [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-interleave-merge-pdfs-in-java-tutorial/">How to interleave merge PDFs in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The <a href="https://www.idrsolutions.com/jpedal/" target="_blank">Java PDF library JPedal</a> allows developers to merge PDF files using interleaving. <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">Download a JPedal trial jar</a> to try it out!</p>
<h2>What is interleaving?</h2>
<p>To interleave two or more PDF files means to combine them into a single document where the output file contains alternating pages from each input file.</p>
<p>For example, say you have document A with 4 pages, and document B with 5 pages. The result would look like: <code>A1, B1, A2, B2, A3, B3, A4, B4, B5</code>.</p>
<p>One example of when you might want to use this would be merging multiple copies of the same form with different answers filled in. Using an interleave merge here would make it a lot easier to compare the different answers.</p>
<h2>How to merge with interleaving in Java</h2>
<p>Once you have downloaded a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal jar</a>, and <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">added it to your Java project</a>, you can use the following lines of code:</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final ArrayList<MergeOption> options = new ArrayList<>();<br />
options.add(MergeOption.INTERLEAVE);

<br />PdfMerge.mergeFiles(new File(&quot;inputFile1.pdf&quot;), new File(&quot;inputFile2.pdf&quot;), new File(&quot;outputFile.pdf&quot;), options);<br />
</code></pre>
<h2>Download JPedal now</h2>
<p>You may <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a trial copy of JPedal</a> to get familiar with how it works.</p>
<p></p>
<h2>Learn more</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/merge-pdfs" target="_blank">PDF Merge API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-interleave-merge-pdfs-in-java-tutorial/">How to interleave merge PDFs in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to set the initial view of a PDF in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-set-the-initial-view-of-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 09:26:14 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Viewer]]></category>
		<category><![CDATA[destination]]></category>
		<category><![CDATA[initial view]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[open action]]></category>
		<category><![CDATA[openaction]]></category>
		<category><![CDATA[page layout]]></category>
		<category><![CDATA[page mode]]></category>
		<category><![CDATA[pagelayout]]></category>
		<category><![CDATA[pagemode]]></category>
		<category><![CDATA[viewer]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37641</guid>

					<description><![CDATA[<p>What is initial view? A PDF document may have an initial view which determines how the document opens in PDF viewing software like Adobe Acrobat or JPedal Viewer. The initial view can dictate which page the document should be opened on, the layout of the pages, and even which interactive panels should be open (e.g. [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-set-the-initial-view-of-a-pdf-in-java-tutorial/">How to set the initial view of a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>What is initial view?</h2>
<p>A PDF document may have an initial view which determines how the document opens in PDF viewing software like Adobe Acrobat or <a href="https://www.idrsolutions.com/jpedal/java-pdf-viewer" target="_blank">JPedal Viewer</a>.</p>
<p>The initial view can dictate which page the document should be opened on, the layout of the pages, and even which interactive panels should be open (e.g. the page thumbnails panel).</p>
<h2>What is JPedal?</h2>
<p><a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a> is our Java PDF library which we have been developing for over 20 years! It comes with a rich feature set and robust support for all kinds of PDF files.</p>
<h2>How to set the initial view with JPedal?</h2>
<p>First, you will need to download a JPedal jar and <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/add-jpedal-as-a-maven-dependency" target="_blank">add it to your Java project</a>. You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">get a trial</a> copy from our website.</p>
<p>Next, you need to create an instance of <a href="https://javadoc.idrsolutions.com/org/jpedal/manipulator/PdfManipulator.html" target="_blank">PdfManipulator</a>, load the desired PDF, and use the <a href="https://javadoc.idrsolutions.com/org/jpedal/manipulator/PdfManipulator.html#setInitialView(int,org.jpedal.constants.Destination,org.jpedal.constants.PageLayout,org.jpedal.constants.PageMode)" target="_blank">set initial view command</a>.</p>
<p>The example code below sets the initial view of a PDF to open on page 3, using a two page view mode, with the thumbnails panel open.</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));<br />
pdf.setInitialView(3, new Destination.Fit(),<br />
        PageLayout.TWO_PAGE_LEFT,<br />
        PageMode.USE_THUMBS);<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p></p>
<h2>Download JPedal</h2>
<p>You can get a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial jar</a> to test setting the initial view of PDF files.</p>
<h2>Resources</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-set-the-initial-view-of-a-pdf-in-java-tutorial/">How to set the initial view of a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to add a link to a PDF in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-add-a-link-to-a-pdf-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 08:33:44 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[annotate]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[hyperlink]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37509</guid>

					<description><![CDATA[<p>Hyperlinks in PDF documents allow you to specify websites or external resources that users can visit for more information. (Though they can also be a source of phishing!) Our Java PDF toolkit JPedal contains a powerful PDF manipulation API which you can use to add links to PDF files Download JPedal You can get a [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-link-to-a-pdf-in-java-tutorial/">How to add a link to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Hyperlinks in PDF documents allow you to specify websites or external resources that users can visit for more information. (Though they can also be <a href="https://blog.idrsolutions.com/how-to-remove-links-from-pdf-files-in-java-tutorial/" target="_blank">a source of phishing</a>!)</p>
<p>Our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">Java PDF toolkit JPedal</a> contains a powerful PDF manipulation API which you can use to add links to PDF files</p>
<pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />final Annotation[] annotations = new Annotation[2];<br />
// Hyperlink annotation with blue color.<br />
annotations[0] = new Link(new float[] {200, 600, 300, 700}, new float[] {0.0f, 0.0f, 1.0f}, &quot;https://idrsolutions.com/&quot;);<br />
// Hyperlink annotation with red color.<br />
annotations[1] = new Link(new float[] {200, 300, 300, 400}, new float[] {1.0f, 0.0f, 0.0f}, &quot;https://www.idrsolutions.com/docs/&quot;);

<br />pdf.addAnnotation(1, annotations);

<br />pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p></p>
<h2>Download JPedal</h2>
<p>You can get a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial jar</a> to test adding links to PDF files.</p>
<h2>Resources</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-a-link-to-a-pdf-in-java-tutorial/">How to add a link to a PDF in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Experience the &#8216;best 2 hours of your life&#8217; in Istanbul</title>
		<link>https://blog.idrsolutions.com/experience-the-best-2-hours-of-your-life-in-istanbul/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Tue, 04 Nov 2025 14:36:09 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37591</guid>

					<description><![CDATA[<p>In Sultanahmet square (Istanbul), there is a non-descript building between the Blue Mosque and Hagia Sophia. Most people just walk past it&#8230;. When I visit for the Devfest conference, I always take the time to visit (and I invite anyone on our team to attend as well). There are actually 2 entrances to the Hagia [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/experience-the-best-2-hours-of-your-life-in-istanbul/">Experience the &#8216;best 2 hours of your life&#8217; in Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-300x225.jpeg" alt="Ayasofya bathhouse" width="300" height="225" class="aligncenter size-medium wp-image-37611" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_3052-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
In Sultanahmet square (Istanbul), there is a non-descript building between the Blue Mosque and Hagia Sophia. Most people just walk past it&#8230;.</p>
<p>When I visit for the <a href="https://devfest.istanbul/" target="_blank">Devfest conference</a>, I always take the time to visit (and I invite anyone on our team to attend as well).</p>
<p>There are actually 2 entrances to the <a href="https://en.wikipedia.org/wiki/Hagia_Sophia_Hurrem_Sultan_Bathhouse" target="_blank">Hagia Sophia Hurrem Sultan Bathhouse</a> as there is a strict divide between women and men. I have only seen inside the men&#8217;s section but I am told they are identical. Inside you find a reception which looks like something out of <a href="https://en.wikipedia.org/wiki/One_Thousand_and_One_Nights" target="_blank">One thousand and one Arabian nights</a> complete with a fountain. </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-225x300.jpeg" alt="Ayasofya bathhouse" width="225" height="300" class="aligncenter size-medium wp-image-37609" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-225x300.jpeg 225w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-768x1024.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-1152x1536.jpeg 1152w, https://blog.idrsolutions.com/app/uploads/2025/11/IMG_9752-1536x2048.jpeg 1536w" sizes="auto, (max-width: 225px) 100vw, 225px" /></a></p>
<p>Here you are given a private changing room to slip into a pair of disposable pants and a towel before sitting in the reception area to await your attendant (always the same sex as you). They will lead you into the heated section. Here you will be washed down with warm water and scrubbed to remove old skin and then covered in clay. Some time to sit and ponder life&#8230;. </p>
<p><a href="https://blog.idrsolutions.com/app/uploads/2025/11/250px-Hurrem_Sultan_Hamam_Roxelana_Bath_Interior.jpg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/11/250px-Hurrem_Sultan_Hamam_Roxelana_Bath_Interior-200x300.jpg" alt="Inside Ayasofya" width="200" height="300" class="aligncenter size-medium wp-image-37612" srcset="https://blog.idrsolutions.com/app/uploads/2025/11/250px-Hurrem_Sultan_Hamam_Roxelana_Bath_Interior-200x300.jpg 200w, https://blog.idrsolutions.com/app/uploads/2025/11/250px-Hurrem_Sultan_Hamam_Roxelana_Bath_Interior.jpg 250w" sizes="auto, (max-width: 200px) 100vw, 200px" /></a></p>
<p>The clay is washed off and you are led to the heated raised section in the middle where you lie on the heated surface. You will be covered in bubbles and massaged from head to foot. You choose how vigourous this is!</p>
<p>You probably need a bit of a rest after all that, so you will be taken back to reception where you lie on your own couch, drinking tea or fruit juice and eating fresh fruit or Turkish delight. Your session is completed with a massage upstairs and a face mask and you return to your changing room and reality feeling amazing!</p>
<p>The experience is definitely not cheap (300 Euros) but I think it worth every penny. I describe it as &#8216;the best two hours of your life&#8217;, and no-one I have taken along has ever disagreed&#8230;</p>
<p>The post <a href="https://blog.idrsolutions.com/experience-the-best-2-hours-of-your-life-in-istanbul/">Experience the &#8216;best 2 hours of your life&#8217; in Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to remove links from PDF files in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-remove-links-from-pdf-files-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Tue, 04 Nov 2025 12:43:22 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[clean]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[hyperlinks]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[manipulate]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[remove]]></category>
		<category><![CDATA[sanitize]]></category>
		<category><![CDATA[xss]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37493</guid>

					<description><![CDATA[<p>The PDF file format is very complex and contains many features to boost interactivity. One such feature is the ability for PDF files to contain links to external web pages or other resources. While useful, this functionality introduces risks! Bad actors can embed malicious hyperlinks which can be a source of phishing or cross-site scripting [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-links-from-pdf-files-in-java-tutorial/">How to remove links from PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>
The PDF file format is very complex and contains many features to boost interactivity. One such feature is the ability for PDF files to contain links to external web pages or other resources.
</p>
<p>
While useful, this functionality introduces risks! Bad actors can embed malicious hyperlinks which can be a source of phishing or cross-site scripting (XSS) attacks.
</p>
<p>
Our <a href="https://www.idrsolutions.com/jpedal/" target="_blank">PDF toolkit JPedal</a> allows you to remove links from PDF documents and sanitize files, removing the risk of malicious links.
</p>
<p>
To do this you need to <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a JPedal jar</a>, then run the following code:
</p>
<pre class='line-numbers' data-ad=JPedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));<br />
pdf.removeLinks();<br />
pdf.apply();<br />
pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre>
<p>
Additionally, you may want to consider <a href="https://blog.idrsolutions.com/how-to-sanitize-pdf-files-removing-hidden-risks/">other sanitization options</a> to secure your documents.
</p>
<p><h2>Resources</h2>
<p>You can <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">download a trial jar from our website</a>.
</p>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-remove-links-from-pdf-files-in-java-tutorial/">How to remove links from PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to add bookmarks to PDF files in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/how-to-add-bookmarks-to-pdf-files-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Jacob Collins]]></dc:creator>
		<pubDate>Mon, 03 Nov 2025 16:48:41 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPedal]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[outline]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37502</guid>

					<description><![CDATA[<p>Bookmarks are a useful way to outline the structure of a PDF file, acting like a table of contents. Many viewers will display bookmarks in a panel alongside the document which allows users to navigate between different pages. Our PDF SDK, JPedal, provides an API to create bookmarks programmatically. You can create arbitrarily complex bookmark [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-bookmarks-to-pdf-files-in-java-tutorial/">How to add bookmarks to PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Bookmarks are a useful way to outline the structure of a PDF file, acting like a table of contents.</p>
<p>Many viewers will display bookmarks in a panel alongside the document which allows users to navigate between different pages.</p>
<p>Our PDF SDK, <a href="https://www.idrsolutions.com/jpedal/" target="_blank">JPedal</a>, provides an API to create bookmarks programmatically.</p>
<p>You can create arbitrarily complex bookmark structures and add them to any PDF file using the following code:</p>
<p><pre class='line-numbers' data-ad=jpedal><code class='language-java'>final PdfManipulator pdf = new PdfManipulator();<br />
pdf.loadDocument(new File(&quot;inputFile.pdf&quot;));

<br />final Bookmarks root = new Bookmarks();<br />
final Bookmark b = root.addChild(&quot;1&quot;, 1)<br />
        .addChild(&quot;1.1&quot;, 2)<br />
        .addChild(&quot;1.1.1&quot;, 3);<br />
b.addChild(&quot;1.1.1.a&quot;, 4);<br />
b.addChild(&quot;1.1.1.b&quot;, 5);<br />
b.addChild(&quot;1.1.1.c&quot;, 6);<br />
Bookmark b2 = b.addChild(&quot;1.1.1.d&quot;, 7);<br />
b2.addChild(&quot;1.1.1.d.A&quot;, 8);<br />
b2.addChild(&quot;1.1.1.d.B&quot;, 9);<br />
root.addChild(&quot;2&quot;, 11)<br />
        .addChild(&quot;2.1&quot;, 13);

<br />pdf.addBookmarks(root);<br />
pdf.apply();

<br />pdf.writeDocument(new File(&quot;outputFile.pdf&quot;));<br />
pdf.closeDocument();<br />
</code></pre><br />
</p>
<p>
Warning, calling the addBookmarks() method will erase any existing bookmarks.</p>
<h2>Download JPedal</h2>
<p>You can get a <a href="https://www.idrsolutions.com/jpedal/your-trial" target="_blank">JPedal trial jar</a> to test adding bookmarks to PDF files.</p>
<h2>Learn more</h2>
<p>Learn more about the <a href="https://www.idrsolutions.com/docs/jpedal/tutorials/pdf-manipulation/pdf-manipulator" target="_blank">PDF Manipulator API</a>.</p>
<p>We can help you <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/" target="_blank">better understand the PDF format</a> as developers who have been working with the format for more than 2 decades!</p>
<p>The post <a href="https://blog.idrsolutions.com/how-to-add-bookmarks-to-pdf-files-in-java-tutorial/">How to add bookmarks to PDF files in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/jacob-collins/">Jacob Collins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Riding the Orient Express to Devfest Istanbul</title>
		<link>https://blog.idrsolutions.com/riding-the-orient-express-to-devfest-istanbul/</link>
		
		<dc:creator><![CDATA[Mark Stephens]]></dc:creator>
		<pubDate>Fri, 31 Oct 2025 08:12:49 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37517</guid>

					<description><![CDATA[<p>We have been trying to reduce our carbon footprint by taking the train in preference to flying whenever possible and last year we showed it was really viable (even preferable) for travelling to Switzerland. So when we decided that we would be going to attend the Devfest conference in Istanbul, the obvious questions became &#8216;Is [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/riding-the-orient-express-to-devfest-istanbul/">Riding the Orient Express to Devfest Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure id="attachment_37533" aria-describedby="caption-attachment-37533" style="width: 300px" class="wp-caption aligncenter"><a href="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-300x225.jpeg" alt="Sirkeci train station" width="300" height="225" class="size-medium wp-image-37533" srcset="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6113-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-37533" class="wp-caption-text">Tickets for Sirkeci train station<a href="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-scaled.jpeg"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-300x225.jpeg" alt="Sirkeci train" width="300" height="225" class="aligncenter size-medium wp-image-37534" srcset="https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-300x225.jpeg 300w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-1024x768.jpeg 1024w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-768x576.jpeg 768w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-1536x1152.jpeg 1536w, https://blog.idrsolutions.com/app/uploads/2025/10/IMG_6114-2048x1536.jpeg 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>last stop on the Orient Express</figcaption></figure>
<p>We have been trying to reduce <a href="https://files.idrsolutions.com/Examples/IDRViewer/IDR_Carbon_Footprint_Report/index.html?page=1">our carbon footprint</a> by taking the train in preference to flying whenever possible and last year we showed it was really viable (even preferable) for <a href="https://blog.idrsolutions.com/why-use-train-to-travel-to-switzerland/">travelling to Switzerland</a>. </p>
<p>So when we decided that we would be going to attend the <a href="https://devfest.istanbul/">Devfest conference</a> in Istanbul, the obvious questions became <em>&#8216;Is the train viable?&#8217;</em> and <em>&#8216;Do we want to?&#8217;</em>.</p>
<h2>Can you get to Istanbul from London by train?</h2>
<p>London and Istanbul are 1,900 miles apart. While there is no longer an &#8216;Orient Express&#8217; train service, it is perfectly possible to schedule a selection of overlapping trains to get there following the route.</p>
<p>An excellent resource is the <a href="https://www.seat61.com/Turkey.htm">The Man in Seat Sixty-One</a> website which is a treasure trove of advice on train travel (even recommending where to stay).</p>
<p>There are multiple routes to get there. On the way we are going:-</p>
<ul>
<li>London -> Brussels</li>
<li>Brussels -> Prague (overnight on the <a href="https://www.europeansleeper.eu/">European sleeper</a>)</li>
<li>Prague  -> Budapest</li>
<li>Budapest -> Bucharest</li>
<li>Bucharest -> Istanbul</li>
</ul>
<p>and coming home we are following a slightly different route:-</p>
<ul>
<li>Istanbul -> Bucharest</li>
<li>Bucharest -> Vienna</li>
<li>Vienna -> Brussels</li>
<li>Brussels -> London</li>
</ul>
<p>You  can also put together a route through Belgrade and lots of other minor variations.</p>
<p>You need to leave time between trains to allow for delays (or wait for the next train). But this provides the opportunity to explore the cities of Prague, Budapest, Bucharest and Vienna.</p>
<p>In a nice twist, our final stop in Istanbul will be the <a href="https://en.wikipedia.org/wiki/Sirkeci_railway_station">Sirkeci train station</a>, which was also the terminal for the Iconic Orient express trains.</p>
<h2>Why take the train when you can fly for less in a few hours?</h2>
<p>It is definitely true that the plane is cheaper, quicker and more direct. If you are viewing it in that way, you should take the flight. The reasons why you would take the train are:-</p>
<ol>
<li>Much lower carbon footprint</li>
<li>The chance to see Europe as opposed to just Zoom over it</li>
<li>The opportunity to visit several major cities (you can arrange your schedule to spend time in each).</li>
<li>The sense of adventure</li>
</ol>
<p>This is also the journey that has been immortalised by numerous writers &#8211; most famously Agatha Christie in her &#8216;Murder of the Orient Express&#8217; and Graham Greene in &#8216;Stamboul train&#8217;. Who wouldn&#8217;t want to follow in their footsteps!!!</p>
<p>But we will take care to avoid any dubious American gangsters, spies or Belgian detectives&#8230;</p>
<p>The post <a href="https://blog.idrsolutions.com/riding-the-orient-express-to-devfest-istanbul/">Riding the Orient Express to Devfest Istanbul</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/markee/">Mark Stephens</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Easily convert PDF to HTML in C# (Tutorial)</title>
		<link>https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-c-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 10 Oct 2025 16:02:30 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[converting PDF to HTML in C#]]></category>
		<category><![CDATA[pdf conversion C#]]></category>
		<category><![CDATA[PDF to HTML conversion in C#]]></category>
		<category><![CDATA[pdf to html in C]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37423</guid>

					<description><![CDATA[<p>In this article I will show you how you can use our PDF files to HTML API and generate HTML from PDF with our library BuildVu. BuildVu is the best PDF to HTML conversion tool for developers. PDF to HTML conversion helps you to optimise your PDF content for display on browsers. PDF vs HTML [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-c-tutorial/">Easily convert PDF to HTML in C# (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-34951" src="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png" alt="PDF to HTML using Java (Icon)" width="300" height="300" srcset="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png 300w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-150x150.png 150w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>In this article I will show you how you can use our <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/">PDF files</a> to HTML API and generate HTML from PDF with our library BuildVu. BuildVu is the best PDF to HTML conversion tool for developers. <a href="https://www.idrsolutions.com/buildvu/pdf-to-html">PDF to HTML conversion</a> helps you to optimise your PDF content for display on browsers.</p>
<h2>PDF vs HTML for C# Developers</h2>
<p>Incorporating documents in your .NET applications can be tricky if you want to optimise it for web usage. HTML is much more efficient from a searchability perspective as well, something that will crucial in determining the success of your application.</p>
<p>We have a separate <a href="https://blog.idrsolutions.com/why-convert-pdf-documents-to-html">article</a> explaining the benefits of converting PDF to HTML.</p>
<h2>Convert PDF to HTML using C#</h2>
<p>Although the aforementioned services can be accessed using plain HTTP requests, this tutorial utilizes our open-source <a href="https://github.com/idrsolutions/idrsolutions-csharp-client">C# IDRCloudClient</a>, which offers a straightforward C# wrapper around the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md">REST API</a>.</p>
<h3>Prerequisites</h3>
<p>To install the idrsolutions-csharp-client package using NuGet, run the following command:<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>nuget install idrsolutions-csharp-client</code></pre></p>
<h3>Code Example</h3>
<p>This example demonstrates a simple way to convert PDF documents into HTML or SVG formats. You’ll find more advanced functionality and configuration options outlined in the sections that follow.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>using System;<br />
using System.Collections.Generic;<br />
using idrsolutions-csharp-client;

<br />class ExampleUsage<br />
{<br />
static void Main(string[] args)<br />
{

<br />var client = new IDRCloudClient(&quot;https://cloud.idrsolutions.com/cloud/&quot; + IDRCloudClient.BUILDVU);

<br />try<br />
{<br />
Dictionary&lt;string, string&gt; parameters = new Dictionary&lt;string, string&gt;<br />
{<br />
//[&quot;token&quot;] = &quot;Token&quot;, //Required only when connecting to the IDRsolutions trial and cloud subscription service<br />
[&quot;input&quot;] = IDRCloudClient.UPLOAD,<br />
[&quot;file&quot;] = &quot;path/to/input.pdf&quot;<br />
};

<br />Dictionary&lt;string, string&gt; results = client.Convert(parameters);

<br />String outputUrl = results.GetValueOrDefault(&quot;downloadUrl&quot;, &quot;No download URL provided&quot;);

<br />client.DownloadResult(results, &quot;path/to/output/dir&quot;);

<br />Console.WriteLine(&quot;Converted: &quot; + outputUrl);<br />
}<br />
catch (Exception e)<br />
{<br />
Console.WriteLine(&quot;Conversion failed: &quot; + e.Message);<br />
}<br />
}<br />
}</code></pre>
<h3>Return result to a callback url</h3>
<p>You can configure the BuildVu Microservice to send a <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md#conversion-status">notification</a> to a callback URL once the conversion process finishes. This approach removes the need for repeatedly checking the service for updates.</p>
<p>To enable this, simply pass the callback URL into the convert method as shown in the following example.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>Dictionary&lt;string, string&gt; parameters = new Dictionary&lt;string, string&gt;<br />
{<br />
//[&quot;token&quot;] = &quot;Token&quot;, //Required only when connecting to the IDRsolutions trial and cloud subscription service<br />
[&quot;callbackUrl&quot;] = &quot;http://listener.url&quot;,<br />
[&quot;input&quot;] = IDRCloudClient.UPLOAD,<br />
[&quot;file&quot;] = &quot;path/to/input.pdf&quot;<br />
};</code></pre>
<h3>Configuration Options</h3>
<p>To tailor the conversion process, the BuildVu API accepts a JSON-formatted string containing key-value pairs. These customization settings must be included in the parameters array. You can explore the full set of available options for converting PDF files into HTML or SVG in the <a href="https://www.idrsolutions.com/docs/buildvu/settings/">configuration guide</a>.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>[&quot;settings&quot;] = &quot;{\&quot;key\&quot;:\&quot;value\&quot;,\&quot;key\&quot;:\&quot;value\&quot;}&quot;</code></pre>
<h3>Upload by URL</h3>
<p>Instead of uploading a file directly, you can instruct the BuildVu Microservice to fetch and convert a document from a specified URL.</p>
<p>To do this, update the parameters variable by replacing the input and file entries with the following configuration.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>[&quot;input&quot;] = IDRCloudClient.DOWNLOAD<br />
[&quot;url&quot;] = &quot;http://exampleURL/exampleFile.pdf&quot;</code></pre>
<h3>Using Authentication</h3>
<p>When using a self-hosted BuildVu Microservice that enforces authentication, you’ll need to supply a username and password for every conversion request. These credentials should be passed as two separate variables—username and password—to the convert method, as illustrated below.</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>var client = new IDRCloudClient(&quot;http://exampleURL.com/&quot; + IDRCloudClient.BUILDVU, &quot;username&quot;, &quot;password&quot;);</code></pre>
<p>By applying the methods outlined earlier, you can seamlessly convert PDF files into HTML within your C# projects using BuildVu.</p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-c-tutorial/">Easily convert PDF to HTML in C# (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Easily Convert PDF to HTML in PHP (Tutorial)</title>
		<link>https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-php-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 10 Oct 2025 15:43:23 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[convert pdf to html in PHP]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[PDF TO HTML conversion PHP]]></category>
		<category><![CDATA[PDF to HTML PHP]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37421</guid>

					<description><![CDATA[<p>In this article, I’ll show you how I use our BuildVu library to convert PDF files into HTML. As a developer, I’ve found BuildVu to be the best tool for turning PDFs into clean, browser-friendly HTML content. If you want to learn more about the PDF format or why converting PDF to HTML is so [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-php-tutorial/">Easily Convert PDF to HTML in PHP (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-34951" src="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png" alt="PDF to HTML using Java (Icon)" width="300" height="300" srcset="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png 300w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-150x150.png 150w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>In this article, I’ll show you how I use our BuildVu library to <a href="https://www.idrsolutions.com/buildvu/pdf-to-html">convert PDF files into HTML</a>. As a developer, I’ve found BuildVu to be the best tool for turning PDFs into clean, browser-friendly HTML content. </p>
<p>If you want to learn more about the <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/">PDF format</a> or <a href="https://blog.idrsolutions.com/why-convert-pdf-documents-to-html/">why converting PDF to HTML is so beneficial</a>, I’ve also linked some detailed articles that explain these topics.</p>
<h2>HTML for PHP Developers</h2>
<p>PHP is widely used for building dynamic websites, and converting PDFs to HTML allows developers to display PDF content directly within a browser. Efficient PDF to HTML conversion allows PHP developers to automate workflows such as invoice generation, report display, and content extraction.</p>
<h2>Convert PDF to HTML using PHP</h2>
<p>Although the services can be accessed with standard HTTP requests, this tutorial uses our open-source <a href="https://github.com/idrsolutions/idrsolutions-php-client">PHP IDRCloudClient</a>, which offers a straightforward PHP wrapper for the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md">REST API</a>.</p>
<h3>Prerequisites</h3>
<p>To install the <a href="https://packagist.org/packages/idrsolutions/idrsolutions-php-client">idrsolutions-php-client package</a> using Composer, execute the following command:</p>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>composer require idrsolutions/idrsolutions-php-client</code></pre>
<h3>Code Examples</h3>
<p>Here is a basic code example demonstrating how to generate HTML from PDF. Configuration options and advanced features are detailed below:<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'><!--?php require_once __DIR__ . &quot;/PATH/TO/vendor/autoload.php&quot;; use IDRsolutions\IDRCloudClient; $endpoint = &quot;https://cloud.idrsolutions.com/cloud/&quot; . IDRCloudClient::INPUT_BUILDVU; $parameters = array( //'token' =&gt; 'Token', // Required only when connecting to the IDRsolutions trial and cloud subscription service&lt;br ?--> &#8216;input&#8217; =&gt; IDRCloudClient::INPUT_UPLOAD,<br />
&#8216;file&#8217; =&gt; __DIR__ . &#8216;path/to/file.pdf&#8217;<br />
);

<br />$results = IDRCloudClient::convert(array(<br />
&#8216;endpoint&#8217; =&gt; $endpoint,<br />
&#8216;parameters&#8217; =&gt; $parameters<br />
));

<br />IDRCloudClient::downloadOutput($results, __DIR__ . &#8216;/&#8217;);

<br />echo $results[&#8216;downloadUrl&#8217;];</code></pre></p>
<h3>Return result to a callback url</h3>
<p>The BuildVu Microservice supports a callback URL to send the <a href="https://github.com/idrsolutions/buildvu-microservice-example/blob/master/API.md#conversion-status">status</a> upon conversion completion, eliminating the need to constantly poll the service. You can provide the callback URL to the parameters array as demonstrated below:<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>$parameters = array(<br />
//&#8217;token&#8217; =&gt; &#8216;Token&#8217;, // Required only when connecting to the IDRsolutions trial and cloud subscription service<br />
&#8216;input&#8217; =&gt; IDRCloudClient::INPUT_UPLOAD,<br />
&#8216;callbackUrl&#8217; =&gt; &#8216;http://listener.url&#8217;,<br />
&#8216;file&#8217; =&gt; __DIR__ . &#8216;path/to/file.pdf&#8217;<br />
);</code></pre></p>
<h3>Configuration Options</h3>
<p>The BuildVu API allows for conversion customization using a stringified JSON object with key-value pair configuration options. Add these settings to the parameters array. A comprehensive list of options for converting PDF files to HTML or SVG can be found <a href="https://www.idrsolutions.com/docs/buildvu/settings/">here</a>.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>&#8216;settings&#8217; =&gt; &#8216;{&quot;key&quot;:&quot;value&quot;,&quot;key&quot;:&quot;value&quot;}&#8217;</code></pre></p>
<h3>Upload by URL</h3>
<p>In addition to uploading a local file, you can provide a URL for the BuildVu Microservice to download and convert. Simply replace the input and file values in the parameters array with the following.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>&#8216;input&#8217; =&gt; IDRCloudClient.DOWNLOAD<br />
&#8216;url&#8217; =&gt; &#8216;http://exampleURL/exampleFile.pdf&#8217;</code></pre></p>
<h3>Using Authentication</h3>
<p>If you require authentication for your BuildVu Microservice, provide username and password when converting and downloading HTML from PDF. Add two variables named username and password to the parameters array, as shown below.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>&#8216;username&#8217; =&gt; &#8216;Username_If_Required&#8217;,<br />
&#8216;password&#8217; =&gt; &#8216;Password_If_Required&#8217;,</code></pre></p>
<p>In such cases, you&#8217;ll also need to provide the authentication values to the downloadOutput method.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>IDRCloudClient::downloadOutput($results, __DIR__ . &#8216;/&#8217;,&#8217;newFileName&#8217;,&#8217;username&#8217;,&#8217;password&#8217;);</code></pre></p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-php-tutorial/">Easily Convert PDF to HTML in PHP (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Easily convert PDF to HTML in Java (Tutorial)</title>
		<link>https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-java-tutorial/</link>
		
		<dc:creator><![CDATA[Leon Atherton]]></dc:creator>
		<pubDate>Fri, 10 Oct 2025 15:31:00 +0000</pubDate>
				<category><![CDATA[BuildVu]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[convert pdf to html in java]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[pdf to html conversion]]></category>
		<category><![CDATA[pdf to html java]]></category>
		<category><![CDATA[pdf to html tutorial]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37418</guid>

					<description><![CDATA[<p>PDF to HTML conversion helps improve your PDF content for browser display. BuildVu is one of the leading PDF to HTML solution for developers. In this article I will explain how to use our PDF files to HTML API to convert documents into HTML with BuildVu. Why convert PDF to HTML? Converting PDF to HTML [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-java-tutorial/">Easily convert PDF to HTML in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-34951" src="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png" alt="PDF to HTML using Java (Icon)" width="300" height="300" srcset="https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-300x300.png 300w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3-150x150.png 150w, https://blog.idrsolutions.com/app/uploads/2024/09/Untitled-design-3.png 500w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="https://www.idrsolutions.com/buildvu/pdf-to-html">PDF to HTML conversion</a> helps improve your PDF content for browser display. <a href="https://www.idrsolutions.com/buildvu/">BuildVu</a> is one of the leading PDF to HTML solution for developers. In this article I will explain how to use our <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/">PDF files</a> to HTML API to convert documents into HTML with BuildVu.</p>
<h2>Why convert PDF to HTML?</h2>
<p>Converting PDF to HTML makes your documents easier to display on web and mobile devices, providing a smoother user experience. HTML content is also fully searchable and indexable by search engines, helping boost SEO.</p>
<p>We also have a <a href="https://blog.idrsolutions.com/why-convert-pdf-documents-to-html">dedicated article</a> discussing the advantages of converting PDF to HTML.</p>
<h2>Convert PDF to HTML using Java</h2>
<ol>
<li>Download the <a href="https://www.idrsolutions.com/buildvu/trial-download">BuildVu trial jar</a></li>
<li>Add the BuildVu Jar to your project libraries</li>
<li>Choose <a href="https://files.idrsolutions.com/maven/site/buildvu/apidocs/org/jpedal/render/output/ConversionOptions.html">conversion options</a></li>
<li>Choose <a href="https://files.idrsolutions.com/maven/site/buildvu/apidocs/org/jpedal/render/output/IDRViewerOptions.html">viewer options</a></li>
<li>Set PDF file path and output directory</li>
</ol>
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>HTMLConversionOptions conversionOptions = new HTMLConversionOptions();<br />
// Set conversion options here e.g. conversionOptions.setCompressImages(true);

<br />IDRViewerOptions viewerOptions = new IDRViewerOptions();<br />
// Set viewer options here e.g. viewerOptions.setViewerUI(IDRViewerOptions.ViewerUI.Clean);

<br />File pdfFile = new File(&quot;C:/MyDocument.pdf&quot;);<br />
File outputDir = new File(&quot;C:/MyOutputDirectory/&quot;);

<br />PDFtoHTML5Converter converter = new PDFtoHTML5Converter(pdfFile, outputDir, conversionOptions, viewerOptions);

<br />try {<br />
converter.convert();<br />
} catch (PdfException e) {<br />
e.printStackTrace();<br />
}</code></pre>
<p>&nbsp;</p>
<h2>Office Docs to HTML?</h2>
<p>BuildVu’s main function is to convert PDFs to HTML5, but it can also process Office documents if you first use <a href="https://www.libreoffice.org/download/download/">LibreOffice</a> to convert them to PDF. Once LibreOffice is installed, the DocumentToPDFConverter class automates this step for you.<br />
<pre class='line-numbers' data-ad=BuildVu><code class='language-java'>if (DocumentToPDFConverter.hasConvertibleFileType(document)) {<br />
    try {<br />
        DocumentToPDFConverter.convert(document, libreOfficeExecutablePath);

<br />        // Code to convert generated PDF file to HTML5 goes here

<br />    } catch (IOException e) {<br />
        // Problem occurred &#8211; see Javadoc for reasons<br />
    } catch (InterruptedException e) {<br />
        // Process was interrupted<br />
    }<br />
} else {<br />
    // File type not supported*<br />
}<br />
</code></pre></p>
<p>&nbsp;</p>
<p>With over 20 years of experience working with PDFs, we have many other blog posts that can help you understand the <a href="https://blog.idrsolutions.com/understanding-the-pdf-file-format/">PDF file format</a>.</p>
<p>The post <a href="https://blog.idrsolutions.com/easily-convert-pdf-to-html-in-java-tutorial/">Easily convert PDF to HTML in Java (Tutorial)</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/leon/">Leon Atherton</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>World&#8217;s Collide: Generational Diversity is Your Superpower</title>
		<link>https://blog.idrsolutions.com/worlds-collide-generational-diversity-is-your-superpower/</link>
		
		<dc:creator><![CDATA[Nadir]]></dc:creator>
		<pubDate>Thu, 02 Oct 2025 15:49:38 +0000</pubDate>
				<category><![CDATA[idrsolutions]]></category>
		<category><![CDATA[Cross-generational teams]]></category>
		<category><![CDATA[generational diversity]]></category>
		<category><![CDATA[Millennials in SaaS]]></category>
		<category><![CDATA[SaaS leadership]]></category>
		<category><![CDATA[workplace]]></category>
		<guid isPermaLink="false">https://blog.idrsolutions.com/?p=37377</guid>

					<description><![CDATA[<p>&#160; At Business of Software USA 2025, IDRsolutions&#8217; very own Mark Stephens and Chika Emebo are tackling a challenge every SaaS company is facing: How to bring out the best when different generations are working side by side. We live in an age where the workplace is home to Boomers, Gen X, Millennials, and Zoomers. [&#8230;]</p>
<p>The post <a href="https://blog.idrsolutions.com/worlds-collide-generational-diversity-is-your-superpower/">World&#8217;s Collide: Generational Diversity is Your Superpower</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://blog.idrsolutions.com/app/uploads/2025/09/Chika-Mark.png"><img loading="lazy" decoding="async" src="https://blog.idrsolutions.com/app/uploads/2025/09/Chika-Mark.png" alt="" width="699" height="473" class="aligncenter size-full wp-image-37378" srcset="https://blog.idrsolutions.com/app/uploads/2025/09/Chika-Mark.png 699w, https://blog.idrsolutions.com/app/uploads/2025/09/Chika-Mark-300x203.png 300w" sizes="auto, (max-width: 699px) 100vw, 699px" /></a><br />
&nbsp;</p>
<p>At <a href="https://businessofsoftware.org/events/bos-usa-2025/">Business of Software USA 2025</a>, IDRsolutions&#8217; very own Mark Stephens and Chika Emebo are tackling a challenge every SaaS company is facing: How to bring out the best when different generations are working side by side.</p>
<p>We live in an age where the workplace is home to Boomers, Gen X, Millennials, and Zoomers. Each group arrives with different formative experiences, methods of communication and even expectation of work! That mix provides enormous potential, yet it also creates plenty of scope for frustration and misunderstanding if left unchecked.</p>
<p>Chika, a proud Zoomer and Mark, an avid Gen Xer, will break away from tired stereotypes and dig into what really sets these generations apart. More importantly, they will share how companies can transform those differences into strengths!</p>
<p>The biggest opportunity is not just about balancing skillsets, it is about embracing diverse perspectives while finding new ways to collaborate.</p>
<p>Chika and Mark&#8217;s talk will cover:</p>
<ul>
<li>How to understand the values and motivations that drive each generation.</li>
<li>Practical techniques for bridging communication gaps that slow teams down.</li>
<li>Ways to unlock cross-generational collaboration that leads to more innovation.</li>
</ul>
<p>In SaaS, where the pace is fast and the pressure is high, resilient and high-functioning teams can be your greatest competitive advantage. Mark and Chika will provide a practical roadmap to help leaders and teams make the most of this once-in-a-lifetime opportunity.</p>
<p>Generational diversity does not have to be a recipe for disaster. With the right mindset it becomes a superpower, a way to build stronger, more creative and more adaptable organizations.</p>
<p><a href="https://businessofsoftware.org/events/bos-usa-2025/turning-generational-diversity-into-your-superpower/">Click here</a> to learn more about our upcoming talk and <a href="https://businessofsoftware.org/events/bos-usa-2025/">here</a> if you&#8217;re interested in the attending one of the best SaaS conference of the year!</p>
<p>The post <a href="https://blog.idrsolutions.com/worlds-collide-generational-diversity-is-your-superpower/">World&#8217;s Collide: Generational Diversity is Your Superpower</a> appeared first on <a href="https://blog.idrsolutions.com">Java PDF Blog</a> and was written by <a href="https://blog.idrsolutions.com/author/nadir/">Nadir</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
