Which of the mainstream Delphi report generators (if any) supports generating PDF files that comply with PDF/A standard? I'm mostly curious about FastReports and QuickReport.
We provided an open source report builder, to be used from code, which is able to produce PDF or even PDF/A compliant files.
You create your report from code, then you can preview it on the screen. You can then print or export the report as PDF. Note that the report drawing uses GDI+, even if you embed .emf files or TMetaFile in them: with antialiaising, they just look smooth on screen. There are some report-dedicated methods to create the report, but also a true Canvas property, in which you can draw whatever you want.
You can use the same class without the preview function, just to create a pdf file from some content.
It's free, licensed under MPL/LGPL/GPL, and compiles and run from Delphi 6 up to XE. It's 100% Unicode-ready, even before Delphi 2009.
In order to have your reports being compliant with the PDF/A standard, you must ensure that the ExportPDFA1 property is set to true. Only a sub-set of the font file (i.e. only used characters) will be joined to the pdf content, saving disk space. Therefore PDF/A files will be bigger than PDF files generated with the default options.
Reporting has just been enhanced (in our source code repository): now handle bookmarks, links, and document outline, and life-navigation within the report preview. The generated PDF file also handle those links and outline tree. Some issues were also fixed (about bitmaps or underlined text). And one bitmap will be stored only once in the PDF, if it's drawn several times on the report. So make sure you're using the latest source code repository version.
Have you considered using a PDF printer such as PDF Factory?
Generally the quickest way to get PDF's from reports.
Related
There are two systems. I need to get the document in some format and print it in my application.
The source file should be in a pdf format.
Do you know the component for delphi7 that i could be able to open pdf file and print it on delphi's canvas. Is such approach good for the pdf document quality?
Or which format of the source document could be better to print in delphi application?
Thanks
I think almost all PDF preview components may do it.
When searching - https://www.google.ru/search?client=opera&q=delphi+render+pdf+to+canvas&sourceid=opera - you would instantly get at least few commercial libs:
http://www.gnostice.com/nl_article.asp?id=229&t=Convert_PDF_To_High-Resolution_Images_Using_Delphi
http://www.quickpdflibrary.com/faq/can-i-use-quick-pdf-as-a-viewer-in-my-delphi-application.php
http://www.wpcubed.com/manuals/wpviewpdf/idh_twpviewpdf_printhdc.htm
TCanvas is a wapper around Windows HDC. See http://docwiki.embarcadero.com/Libraries/en/Vcl.Graphics.TCanvas.Handle
I'm having a problem with metafile rendering in my Delphi XE application.
the problem is that when I'm rendering the metafile, the texts are too large. Irfanview and FastReports render it like this:
windows 7 Paint renders it fine: (here's what the text should look like)
Any ideas what is causing this?
Thank you!
emf files are just a list of GDI commands. In fact, they can be "played back" very easily by the system, using standard Windows GDI command (in Delphi, a TMetaFile is just a wrapper around those APIs).
When IrfanView or FastReport renders the metafile content, they just use Windows GDI corresponding commands. When Windows 7 Paint renders the metafile content, it uses the GDI+ renderer. I even think it internally convert the emf file into emf+ format, then renders it with anti-aliaising using GDI+.
So if the emf file renders incorrectly in IrfanView or FastReport, I suspect this is because your metafile is not well formed: the third party graphic engine you are using is producing non standard emf. A possible issue is that the font used is missing in the target system, and GDI does not substitute the font with the same as GDI+ does.
Another possibility is that the emf file is maybe a dual format: it contains both emf format (which was not properly created so is not rendered correctly using GDI) and emf+ format (which is rendered as expected using GDI+). Normally this dual emf/emf+format should not exist: even the official GDI+ library does not allow to save its metafile content in emf+. This is some kind of "monster" format, created by your third-party library.
I suggest the following:
Download and check your emf file with EmfExplorer;
Try to use GDI+ to render the metafile;
Try to use the emf to emf+ converter API.
For using GDI+, take a look at an Open Source SynGdiPlus unit: it will add GDI+ anti-aliaising to your produced bitmap. It is able to convert emf to emf+. It will use native Vista/Seven API (just like Windows 7 paint), or plain Delphi code under Windows XP.
The cause probably is that different monitor size and screen resolution ratio. GDI has parameters HORZRES, HORZSIZE, VERTRES, VERTSIZE. In most cases HORZRES/VERTRES, HORZSIZE/VERTSIZE (resolution ratio and screen ratio) are the same and everything works well... However if they are different (I have found some examples of this happening on servers) then the pixel is assumed to be rectangular, this causes LOGFONT.lfWidth to be calculated "wrongly". LOGFONT.lfWidth determines the aspect ratio of characters and this finally causes the weird looking letters.
One solution is to change the resolution so that HORZRES/VERTRES, HORZSIZE/VERTSIZE match. The other solution is to use a printer DC to render your things. Setting the LOGFONT.lfWidth value explicitly may help. Also updating video driver may help.
I encountered the same problem, I had temporary drawing to a metafile canvas that used GetDC(0) as reference instead of printer DC. Here are some links that have the same problem:
http://us.generation-nt.com/answer/createenhmetafile-app-running-via-remote-desktop-help-27451862.html
http://social.msdn.microsoft.com/Forums/en/windowsgeneraldevelopmentissues/thread/a4a12ed8-c673-4a5c-94e1-7165b16f6955
A bit of a gamble, but:
Maybe has to do with the new system font in Vista+ that newer Delphi's support? If it happened during porting, fixate the font used in the tmetafile in the old and new version.
I'm using Delphi.
I want to know how to extract (all) the icons from an exe file and insert them into another, preserving the order and the index of the icons.
I found some samples of Delphi code using Google but the problem is that it doesn't extract them all.
And I've found some compiled programs (exes) that do one or the other but not both.
Why do I need this: because I have to start some exe files (that have those icons) from virtualized applications. And I want to make some external exe files that have the same name and the same icons.
Thank you for your help.
The source is available for Colin Wilson's XN Resource Editor. It should have what you need.
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm
Alternatively you have the Delphi sample 'ResXplor'. If it's not distributed in your version it's also avalaible to download here: http://radstudiodemos.svn.sourceforge.net/viewvc/radstudiodemos/branches/RadStudio_XE/Delphi/VCL/resXplor/
There was a similar question about extracting icons. PrivateExtractIcons gives you access to specific image sizes in an icon resource, but you need to know the sizes ahead of time, and Microsoft warns that this method is not for general use.
There is a working example of extracting the entire icon resource with all of the image sizes on Delphi Praxis. The example has a problem with 256 pixel images, so it would have to be tweaked to account for these.
I'm looking for an application that will allow me to add mark-ups to pdfs just like adobe acrobat does via the comments option (e.g. stickynotes), including the options of hiding all comments, showing, printing and saving them to the pdf. My application is written using delphi 2009 and this is an additional feature I require.
There doesn't appear to be any vcl providers out there doing this at the moment (?). I've contacted quickpdf, vispdf, etc, etc
I'm particularly interested in hearing from anyone who has done this already / can do this,
thanks,
Matthew
Gnostice are well known for their PDF components for Delphi, specifically PDFtoolkit.
For future readers, Amyuni PDF Creator allows to select (and create) specific components within a PDF file (such as text, images or annotations) and change their attributes. It can be used in Delphi as an ActiveX control.
I have multiple rave reports(projects) in the project(the delphi project) and I want to save them all in one pdf file. How can I do it?
While I don't have any real experience with Rave reports, I also had to perform stitching of multiple "pdf" pages to a single pdf document. I ended up using Gnostice PDFToolkit to do the final merge and it works quite well. In my case I was generating multi-thousand page documents, so i'm sure it will fit your needs.
Does Rave already export to PDF? If so then there are a number of libraries that support merging of PDFs programmatically. The main difference between them will be how many files they can merge at once (some support only two and some support merging a full array at once) and how quickly the output is produced.
If Rave doesn't already export to PDF, however, then you'd likely need a printer driver based PDF component. The idea would be to tell Rave to print the report to a named virtual printer, then use the printer driver based component to capture that print job as a PDF. Once you've got the PDF, you can do the merge.
It's been years since I've personally worked with Rave (last time was in the C++Builder/Delphi 6 days) but hopefully this helps. If you need more info just let me know, I worked at Borland for a long time (before they became Embarcadero) and now work with PDF toolkits for developers.