<?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>Features &#8211; Digital Metaphors</title>
	<atom:link href="https://www.digital-metaphors.com/category/features/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.digital-metaphors.com</link>
	<description></description>
	<lastBuildDate>Mon, 02 Dec 2024 17:41:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.digital-metaphors.com/wp-content/uploads/2018/03/cropped-FavIcon-32x32.png</url>
	<title>Features &#8211; Digital Metaphors</title>
	<link>https://www.digital-metaphors.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Merging Reports &#8211; Part 2, Archives</title>
		<link>https://www.digital-metaphors.com/merging-reports-part-2-merging-archives/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Tue, 23 Jul 2024 22:09:18 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www.digital-metaphors.com/?p=29901</guid>

					<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Part 2: Merging Reports using the Archive Merging Utility In the first part of this series, we discussed how to merge reports using subreports.  Today we are going to take a look at another method: Merging Archives. Generating a report as an archive file is a great [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong><img fetchpriority="high" decoding="async" class="size-medium wp-image-29902 alignleft" src="https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-300x300.jpg" alt="" width="300" height="300" srcset="https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-300x300.jpg 300w, https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-150x150.jpg 150w, https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-768x768.jpg 768w, https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-600x600.jpg 600w, https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments-100x100.jpg 100w, https://www.digital-metaphors.com/wp-content/uploads/2024/07/MergeDocuments.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Part 2: Merging Reports using the Archive Merging Utility</strong></p>
<p>In the <a href="https://www.digital-metaphors.com/merging-reports-part-1-merging-with-subreports/">first part</a> of this series, we discussed how to merge reports using subreports.  Today we are going to take a look at another method: Merging Archives.</p>
<p>Generating a report as an archive file is a great way to save a snapshot of that report to file for later use. The resulting file, when viewed, is an exact replica of the original report output when it was generated without the need for data or report manipulation.</p>
<p>The simplicity of archive files make them the perfect starting point for the next part in our series of merging reports. With the use of the built-in Archive Merging Utility, merging multiple archive files into a single file is an almost trivial task.</p>
<p>Whether numerous archive files are already saved to file or database or multiple reports require quick merging without redesign or further code, merging archives is a handy tool to have in your merging arsenal.</p>
<p>See the following article for how to utilize the Archive Merging Utility (TppRAFMerge class) to easily merge multiple archives into one.</p>
<p><a href="https://rbwiki.digital-metaphors.com/output/archive/merging-archive-files/">https://rbwiki.digital-metaphors.com/output/archive/merging-archive-files/</a></p>
<p><strong>Pros:</strong><br />
&#8211; Archive files are easy to generate and are proven to contain correct output.<br />
&#8211; Archive files print/export quickly due to zero overhead and merging requires minimal code.<br />
&#8211; Once merged, exporting an archive to different file formats is simple using existing RB architecture.</p>
<p><strong>Cons:</strong><br />
&#8211; Creating archive files adds a new step when another file format is needed.<br />
&#8211; Archive files are not &#8220;live&#8221; reports<br />
&#8211; Editing archive files once created can be time consuming</p>
<p>Merging archives is yet another useful way to combine separate reports into a single document. While this method really shines when archive files have already been created, it can also be used to simply merge reports even when archive files are not ultimately needed.</p>
<p>The next post in our series (Merging Files) is coming soon, stay tuned.</p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Merging Reports &#8211; Part 1, Subreports</title>
		<link>https://www.digital-metaphors.com/merging-reports-part-1-merging-with-subreports/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Wed, 08 May 2024 22:04:26 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www.digital-metaphors.com/?p=29308</guid>

					<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; In the reporting world, efficiency is key. Whether you’re a developer, designer, or end-user, the ability to merge multiple reports into a cohesive whole is a skill you’ll want in your arsenal. Imagine this scenario: You’ve meticulously crafted individual ReportBuilder reports, including data, event code, calculations, etc. — [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-full wp-image-29312" src="https://www.digital-metaphors.com/wp-content/uploads/2024/05/MergeReports1.jpg" alt="" width="256" height="256" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>In the reporting world, efficiency is key. Whether you’re a developer, designer, or end-user, the ability to merge multiple reports into a cohesive whole is a skill you’ll want in your arsenal.</p>
<p>Imagine this scenario: You’ve meticulously crafted individual ReportBuilder reports, including data, event code, calculations, etc. — but now you need to present a unified result. Perhaps you’re compiling a comprehensive report, combining contracts, or assembling a collaborative project. Whatever the reason, merging documents streamlines information, reduces clutter, and ensures a seamless reading experience.</p>
<p>Merging multiple reports into a single document either on screen or exported to file is a very useful and often asked for feature. ReportBuilder natively provides numerous ways to merge reports and this series of posts will address each one.</p>
<p><strong>Part 1: Merging Reports With Subreports</strong></p>
<p>Subreports are a fast and easy way to merge multiple reports with ReportBuilder. Subreports themselves are essentially full featured reports that can be embedded into a main report.</p>
<p>Start with an empty &#8220;container&#8221; report with a detail band only. Add a subreport component for each report you wish to merge. Each subreport will contain an individual report that is loaded from a template file or created manually. The use of Child or Section subreports will determine whether there is a page break between merged reports.</p>
<p>See the following article and example below for how subreports can be used to merge two (or more) reports.</p>
<p><a href="https://rbWiki.digital-metaphors.com/design/layout-design/merge-reports-with-subreports">https://rbWiki.digital-metaphors.com/design/layout-design/merge-reports-with-subreports</a></p>
<p><strong>Pros:</strong></p>
<p>1. Subreports are simple to use and provide visual design options.<br />
2. Saving and loading report templates is quick and straight forward.<br />
3. Reports are merged in the preview as well as when exported or printed.</p>
<p><strong>Cons:</strong></p>
<p>1. Not all report features are available in subreports.<br />
2. All data, calculations, and event code must be present and valid before merging.<br />
3. Sometimes all that&#8217;s needed is a simple merged file.</p>
<p>As you can see, using subreports to merge reports is a very simple an useful method and should be considered for every merging scenario.</p>
<p>Stay tuned for more merging tips and tricks in our upcoming blog series and in the mean time,</p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Helper Routines</title>
		<link>https://www.digital-metaphors.com/helper-routines/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Thu, 29 Feb 2024 22:28:36 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www.digital-metaphors.com/?p=26435</guid>

					<description><![CDATA[A common goal of component developers (like us) is simplifying the job of our customers (other developers) as much as possible. One of the best ways to accomplish this is by adding &#8220;helper routines&#8221; to the product to reduce the amount of time it takes to code an otherwise tedious task. Below are a couple [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A common goal of component developers (like us) is simplifying the job of our customers (other developers) as much as possible. One of the best ways to accomplish this is by adding &#8220;helper routines&#8221; to the product to reduce the amount of time it takes to code an otherwise tedious task.</p>
<p>Below are a couple examples of some helper routines that you may find useful.</p>
<p><strong>1. Web Mail and Cloud Drive service helpers:</strong></p>
<p>Setting up web mail and cloud drive services can be time consuming due to the fact that many of the necessary properties are embedded in numerous sub-classes. For instance, in order to set up Gmail using standard RB properties, the following code is needed:</p><pre class="crayon-plain-tag">ppReport.EmailSettings.ConnectionSettings.WebMail.GmailSettings.OAuth2.ClientID := ClientID;
ppReport.EmailSettings.ConnectionSettings.WebMail.GmailSettings.OAuth2.ClientSecret := ClientSecret;
ppReport.EmailSettings.ConnectionSettings.WebMail.GmailSettings.OAuth2.RedirectURI := RedirectURI;</pre><p>The same would be needed to set up another web mail plugin such as Outlook.com.</p>
<p>With the included WebMailSetup routine, both plugins can be set up with the following code:</p><pre class="crayon-plain-tag">// Redirect URI is optional (defaults to http://localhost)
ppReport.EmailSettings.ConnectionSettings.WebMailSetup(ctGmail, ClientID, ClientSecret);
ppReport.EmailSettings.ConnectionSettings.WebMailSetup(ctOutlookWeb, ClientID, ClientSecret);</pre><p>A similar helper is provided for cloud drive services.</p><pre class="crayon-plain-tag">//Set up all three supported cloud drive services
ppReport.CloudDriveSettings.CloudDriveSetup(ctGoogleDrive, ClientID, ClientSecret);
ppReport.CloudDriveSettings.CloudDriveSetup(ctOneDrive, ClientID, ClientSecret);
ppReport.CloudDriveSettings.CloudDriveSetup(ctDropBox, ClientID, ClientSecret, 'http://localhost:54321');</pre><p><strong>2. Export to file from the Viewer:</strong></p>
<p>When using a TppViewer on a form to view reports, it is commonly necessary to export that report to file directly. This can be troublesome due to the fact that the Viewer itself is connected to an output device (screen). Normally, one would need to manually disconnect the screen device from the report before exporting and reconnect it after exporting has finished. The ExportToFile routine makes this process much easier.</p><pre class="crayon-plain-tag">ppViewer.ExportToFile(dtPDF, FilePath + '\Invoice.pdf');</pre><p>Hopefully this gives you a bit more information on some helpful helper routines that have been added to ReportBuilder. If you find this information useful, let me know and I can make this a series of the various other helpers available. Also, if you would like to see other helper routines added, let me know that as well and we will consider adding them for the next release.</p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EPC QR Codes with ReportBuilder</title>
		<link>https://www.digital-metaphors.com/epc-qr-codes-with-reportbuilder/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Tue, 02 Jan 2024 18:12:50 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www.digital-metaphors.com/?p=25801</guid>

					<description><![CDATA[&#160; &#160; &#160; &#160; &#160; ReportBuilder 22 introduced a number of features to make the life of a report developer easier. One of those features is the ability to easily create an EPC compliant QR Code for making payments in many European countries. While it was possible to create an EPC QR Code in earlier [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="alignleft size-medium wp-image-25802" src="https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image-300x186.png" alt="" width="300" height="186" srcset="https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image-300x186.png 300w, https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image-1024x633.png 1024w, https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image-768x475.png 768w, https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image-600x371.png 600w, https://www.digital-metaphors.com/wp-content/uploads/2024/01/European-Payments-Council-Logo-feat-image.png 1200w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>ReportBuilder 22 introduced a number of features to make the life of a report developer easier. One of those features is the ability to easily create an EPC compliant QR Code for making payments in many European countries.</p>
<p>While it was possible to create an EPC QR Code in earlier versions of ReportBuilder, RB 22 added specific objects and dialogs to simplify the process.</p>
<p>See the following article for more information and a simple example.</p>
<p><a href="https://rbwiki.digital-metaphors.com/rcl/barcode/epc-qr-codes/">https://rbwiki.digital-metaphors.com/rcl/barcode/epc-qr-codes/</a></p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automatically Signing a PDF with ReportBuilder</title>
		<link>https://www.digital-metaphors.com/automatically-signing-a-pdf-with-reportbuilder/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Wed, 10 Aug 2022 20:06:57 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www.digital-metaphors.com/?p=20290</guid>

					<description><![CDATA[Have you ever needed to be sure a document sent is the one being read? We all know that the Internet is a dangerous place for unprotected data. Transferring any un-encrypted data is fair game to be intercepted, stolen, or altered. Digital Signatures are an excellent way to avoid some of these problems. Digital Signatures [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-20291" src="https://www.digital-metaphors.com/wp-content/uploads/2022/08/finger-g80435262a_640-300x169.jpg" alt="" width="300" height="169" srcset="https://www.digital-metaphors.com/wp-content/uploads/2022/08/finger-g80435262a_640-300x169.jpg 300w, https://www.digital-metaphors.com/wp-content/uploads/2022/08/finger-g80435262a_640-600x338.jpg 600w, https://www.digital-metaphors.com/wp-content/uploads/2022/08/finger-g80435262a_640.jpg 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Have you ever needed to be sure a document sent is the one being read? We all know that the Internet is a dangerous place for unprotected data. Transferring any un-encrypted data is fair game to be intercepted, stolen, or altered. Digital Signatures are an excellent way to avoid some of these problems.</p>
<p>Digital Signatures offer a highly secure way to ensure a document or file has not been altered or tampered with after it has been created. The basis for a digital signature is the Digital Certificate. A Digital Certificate is generally a file created manually using encryption software such as OpenSSL or Microsoft IIS, or provided by a certificate authority such as Verisign(<a href="https://www.verisign.com/">https://www.verisign.com/</a>) or Digicert (<a href="https://www.digicert.com/">https://www.digicert.com/</a>). This file contains encrypted information identifying the signer in a specific way. It can be an encrypted representation of the signer&#8217;s actual signature, or simply their name and address just as long as it&#8217;s encrypted and in the proper format.</p>
<p>Using this Digital Certificate, a file hash is created, encrypted, and stored with the original file along with the certificate itself. When the file is later opened, the verification software will create its own hash based on the stored certificate and compare it to the hash stored with the signed file. If the hashes match, one can be sure the file has not been altered since it was &#8220;signed&#8221;.</p>
<p>In past versions of ReportBuilder, it has been possible to add Signature form fields to PDF files before exporting. These Signature fields allow users to digitally sign their PDF documents from within a PDF viewer such as Adobe Acrobat. Now with the introduction of ReportBuilder 21, it is possible to skip the Adobe step and sign a PDF file directly with ReportBuilder.</p>
<p>ReportBuilder 21 utilizes the OpenSSL library to open and process the Digital Certificate file. While ReportBuilder includes the latest build of the OpenSSL library with its installation, it is highly recommended that you download* your own version to ensure the highest security. The Indy Project provides new builds daily at the following location: <a href="https://indy.fulgan.com/SSL/">https://indy.fulgan.com/SSL/</a>.</p>
<p>See the following article and example for more information about this powerful feature of ReportBuilder!</p>
<p><a href="http://rbwiki.digital-metaphors.com/output/pdf/how-to-digitally-sign-a-pdf/">http://rbwiki.digital-metaphors.com/output/pdf/how-to-digitally-sign-a-pdf/</a></p>
<p>* A note about Indy OpenSSL binaries.</p>
<p>The currently supported version of OpenSSL by Indy (for Delphi) is 1.0.2. This version is no longer supported by the OpenSSL Organization but is maintained by the Indy Project. The actual latest stable version of OpenSSL is 1.1.1 (until September 2023). It is possible to download this version from the Indy site under /Archive/Experimental/. Do not be deterred by the &#8220;Experimental&#8221; label, it simply implies that those versions of OpenSSL are not yet fully tested for use with Indy. While the older versions of OpenSSL are still updated with the latest bug-fixes and will function with ReportBuilder, it is strongly recommended that you download and use the latest supported version.</p>
<p>For more information about OpenSSL versioning, see the following web page: <a href="https://www.openssl.org/source/">https://www.openssl.org/source/</a></p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Email: Multi-Service</title>
		<link>https://www.digital-metaphors.com/email-multi-service/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Wed, 26 Jan 2022 00:19:09 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">http://www.digital-metaphors.com/?p=18409</guid>

					<description><![CDATA[One of the new and exciting features added for ReportBuilder 21 is the ability to register and use multiple email plugins at once. ReportBuilder has supported sending emails from within the product since version 10. This was done by registering a single Email Plugin, each of which supported a different email-sending technology. Initially it was [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-18420" src="https://www.digital-metaphors.com/wp-content/uploads/2022/01/EmailMenu-1.jpg" alt="EmailMenu" width="242" height="181" />One of the new and exciting features added for ReportBuilder 21 is the ability to register and use multiple email plugins at once.</p>
<p>ReportBuilder has supported <a href="http://rbwiki.digital-metaphors.com/output/email/email-fundamentals/"><strong>sending emails</strong></a> from within the product since version 10. This was done by registering a single Email Plugin, each of which supported a different email-sending technology. Initially it was possible to either send the email directly by connecting to a SMTP server or transfer the email (with report file attached) to the email client (Outlook) installed on the user&#8217;s machine and send from there. These plugins are called &#8220;SMTP Plugins&#8221; because they either directly or indirectly interact with the user&#8217;s SMTP server to send the message. Due to the nature of these sending techniques the restriction of only registering a single email plugin at a time was appropriate.</p>
<p>With the introduction of the <a href="http://rbwiki.digital-metaphors.com/output/email/web-mail-overview/"><strong>Web Mail Plugins</strong></a> for version 18, it became clear that the ability to register multiple email plugins at once would be useful. This is why we decided to re-design the Email Plugin architecture for ReportBuilder 21 to make it possible.</p>
<p>The new feature allows multiple Web Mail plugins and a single SMTP plugin to be registered simultaneously giving the user the option to select the email service they would like to use. When multiple email plugins are registered, a handy drop-down menu is enabled making the selection process even easier. It&#8217;s also possible to select the email plugin in code using the EmailSettings.ConnectionSettings.MailService property.</p>
<p>Please see the following RBWiki article and demo for more information and instruction on how to utilize this new feature.</p>
<p><a href="http://rbwiki.digital-metaphors.com/output/email/how-to-multiple-email-plugins/">http://rbwiki.digital-metaphors.com/output/email/how-to-multiple-email-plugins/</a></p>
<p>Happy Reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TLS Version and Indy</title>
		<link>https://www.digital-metaphors.com/tls-version-and-indy/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Wed, 05 Jan 2022 18:46:40 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Support]]></category>
		<guid isPermaLink="false">http://www.digital-metaphors.com/?p=18167</guid>

					<description><![CDATA[&#160; I was recently asked if the ReportBuilder Indy email plugin supports TLS version 1.2. The answer depended on whether Indy supports TLS 1.2, which thankfully it does! Many email providers (i.e. Gmail and Outlook) are now requiring the use of this version to connect to their SMTP servers. After researching a bit, I found [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-18166" src="https://www.digital-metaphors.com/wp-content/uploads/2022/01/Handshake--296x300.jpg" alt="TLS Handshake" width="296" height="300" srcset="https://www.digital-metaphors.com/wp-content/uploads/2022/01/Handshake--296x300.jpg 296w, https://www.digital-metaphors.com/wp-content/uploads/2022/01/Handshake-.jpg 338w" sizes="auto, (max-width: 296px) 100vw, 296px" />I was recently asked if the ReportBuilder Indy email plugin supports <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a> version 1.2. The answer depended on whether Indy supports TLS 1.2, which thankfully it does! Many email providers (i.e. Gmail and Outlook) are now requiring the use of this version to connect to their SMTP servers. After researching a bit, I found that while Indy does support the use of TLS 1.2, it is not the default. Below are my findings and some sample code get this working with the current version of ReportBuilder (21.01).</p>
<p>When connecting directly to a secure SMPT server with the ReportBuilder Indy email plugin, it is necessary to set the EmailSettings.ConnectionSettings.UseTLS property to True. It is also necessary for the latest <a href="https://indy.fulgan.com/SSL/">OpenSSL</a> .dll files to be accessible to the application executable. (See the UseTLS topic in the installed RB help for more information).</p>
<p>With UseTLS set to True, an IOHandler is automatically created to make the secure connection to the server using OpenSSL. Problems can arise with newer servers as Indy uses TLS 1.0 as its default security protocol. To change this in ReportBuilder, you can use the Report.BeforePrint event to access the TidSMTP object in code.</p><pre class="crayon-plain-tag">uses
ppSMTPIndy10, ppEmail, IdSSLOpenSSL, IdSMTP;

...

procedure TForm1.ppReport1BeforePrint(Sender: TObject);
var
  lEmail: TppEmail;
  lSMTP: TIdSMTP;
begin

  lEmail := TppEmail(ppReport1.Email);
  lSMTP := TppSMTPIndy(lEmail.SMTP).IndySMTP;

  TIdSSLIOHandlerSocketOpenSSL(lSMTP.IOHandler).SSLOptions.Method := sslvTLSv1_2;

end;</pre><p><strong>Note:</strong> For now, the BeforePrint event works because it fires after the SMTP plugin is setup but before it attempts to connect to the server. For a future release of ReportBuilder, I believe a new event should be added to the plugin that fires before the connection is made which would allow logical separation of email related code and report event code.</p>
<p>Another option is to create your own IO handler and assign its SSL options. For this option to function, the UseTLS property must be set to False as the developer is taking care of creating the IO handler manually.</p><pre class="crayon-plain-tag">uses
ppSMTPIndy10, ppEmail, IdSSLOpenSSL, IdExplicitTLSClientServerBase;

...

var
  lEmail: TppEmail;
  lSMTP: TidSMTP;
  lIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin

  ppReport1.EmailSettings.ConnectionSettings.Port := 587;
  ppReport1.EmailSettings.ConnectionSettings.UseTLS := False;

  lEmail := TppEmail(ppReport1.Email);
  lSMTP := TppSMTPIndy(lEmail.SMTP).IndySMTP;

  lIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lSMTP);

  try
    lIOHandler.SSLOptions.Method := sslvTLSv1_2;

    lSMTP.IOHandler := lIOHandler;
    lSMTP.UseTLS := utUseExplicitTLS;

    ppReport1.SendMail;

  finally
    lIOHandler.Free;
  end;

end;</pre><p>Hopefully this gives you a better idea how to enable TLS 1.2 for the ReportBuilder Indy email plugin.  The main take-away here is that the underlying Indy TidSMTP object is easily accessible from ReportBuilder allowing for complete customization. For more information about customizing Indy from ReportBuilder, see the following Wiki article.</p>
<p>Happy Reporting!</p>
<blockquote class="wp-embedded-content" data-secret="kd3xj4cBBA"><p><a href="http://rbWiki.digital-metaphors.com/output/email/how-to-customize-indy-email-settings/">How To&#8230;Customize Indy Email Settings</a></p></blockquote>
<p><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  src="http://rbWiki.digital-metaphors.com/output/email/how-to-customize-indy-email-settings/embed/#?secret=kd3xj4cBBA" data-secret="kd3xj4cBBA" width="600" height="338" title="&#8220;How To&#8230;Customize Indy Email Settings&#8221; &#8212; rbWiki" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RESTful Reporting</title>
		<link>https://www.digital-metaphors.com/restful-reporting/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Fri, 15 Mar 2019 21:26:05 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">http://www.digital-metaphors.com/?p=6414</guid>

					<description><![CDATA[&#160; The ReportBuilder REST Services components provide a RESTful platform to publish RB reports to mobile iOS and Andriod clients.  Extending your existing Delphi desktop solutions via REST services is a great way to provide users with the mobile cloud access they expect. As a desktop developer,  you may be thinking you lack the skills and/or time to implement such [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignright size-medium wp-image-6859" src="https://www.digital-metaphors.com/wp-content/uploads/2019/03/Cloud-icon-300x300.png" alt="Cloud-icon" width="300" height="300" srcset="https://www.digital-metaphors.com/wp-content/uploads/2019/03/Cloud-icon-300x300.png 300w, https://www.digital-metaphors.com/wp-content/uploads/2019/03/Cloud-icon-150x150.png 150w, https://www.digital-metaphors.com/wp-content/uploads/2019/03/Cloud-icon-180x180.png 180w, https://www.digital-metaphors.com/wp-content/uploads/2019/03/Cloud-icon.png 512w" sizes="auto, (max-width: 300px) 100vw, 300px" />The ReportBuilder REST Services components provide a RESTful platform to publish RB reports to mobile iOS and Andriod clients.  Extending your existing Delphi desktop solutions via REST services is a great way to provide users with the mobile cloud access they expect.</p>
<p>As a desktop developer,  you may be thinking you lack the skills and/or time to implement such a solution.  The goal of the RB REST Services solution is to leverage Delphi and RB to provide a RAD (almost no code) way to enter the mobile realm.  Let&#8217;s go over a few key details.</p>
<p><strong>Background</strong><br />
All ReportBuilder reports are created using our VCL designer.  Generally RB applications store reports as &#8220;template&#8221; or &#8220;archive&#8221; files which are loaded as needed.  The report definitions or archived reports can be stored to file, database or Delphi forms/datamodules.</p>
<p>RB REST services provides an easy way to view and print these same reports using FMX components on multiple platforms.  We did this by creating a VCL REST server which takes care of generating the reports, then sending them via HTTP to our FMX client for viewing/printing.</p>
<p><strong>Tutorials</strong><br />
This might sound complex but the good news is that we already did all the heavy lifting.  If you have a bunch of saved reports in a directory or DB, you can be up and running in a matter of minutes!</p>
<p>1.  Create a server: Creating a server can be done in as little as 4 easy steps (with only 2 lines of code).  See the following article for more information about creating a ReportBuilder REST Server and a simple tutorial.  The finished tutorial is installed with ReportBuilder in the demos directory.</p>
<blockquote class="wp-embedded-content" data-secret="2tyo4PyCm5"><p><a href="http://rbWiki.digital-metaphors.com/rest/rest-server/rest-server/">REST Server</a></p></blockquote>
<p><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  src="http://rbWiki.digital-metaphors.com/rest/rest-server/rest-server/embed/#?secret=2tyo4PyCm5" data-secret="2tyo4PyCm5" width="600" height="338" title="&#8220;REST Server&#8221; &#8212; rbWiki" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p>&nbsp;</p>
<p>2. Create a client: We provide three useful FMX components to make building a client as easy as possible.  These components allow for the creation of a phone, tablet, or desktop explorer/viewer with minimal code and setup.  They are also completely customizable which gives you the ability to tailor its look and feel to match your existing app.  The following link gives an overview of the components used along with simple tutorials on creating a phone or tablet client application.  Same as the server, the finished tutorial is installed with ReportBuilder in the demos directory.</p>
<blockquote class="wp-embedded-content" data-secret="J64JwBBukz"><p><a href="http://rbWiki.digital-metaphors.com/rest/rest-client/rest-client-fmx/">REST Client (FMX)</a></p></blockquote>
<p><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  src="http://rbWiki.digital-metaphors.com/rest/rest-client/rest-client-fmx/embed/#?secret=J64JwBBukz" data-secret="J64JwBBukz" width="600" height="338" title="&#8220;REST Client (FMX)&#8221; &#8212; rbWiki" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p>&nbsp;</p>
<p>Implementing RB REST services is extremely simple and provides a powerful way to display and print your reports from multiple platforms.  I hope this post along with the tutorials provide a starting point for creating your own mobile reporting applications.  Happy reporting!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PDF/A and Metadata</title>
		<link>https://www.digital-metaphors.com/pdfa-and-metadata/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Thu, 31 May 2018 21:02:28 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">http://www.digital-metaphors.com/?p=3389</guid>

					<description><![CDATA[PDF/A is a very useful and popular format used for the long term archiving of digital documents. ReportBuilder 19 introduces numerous PDF/A related features including support for the PDF/A-2, PDF/A-3, and PDF/A-3 ZUGFeRD formats (PDF/A-1 format has been available since RB 14). PDF/A is highly restrictive in the features it allows and information it requires. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong><img loading="lazy" decoding="async" class="alignright size-full wp-image-3390" src="https://www.digital-metaphors.com/wp-content/uploads/2018/05/archive-icon-24.png" alt="archive-icon" width="200" height="200" srcset="https://www.digital-metaphors.com/wp-content/uploads/2018/05/archive-icon-24.png 200w, https://www.digital-metaphors.com/wp-content/uploads/2018/05/archive-icon-24-150x150.png 150w, https://www.digital-metaphors.com/wp-content/uploads/2018/05/archive-icon-24-180x180.png 180w" sizes="auto, (max-width: 200px) 100vw, 200px" /></strong></p>
<p>PDF/A is a very useful and popular format used for the long term archiving of digital documents. ReportBuilder 19 introduces numerous PDF/A related features including support for the PDF/A-2, PDF/A-3, and PDF/A-3 ZUGFeRD formats (PDF/A-1 format has been available since RB 14).</p>
<p>PDF/A is highly restrictive in the features it allows and information it requires. One aspect of the PDF/A format that differentiates it from standard PDF is the required metadata that must be embedded into the file describing various aspects of the document itself. This metadata is formatted as XML and can contain any number of custom entries. As new PDF/A formats have been added to ReportBuilder, the necessity to customize this metadata has become increasingly important, especially for the PDF/A-3 ZUGFeRD format which is quickly becoming a standard for Eurozone invoices.  For more information about the PDF/A format, see the following Wikipedia article:  <a href="https://en.wikipedia.org/wiki/PDF/A">https://en.wikipedia.org/wiki/PDF/A</a></p>
<p>Starting with ReportBuilder 19.01, it is possible to customize the default metadata using the newly added TppPDFDevice.OnGetPDFMetadata event. The OnGetPDFMetadata event fires after the default metadata has been generated but before it has been written to the final PDF file. A copy of the default metadata is passed as a parameter of the event which can be altered manually or by using the Delphi XML classes. This gives developers complete control over the contents of the metadata portion of the PDF/A file.</p>
<p>See the following article for a detailed description and example of using this new event to alter the default metadata of a PDF/A document.</p>
<p><a href="http://rbwiki.digital-metaphors.com/output/pdf/how-to-customize-pdfa-metadata/">http://rbwiki.digital-metaphors.com/output/pdf/how-to-customize-pdfa-metadata/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Interactive PDF with ReportBuilder 19</title>
		<link>https://www.digital-metaphors.com/interactive-pdf-with-reportbuilder-19/</link>
		
		<dc:creator><![CDATA[Nico Cizik]]></dc:creator>
		<pubDate>Fri, 06 Apr 2018 22:47:05 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">http://www.digital-metaphors.com/?p=2764</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="wpb-content-wrapper"><section  class="wpb_row main_row  no-seperator" style="padding-top:70px; padding-bottom:70px;"><div class="row-inner"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"><div class="vc_row wpb_row vc_inner vc_row-fluid"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"></div></div></div></div>
	<div class="wpb_text_column wpb_content_element" >
		<div class="wpb_wrapper">
			<p><a href="https://www.digital-metaphors.com/wp-content/uploads/2018/04/edit-pdf-form.png"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-2768" src="https://www.digital-metaphors.com/wp-content/uploads/2018/04/edit-pdf-form-300x180.png" alt="PDF Form Icon" width="300" height="180" srcset="https://www.digital-metaphors.com/wp-content/uploads/2018/04/edit-pdf-form-300x180.png 300w, https://www.digital-metaphors.com/wp-content/uploads/2018/04/edit-pdf-form.png 501w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>ReportBuilder 16 introduced PDF form fields and checkboxes. This allowed for the creation of dynamic PDF forms that could be altered and printed with the user&#8217;s custom data. ReportBuilder 19 includes a number of new ways to manipulate the existing form fields as well as the addition of PDF buttons.</p>
<p><strong>Form Field customization</strong></p>
<p>In the past, PDF form fields were defined using the TppLabel.FormField boolean property. This property has now been deprecated and replaced with the TppLabel.FormFieldSettings property. Use the FormFieldType sub-property to define which type of form field you would like to use. There are also a number of useful settings such as required fields, read only fields, and the ability to limit the number of characters a form field can hold. The FormFieldTitle property has also been moved into the FormFieldSettings and can be very useful for manual form editing and form submission. See the following help topics in the installed RB documentation for more information on each property.</p>
<p>&#8211; TppFormFieldSettings.FormFieldType<br />
&#8211; TppFormFieldSettings.FieldRequired<br />
&#8211; TppFormFieldSettings.FieldReadOnly<br />
&#8211; TppFormFieldSettings.FieldMaxChars<br />
&#8211; TppFormFieldSettings.FieldTitle</p>
<p><strong>PDF Form submit, reset, execute</strong></p>
<p>ReportBuilder 19 also introduces PDF Buttons. A button inside a PDF document can be used to submit form data to a web app (similar to an HTML form), reset all existing form data, or execute Adobe-supported JavaScript from within the document.</p>
<p>To create a PDF button, place a TppLabel on a report and simply set the FormFieldSettings.FormFieldType property to fftSubmit or fftReset. When the fftSubmit option is selected, you will use the FormFieldSettings.FormSubmitInfo property to define its behavior.</p>
<p>From whithin the FormSubmitInfo options, it is possible to define a URL that the form data will be sent. Use the SubmitMethod to define whether the web application receiving the form data expects HTTP GET or HTTP POST format.</p>
<p>Finally it is possible to take complete control over how the PDF button behaves by executing custom Adobe-supported JavaScript. Use the JavaScript property to define the script to be executed. Below is a simple example of how this can be done.</p><pre class="crayon-plain-tag">lblSubmit.FormFieldSettings.PDFFormFieldType := fftSubmit;
lblSubmit.FormFieldSettings.FormSubmitInfo.SubmitMethod := fstJavaScript;
lblSubmit.FormFieldSettings.FormSubmitInfo.JavaScript.Add('app.alert("Congratulations! You just pressed a button!");');</pre><p>Note that all JavaScript needs to be Adobe supported. See the following web site for more information.</p>
<p><a href="https://www.adobe.com/devnet/acrobat/javascript.html">https://www.adobe.com/devnet/acrobat/javascript.html</a></p>
<p>Hopefully this will give you a better idea how the new interactive PDF features can be utilized to create even more powerful PDF reports. An updated RBWiki article has been posted with the above information and a new example. Enjoy!</p>
<p><a href="http://rbwiki.digital-metaphors.com/output/pdf/pdf-forms/">http://rbwiki.digital-metaphors.com/output/pdf/pdf-forms/</a></p>

		</div>
	</div>
</div></div></div></div></section>
</div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
