|
Hello Ingo
Sorry my english .. eheheh
This is the code.. i open the file ORIGINAL.PDF get the text and draw in a new file GERADO.PDF.
Perhaps, the file GERADO.PDF is different the ORIGINAL.PDF.
When i open the file GERADO.PDF in acrobat or foxit, select a tex, copy and cut..doesn't work
For example.. there is a text "PODER JUDICIÁRIO" if i select this text, copy and cut in notepad.. the result is "PODE R JUDICIÁRI O" with spaces..
I need read a PDF and produce the same pdf....
procedure TfTestePDF.Button3Click(Sender: TObject); var FH: Integer; PR: Integer; SL: TStringList; Data: string; Font: string; Color: string; aColor: TColor; Size: string; X1, Y1, X2, Y2, X3, Y3, X4, Y4: string; Text: string; X, I: Integer; IL: Integer; PageNum: Integer; ImageData: string; ImageLeft, ImageTop, ImageWidth, ImageHeight: Double; QP : TspQuickPDF; //slFont : TStringList; fontsFoundCount: Integer; nFont: Integer; fontControl: TStringList; fontExists: Boolean; StandardFont : Integer; begin QP := TspQuickPDF.CreateUnlocked; try QP.LoadFromFile('C:\Temp\PDF\ORIGINAL.pdf');
// Open the file in direct access mode and store the file handle FH := (QP.DAOpenFile(PChar(Utf8ToAnsi('C:\Temp\PDF\ORIGINAL.pdf')), ''));
// Start a new document QP.NewDocument;
//for PageNum := 1 to QP.DAGetPageCount(FH) do for PageNum := 2 to 2 do begin // Specify that images should be compressed QP.CompressImages(1);
// Get a page reference to the current page PR := QP.DAFindPage(FH, PageNum);
// Create a string list to hold the text data SL := TStringList.Create;
fontControl := TStringList.Create; try SL.Text := Utf8ToAnsi(QP.DAExtractPageText(FH, PR, 4));
// Add each block of text to the new document for X := 0 to SL.Count - 1 do begin Data := SL[X]; Font := Copy(Data, 1, Pos('#', Data) - 2); Delete(Data, 1, Length(Font) + 1); Color := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Color) + 1); Size := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Size) + 1);
X1 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(X1) + 1); Y1 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Y1) + 1); X2 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(X2) + 1); Y2 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Y2) + 1); X3 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(X3) + 1); Y3 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Y3) + 1); X4 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(X4) + 1); Y4 := Copy(Data, 1, Pos(',', Data) - 1); Delete(Data, 1, Length(Y4) + 1);
Text := Copy(Data, 2, Length(Data) - 2);
// Replace the utf-8 encoded TM symbol with the // PDF WinAnsi character code if Pos(#226#132#162, Text) > 0 then Text := StringReplace(Text, #226#132#162, #153, [rfReplaceAll]);
fontExists := false; for I := 0 to fontControl.Count - 1 do begin if (fontControl.Strings = Font) then fontExists := true; end;
If (not fontExists) then begin nFont := QP.AddTrueTypeFont(Font, 0); fontControl.Add(Font); end;
if QP.SelectFont(nFont) = 1 then begin // Set the text size QP.SetTextSize(StrToFloat(StringReplace(Size, '.', ',', [rfReplaceAll])));
// Draw the text, shift up by the font's "descent" value QP.DrawText(StrToFloat(StringReplace(X1, '.', ',', [rfReplaceAll])), StrToFloat(StringReplace(Y1, '.', ',', [rfReplaceAll])) - QP.GetTextDescent, Text);
end; end; finally SL.Free; fontControl.Free; end;
// Find all the images on the page IL := QP.DAGetPageImageList(FH, PR);
// Loop through all the images for X := 1 to QP.DAGetImageListCount(FH, IL) do begin // Read the image data ImageData := QP.DAGetImageDataToString(FH, IL, X);
// Add the image data to the new document QP.AddImageFromString(ImageData, 0);
// Determine the location and size of the image on the page ImageLeft := QP.DAGetImageDblProperty(FH, IL, X, 501); ImageTop := QP.DAGetImageDblProperty(FH, IL, X, 502); ImageWidth := QP.DAGetImageDblProperty(FH, IL, X, 503) - QP.DAGetImageDblProperty(FH, IL, X, 501); ImageHeight := QP.DAGetImageDblProperty(FH, IL, X, 502) - QP.DAGetImageDblProperty(FH, IL, X, 508); // Draw the image onto the new document's page QP.DrawImage(ImageLeft, ImageTop, ImageWidth, ImageHeight); end; // End image loop
end;
// Save the file QP.SaveToFile('C:\Temp\PDF\GERADO'+ '.pdf');
// Remove the document QP.RemoveDocument(QP.SelectedDocument);
finally FreeAndNil(QP); end; end;
|