Răsfoiți Sursa

* More fixes from Graeme Geldenhuys:
pdf tests: extended Page.DrawImage (pixels) test with different UnitOfMeasure values.
pdf tests: Implements Page.DrawImage (UnitsOfMeasure) unit tests.
pdf: Fixed DrawImage() bug detected by unit tests.
pdf: fixed failing test due to varying string types.

git-svn-id: trunk@33573 -

michael 9 ani în urmă
părinte
comite
8416517b14
2 a modificat fișierele cu 71 adăugiri și 2 ștergeri
  1. 1 1
      packages/fcl-pdf/src/fppdf.pp
  2. 70 1
      packages/fcl-pdf/tests/fppdf_test.pas

+ 1 - 1
packages/fcl-pdf/src/fppdf.pp

@@ -1808,7 +1808,7 @@ begin
   p2.X := AWidth;
   p2.Y := AHeight;
   DoUnitConversion(p2);
-  AddObject(Document.CreateImage(p1.X, p1.Y, round(p2.Y), round(p2.Y), ANumber));
+  AddObject(Document.CreateImage(p1.X, p1.Y, round(p2.X), round(p2.Y), ANumber));
 end;
 
 procedure TPDFPage.DrawImage(const APos: TPDFCoord; const AWidth, AHeight: TPDFFloat; const ANumber: integer);

+ 70 - 1
packages/fcl-pdf/tests/fppdf_test.pas

@@ -1,6 +1,7 @@
 unit fppdf_test;
 
 {$mode objfpc}{$H+}
+{$codepage utf8}
 
 interface
 
@@ -188,6 +189,7 @@ type
   published
     procedure   TestWrite;
     procedure   TestPageDrawImage_Pixels;
+    procedure   TestPageDrawImage_UnitsOfMeasure;
   end;
 
 
@@ -650,6 +652,7 @@ procedure TTestPDFUTF8String.TestWrite;
 var
   o: TPDFUTF8String;
   fnt: integer;
+  s8: UTF8String;
 begin
   PDF.Options := []; // disable all compression
   fnt := PDF.AddFont(cFont1, 'Liberation Sans', clBlack);
@@ -666,7 +669,8 @@ begin
   S.Size := 0;  // empty out the Stream data
 
   { Length1 seems to be a special case? }
-  o := TPDFUTF8String.Create(PDF, #$C2#$A3+#$C2#$BB, fnt); //  UTF-8 text of "£»"
+  s8 := #$C2#$A3+#$C2#$BB;
+  o := TPDFUTF8String.Create(PDF, s8, fnt); //  UTF-8 text of "£»"
   try
     TMockPDFUTF8String(o).Write(S);
     //                             £ | » |
@@ -1376,6 +1380,7 @@ var
   img: TMockPDFImage;
 begin
   p := PDF.Pages.AddPage;
+  p.UnitOfMeasure := uomMillimeters;
   AssertEquals('Failed on 1', 0, p.ObjectCount);
   p.DrawImage(10, 20, 200, 100, 1);
   AssertEquals('Failed on 2', 1, p.ObjectCount);
@@ -1391,6 +1396,70 @@ begin
     // restore graphics state
     'Q'+CRLF,
     S.DataString);
+
+  S.Size := 0;  // clear the stream data
+
+  p := PDF.Pages.AddPage;
+  p.UnitOfMeasure := uomCentimeters;
+  AssertEquals('Failed on 6', 0, p.ObjectCount);
+  p.DrawImage(10, 20, 200, 100, 1);
+  AssertEquals('Failed on 7', 1, p.ObjectCount);
+  img := TMockPDFImage(p.Objects[0]);
+  AssertTrue('Failed on 8', img <> nil);
+  AssertEquals('Failed on 9', '', S.DataString);
+  img.Write(S);
+  AssertEquals('Failed on 10',
+    // save graphics state
+    'q'+CRLF+
+    '200 0 0 100 283.46 275.07 cm'+CRLF+
+    '/I1 Do'+CRLF+
+    // restore graphics state
+    'Q'+CRLF,
+    S.DataString);
+end;
+
+procedure TTestPDFImage.TestPageDrawImage_UnitsOfMeasure;
+var
+  p: TPDFPage;
+  img: TMockPDFImage;
+begin
+  p := PDF.Pages.AddPage;
+  p.UnitOfMeasure := uomMillimeters;
+  AssertEquals('Failed on 1', 0, p.ObjectCount);
+  p.DrawImage(10, 20, 20.0, 10.0, 1);
+  AssertEquals('Failed on 2', 1, p.ObjectCount);
+  img := TMockPDFImage(p.Objects[0]);
+  AssertTrue('Failed on 3', img <> nil);
+  AssertEquals('Failed on 4', '', S.DataString);
+  img.Write(S);
+  AssertEquals('Failed on 5',
+    // save graphics state
+    'q'+CRLF+
+    '57 0 0 28 28.35 785.31 cm'+CRLF+
+    '/I1 Do'+CRLF+
+    // restore graphics state
+    'Q'+CRLF,
+    S.DataString);
+
+  S.Size := 0;  // clear the stream data
+
+  p := PDF.Pages.AddPage;
+  p.UnitOfMeasure := uomCentimeters;
+  AssertEquals('Failed on 6', 0, p.ObjectCount);
+  p.DrawImage(10, 20, 20.0, 10.0, 1);
+  AssertEquals('Failed on 7', 1, p.ObjectCount);
+  img := TMockPDFImage(p.Objects[0]);
+  AssertTrue('Failed on 8', img <> nil);
+  AssertEquals('Failed on 9', '', S.DataString);
+  img.Write(S);
+  AssertEquals('Failed on 10',
+    // save graphics state
+    'q'+CRLF+
+    '567 0 0 283 283.46 275.07 cm'+CRLF+
+    '/I1 Do'+CRLF+
+    // restore graphics state
+    'Q'+CRLF,
+    S.DataString);
 end;
 
 { TTestPDFLineStyle }