Rpreview issues - PDF
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Rpreview issues - PDF
image2pdf embeds images only. How does it do in such a small size?
How is MSWord doing it?
Let us not rule out.
It is just that we do not know how they are doing it.
How is MSWord doing it?
Let us not rule out.
It is just that we do not know how they are doing it.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Rpreview issues - PDF
I think image2pdf do the same think of my code but: without libharu and removing the redundant and unused commands, may be should be interesting compare the PDF result, almost the not binary part...
And I think that MSWord convert the EMF in word (lines, text-box) and then the word is converted in PDF (It would explain the bigger size)
obviously they are IMHO
For images, there is a support, I tried some files from http://frazmitic.free.fr/emfexplorer/do ... _Resources some works others no for example the tiger works
I'd be curious about the "LISTADO DE ARTICULOS" of Mastintin, can you send a emf to antonino.perricone_AT_yahoo_DOT_it ?
And I think that MSWord convert the EMF in word (lines, text-box) and then the word is converted in PDF (It would explain the bigger size)
obviously they are IMHO
For images, there is a support, I tried some files from http://frazmitic.free.fr/emfexplorer/do ... _Resources some works others no for example the tiger works
I'd be curious about the "LISTADO DE ARTICULOS" of Mastintin, can you send a emf to antonino.perricone_AT_yahoo_DOT_it ?
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Rpreview issues - PDF
Mr. Antonio
Thanks for the explanation.
Thanks for the explanation.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Rpreview issues - PDF
Very interesting conversation
Very interesting previous conversation http://fivetechsupport.com/forums/viewt ... 15#p212073
Very interesting previous conversation http://fivetechsupport.com/forums/viewt ... 15#p212073
Re: Rpreview issues - PDF
I've been away from this for awhile ( traveling ) but saw the recent update to comments. As the originator of the thread I wanted to share my ultimate resolution.
I have used Img2Pdf for many years and it has been very good. However, I was not using color in any of my printouts. They are all directly coded with the tPrinter class and have worked quite well. The PDF's created with Img2Pdf were small and created quickly.
When I decided to add color, I had some problems. So I used SayText( ) instead of Say( ) method and this created problems with my older version of Img2Pdf. Those issues were improved with the newer release of that library, but some still existed. For example, the Box( ) method required enlargement or text within the box, though fine on the preview, would cut off lines in the PDF. In addition, the length of the SayText( ) would have to be defined to fit inside of any other boxes/shading or they would cut off the graphic in the PDF. Finally, I used a watermark on the document ( invoice ), using SayImage( ) and it would not display at all.
If I used the native FWH output, I did not need to make any changes to my coding, and the PDF's were perfect copies of the preview and the printed document. Although the documents were larger, they were still acceptable for emailing.
As a result of this, for invoices, which were the only documents I was using color / graphics, I have the system set to use the native FWH PDF generation, and for all of the report documents that remain simply text without graphics I continue to use the Img2Pdf.
This topic has created interest in providing the best PDF's within FWH and I will be happy to test any options that people may provide. I know people always like samples, but my invoice printout is quite detailed, and involves about 1500 lines of code, so it would be a bit difficult to "condense" into a testable size.
I look forward to the further discussions on this topic.
I have used Img2Pdf for many years and it has been very good. However, I was not using color in any of my printouts. They are all directly coded with the tPrinter class and have worked quite well. The PDF's created with Img2Pdf were small and created quickly.
When I decided to add color, I had some problems. So I used SayText( ) instead of Say( ) method and this created problems with my older version of Img2Pdf. Those issues were improved with the newer release of that library, but some still existed. For example, the Box( ) method required enlargement or text within the box, though fine on the preview, would cut off lines in the PDF. In addition, the length of the SayText( ) would have to be defined to fit inside of any other boxes/shading or they would cut off the graphic in the PDF. Finally, I used a watermark on the document ( invoice ), using SayImage( ) and it would not display at all.
If I used the native FWH output, I did not need to make any changes to my coding, and the PDF's were perfect copies of the preview and the printed document. Although the documents were larger, they were still acceptable for emailing.
As a result of this, for invoices, which were the only documents I was using color / graphics, I have the system set to use the native FWH PDF generation, and for all of the report documents that remain simply text without graphics I continue to use the Img2Pdf.
This topic has created interest in providing the best PDF's within FWH and I will be happy to test any options that people may provide. I know people always like samples, but my invoice printout is quite detailed, and involves about 1500 lines of code, so it would be a bit difficult to "condense" into a testable size.
I look forward to the further discussions on this topic.
Tim Stone
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
http://www.MasterLinkSoftware.com
timstone@masterlinksoftware.com
Using: FWH 19.06 with Harbour 3.2.0 / Microsoft Visual Studio Community 2019
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Rpreview issues - PDF
Now that all the experts are here, this appears to be the best place for me to learn from them.
I downloaded Mr. Antonio's emf2pdf.prg from this link:
https://github.com/APerricone/emf2pdf
In case this is not the final version, I would be grateful if I am directed to the final version.
This is my test program
I added emf2pdf.prg to the link list, after making these minor modifications:
1) Commented out the function Main()
2) Added call to function GetFonts() at the beginning of the function CreatePDF(...)
3) The function CreatePDF() expects directory of emf files whereas I am passing an array of emf files. Therefore I modified this line
4) Got two undeclared symbols and so I added these two local variable declarations
(i)
(ii)
These are the only changes I made.
Used "harupdf.ch" from \harbour\contrib\hbhpdf\ folder
Linked \harbour\lib\hbhpdf.lib
Linked libhpdf.lib provided to by Mr. Cristobal saying this to be the libharu.lib.
Built and executed. The pdf file generation was instantaneous.
This is my preview:
This is the pdf generated:
Looks like I am doing something wrong. I sincerely request the experts to guide me the correct way.
I downloaded Mr. Antonio's emf2pdf.prg from this link:
https://github.com/APerricone/emf2pdf
In case this is not the final version, I would be grateful if I am directed to the final version.
This is my test program
Code: Select all
#include "fivewin.ch"
REQUEST DBFCDX
//----------------------------------------------------------------------------//
function Main()
USE CUSTOMER VIA "DBFCDX"
SET FILTER TO RECNO() < 20
GO TOP
TPreview():bSaveAsPDF := { |oPreview| TestPDF( oPreview ) }
XBROWSER "CUSTOMER" COLUMNS "FIRST", "CITY", "SALARY"
return nil
function TestPDF( oPreview )
CreatePDF( "newtest.pdf", oPreview:oDevice:aMeta ) // emf2pdf.prg
ShellExecute( 0, "open", "newtest.pdf" )
return nil
1) Commented out the function Main()
2) Added call to function GetFonts() at the beginning of the function CreatePDF(...)
3) The function CreatePDF() expects directory of emf files whereas I am passing an array of emf files. Therefore I modified this line
Code: Select all
for each f in aMetas
// hMeta := GetEnhMetaFile(f[1])
hMeta := GetEnhMetaFile(f)
(i)
Code: Select all
static proc pdf_Header(pdf,pRecord,pTable)
local page // GNR
Code: Select all
static proc pdf_TextOut(page,pRecord)
LOCAL i // GNR
Used "harupdf.ch" from \harbour\contrib\hbhpdf\ folder
Linked \harbour\lib\hbhpdf.lib
Linked libhpdf.lib provided to by Mr. Cristobal saying this to be the libharu.lib.
Built and executed. The pdf file generation was instantaneous.
This is my preview:
This is the pdf generated:
Looks like I am doing something wrong. I sincerely request the experts to guide me the correct way.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Rpreview issues - PDF
You did it wrong, emf2pdf.prg is a very old version where I tried to do the conversion in harbour, after I am passed to C++.
You must add Emf2Pdf.cpp to your project, adding the define __HARBOUR__ to c compiler (with command line -D__HARBOUR__) in this way this piece of code at end of emf2pdf.cpp will be compiled:
so the code to use are (fromhttps://github.com/APerricone/emf2pdf/b ... t/main.prg)
and
edit: removed debug code from sample
You must add Emf2Pdf.cpp to your project, adding the define __HARBOUR__ to c compiler (with command line -D__HARBOUR__) in this way this piece of code at end of emf2pdf.cpp will be compiled:
Code: Select all
#ifdef __HARBOUR__
#include <hbapi.h>
#include <hbhpdf.h>
HB_FUNC(HPDF_ADDEMF) // pdf (Pointer), cEMFFIle (stringa)
{
HPDF_Doc pdf = hb_HPDF_Doc_par(1);
if (pdf == 0)
{
hb_ret();
return;
}
Emf2Pdf conv(pdf);
conv.AddEMF(hb_parc(2));
hb_ret();
}
#endif
Code: Select all
TPreview():bSaveAsPDF := {|o| TPrinter2PDF(o:oDevice)}
Code: Select all
PROC TPrinter2PDF(oPrn, cFile)
LOCAL i, oPdf := HPDF_New()
DEFAULT cFile := cGetFile( "(*.pdf)|*.pdf|", "Select PDF File to Save",, CurDir(), .T. )
//if !empty(oPrn:aMeta)
// ? oPrn:aMeta[1]
//endif
for i:=1 to len(oPrn:aMeta)
HPDF_ADDEMF(oPdf, oPrn:aMeta[i])
next
HPDF_SaveToFile( oPdf, cFile)
return
Last edited by AntoninoP on Thu May 09, 2019 2:22 pm, edited 1 time in total.
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Rpreview issues - PDF
I have tried with "Microsoft Print to PDF" and it gives a great result.
This code to test ( you have to have win10 and the printer installed. )
This code to test ( you have to have win10 and the printer installed. )
Code: Select all
TPreview():bSaveAsPDF := { |o| SaveMSPdf( o ) }
Function SaveMSPdf( oPreview )
local cPrnName := "Microsoft Print to PDF"
If AScan( aGetPrinters(), cPrnName ) > 0
oPreview:SelPrinter( cPrnName )
oPreview:PrintPage()
else
Msginfo( "impresora "+ cPrnName + " no encontrada" )
endif
Return nil
Re: Rpreview issues - PDF
mastintin wrote:I have tried with "Microsoft Print to PDF" and it gives a great result.
This code to test ( you have to have win10 and the printer installed. )Code: Select all
TPreview():bSaveAsPDF := { |o| SaveMSPdf( o ) } Function SaveMSPdf( oPreview ) local cPrnName := "Microsoft Print to PDF" If AScan( aGetPrinters(), cPrnName ) > 0 oPreview:SelPrinter( cPrnName ) oPreview:PrintPage() else Msginfo( "impresora "+ cPrnName + " no encontrada" ) endif Return nil
Microsoft Print to PDF use is limited.
Only Windows 10.
How to silent mode ?
How to configure ?
How to assignt pdf full file path name ?
Limited, I think.
Regards.
Re: Rpreview issues - PDF
Yes Correct.hmpaquito wrote: Microsoft Print to PDF use is limited.
Only Windows 10.
How to silent mode ?
How to configure ?
How to assignt pdf full file path name ?
Limited, I think.
Regards.
Re: Rpreview issues - PDF
AntoninoP , more code for TPrinter2PDF. RoundRect support
It would be necessary to clean the code and do more intensive tests.
It would be necessary to clean the code and do more intensive tests.
Code: Select all
void Emf2Pdf::ParseFile()
{
....
case EMR_ROUNDRECT: nRead += RoundRectangle(); break;
.....
}
//-------------------------------
#include <math.h>
#ifndef min
#define min(a,b) ((a)<(b)?(a):(b))
#endif
size_t Emf2Pdf::RoundRectangle()
{
size_t ret = 0;
RECTL bound;
fread(&bound, 4, 4, f); ret += 16;
PRINT_DBG(" (%ix%i)-(%ix%i) \r\n", bound.right, bound.bottom, bound.left, bound.top);
float x = bound.left * xScale;
float r = bound.right * xScale;
float b = currHeight - bound.bottom * yScale;
float t = currHeight - bound.top * yScale;
float w = (bound.right - bound.left) * xScale;
float h = (bound.bottom - bound.top) * yScale;
unsigned long cx;
unsigned long cy;
fread(&cx, 4, 1, f); ret += 4;
fread(&cy, 4, 1, f); ret += 4;
PRINT_DBG(" %i points\r\n", cx);
PRINT_DBG(" %i points\r\n", cy);
float fcx = cx *xScale;
float fcy = cy *yScale;
float nRound = min( fcx, fcy ) ;
double nRay ;
float currWidth = HPDF_Page_GetWidth( page ) ;
if ( currWidth > currHeight ) {
nRay = round(min( nRound, int(h)/2 )) ;
}
else
{
nRay = round(min( nRound, int(w)/2) ) ;
}
HPDF_Page_MoveTo ( page, x + nRay, t ) ;
HPDF_Page_LineTo ( page, r - nRay, t ) ;
HPDF_Page_CurveTo( page, r, t, r, t, r, t - nRay ) ;
HPDF_Page_LineTo ( page, r, b + nRay );
HPDF_Page_CurveTo( page, r, b, r, b, r - nRay, b ) ;
HPDF_Page_LineTo ( page, x + nRay, b ) ;
HPDF_Page_CurveTo( page, x, b, x, b, x, b + nRay ) ;
HPDF_Page_LineTo ( page, x, t - nRay ) ;
HPDF_Page_CurveTo( page, x, t, x, t, x + nRay, t ) ;
// HPDF_Page_GSave(page) ;
if (currentPen.width > 0 && currentBrush.solid)
{
HPDF_Page_FillStroke(page);
}
else if (currentPen.width > 0)
{
HPDF_Page_Stroke(page);
}
else if (currentBrush.solid)
{
HPDF_Page_Fill(page);
}
return ret;
}