2013/1/30 Tobias Diekershoff <[email protected]> > Dear list, > > I have a problem compiling PowerPDF and seek your knowledge to solve it. > > I've written a program on Linux where the PowerPDF works perfectly, but > when I tried to compile it on the machine at work (Windows XP) it gives > an > > "Illegal type conversion 'Short String' to 'PChar'" > > in powerpdf/pdftypes.pas lines 1007, 1010 and 1146 (see below). > > I'm using Lazarus 1.0, FPC 2.6.0 and PowerPDF 0.9.9. > > Thanks in advance > Tobias > > ------ Code Sniplet (lines 1005 to 1011)----- > {$IFNDEF UNIX} > Len := MultiByteToWideChar(0, CP_ACP, > PChar(Value), Length(Value), nil, 0); > GetMem(PW, Len * 2); > Len := MultiByteToWideChar(0, CP_ACP, > PChar(Value), Length(Value), PW, Len * 2); > {$ELSE} > > ------ Code Sniplet (lines 1143 to 1147)----- > // _WriteString > procedure _WriteString(const Value: string; AStream: TStream); > begin > AStream.Write(PChar(Value)^, Length(Value)); > end; >
Hm... I'm using PowerPDF fine on Windows 7. I even managed to remove the dependency of LCL to be able to create PDFs and CGI applications: https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/powerpdf http://silvioprog.com.br/cgi-bin/cgi2 program project1; {$mode objfpc}{$H+} uses Classes, FPimage, FPReadJPEG, FPWriteJPEG, PdfDoc, PdfFonts, PdfTypes; function CreateImage(AImage: TFPCustomImage): TPdfImage; var VWriter: TFPWriterJPEG; begin Result := TPdfImage.CreateStream(nil); VWriter := TFPWriterJPEG.Create; try with Result do try AImage.SaveToStream(Stream, VWriter); with Attributes do begin AddItem('Type', TPdfName.CreateName('XObject')); AddItem('Subtype', TPdfName.CreateName('Image')); AddItem('ColorSpace', TPdfName.CreateName('DeviceRGB')); AddItem('Width', TPdfNumber.CreateNumber(AImage.Width)); AddItem('Height', TPdfNumber.CreateNumber(AImage.Height)); AddItem('BitsPerComponent', TPdfNumber.CreateNumber(8)); PdfArrayByName('Filter').AddItem(TPdfName.CreateName('DCTDecode')); end; except Result.Free; raise; end; finally VWriter.Free; end; end; var VPdf: TPdfDoc; VFile: TFileStream; VImage: TFPMemoryImage; begin VPdf := TPdfDoc.Create; VFile := TFileStream.Create('print.pdf', fmCreate); VImage := TFPMemoryImage.Create(0, 0); try VPdf.NewDoc; VPdf.AddPage; VImage.LoadFromFile('image.jpg'); VPdf.AddXObject('Image', CreateImage(VImage)); VPdf.Canvas.DrawXObject(80, 650, VImage.Width, VImage.Height, 'Image'); VPdf.Canvas.TextOut(90, 770, 'Print OK!'); VPdf.SaveToStream(VFile); WriteLn('Print OK!'); finally VImage.Free; VFile.Free; VPdf.Free; end; end. -- Silvio Clécio My public projects - github.com/silvioprog
-- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
