Author: jghali
Date: Mon Jun  5 09:17:57 2017
New Revision: 22052

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22052
Log:
#14840: fix case of PDF being wrongly offset on export when using PDF embedding 
option

Modified:
    trunk/Scribus/scribus/pdflib_core.cpp

Modified: trunk/Scribus/scribus/pdflib_core.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22052&path=/trunk/Scribus/scribus/pdflib_core.cpp
==============================================================================
--- trunk/Scribus/scribus/pdflib_core.cpp       (original)
+++ trunk/Scribus/scribus/pdflib_core.cpp       Mon Jun  5 09:17:57 2017
@@ -9717,15 +9717,17 @@
                        importedObjects[page->GetObject()->Reference()] = xObj;
                        writer.startObj(xObj);
                        PutDoc("<<\n/Type /XObject\n/Subtype /Form\n/FormType 
1");
-                       PoDoFo::PdfRect pagesize = page->GetPageSize();
+                       PoDoFo::PdfRect pageRect   = page->GetArtBox(); // 
Because scimagedataloader_pdf use ArtBox
                        int rotation = page->GetRotation();
                        QTransform pageM;
-                       pageM.scale(1.0/pagesize.GetWidth(), 
1.0/pagesize.GetHeight());
-                       pageM.rotate(-rotation);
-                       PutDoc("\n/BBox [" + Pdf::toPdf(pagesize.GetLeft()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetBottom()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetLeft() + 
pagesize.GetWidth()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetBottom() + 
pagesize.GetHeight()));
+                       pageM.translate(pageRect.GetLeft(), 
pageRect.GetBottom());
+                       pageM.scale(pageRect.GetWidth(), pageRect.GetHeight());
+                       pageM.rotate(rotation);
+                       pageM = pageM.inverted();
+                       PutDoc("\n/BBox [" + Pdf::toPdf(pageRect.GetLeft()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetBottom()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetLeft() + 
pageRect.GetWidth()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetBottom() + 
pageRect.GetHeight()));
                        PutDoc("]");
                        PutDoc("\n/Matrix [" + Pdf::toPdf(pageM.m11()) + " "
                                                                 + 
Pdf::toPdf(pageM.m12()) + " "
@@ -9738,7 +9740,7 @@
                        else if (rotation == 180)
                                PutDoc("1 1");
                        else if (rotation == 270)
-                               PutDoc(Pdf::toPdf(pagesize.GetHeight() / 
pagesize.GetWidth()) + " " + Pdf::toPdf(1.0 - 1.0 / (pagesize.GetHeight() / 
pagesize.GetWidth())));
+                               PutDoc("1 0");
                        else
                                PutDoc("0 0");
                        PutDoc("]");
@@ -9821,14 +9823,14 @@
                        imgInfo.ResNum = ResCount;
                        ResCount++;
                        // Avoid a divide-by-zero if width/height are less than 
1 point:
-                       imgInfo.Width  = qMax(1, (int) pagesize.GetWidth());
-                       imgInfo.Height = qMax(1, (int) pagesize.GetHeight());
-                       imgInfo.xa  = sx * pagesize.GetWidth()/imgInfo.Width;
-                       imgInfo.ya  = sy * pagesize.GetHeight()/imgInfo.Height;
-                       // Width/Height are integers and may not exactly equal 
pagesize.GetWidth()/
-                       // pagesize.GetHeight(). Adjust scale factor to 
compensate for the difference.
-                       imgInfo.sxa = sx * pagesize.GetWidth()/imgInfo.Width;
-                       imgInfo.sya = sy * pagesize.GetHeight()/imgInfo.Height;
+                       imgInfo.Width  = qMax(1, (int) pageRect.GetWidth());
+                       imgInfo.Height = qMax(1, (int) pageRect.GetHeight());
+                       imgInfo.xa  = sx * pageRect.GetWidth()/imgInfo.Width;
+                       imgInfo.ya  = sy * pageRect.GetHeight()/imgInfo.Height;
+                       // Width/Height are integers and may not exactly equal 
pageRect.GetWidth()/
+                       // pageRect.GetHeight(). Adjust scale factor to 
compensate for the difference.
+                       imgInfo.sxa = sx * pageRect.GetWidth()/imgInfo.Width;
+                       imgInfo.sya = sy * pageRect.GetHeight()/imgInfo.Height;
 
                        return true;
                }
@@ -9843,15 +9845,17 @@
                        importedObjects[page->GetObject()->Reference()] = xObj;
                        writer.startObj(xObj);
                        PutDoc("<<\n/Type /XObject\n/Subtype /Form\n/FormType 
1");
-                       PoDoFo::PdfRect pagesize = page->GetPageSize();
+                       PoDoFo::PdfRect pageRect = page->GetArtBox(); // 
Because scimagedataloader_pdf use ArtBox
                        int rotation = page->GetRotation();
                        QMatrix pageM;
-                       pageM.scale(1.0/pagesize.GetWidth(), 
1.0/pagesize.GetHeight());
-                       pageM.rotate(-rotation);
-                       PutDoc("\n/BBox [" + Pdf::toPdf(pagesize.GetLeft()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetBottom()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetLeft() + 
pagesize.GetWidth()));
-                       PutDoc(" " + Pdf::toPdf(pagesize.GetBottom() + 
pagesize.GetHeight()));
+                       pageM.translate(pageRect.GetLeft(), 
pageRect.GetBottom());
+                       pageM.scale(pageRect.GetWidth(), pageRect.GetHeight());
+                       pageM.rotate(rotation);
+                       pageM = pageM.inverted();
+                       PutDoc("\n/BBox [" + Pdf::toPdf(pageRect.GetLeft()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetBottom()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetLeft() + 
pageRect.GetWidth()));
+                       PutDoc(" " + Pdf::toPdf(pageRect.GetBottom() + 
pageRect.GetHeight()));
                        PutDoc("]");
                        PutDoc("\n/Matrix [" + Pdf::toPdf(pageM.m11()) + " "
                                                                 + 
Pdf::toPdf(pageM.m12()) + " "
@@ -9864,7 +9868,7 @@
                        else if (rotation == 180)
                                PutDoc("1 1");
                        else if (rotation == 270)
-                               PutDoc(Pdf::toPdf(pagesize.GetHeight() / 
pagesize.GetWidth()) + " " + Pdf::toPdf(1.0 - 1.0 / (pagesize.GetHeight() / 
pagesize.GetWidth())));
+                               PutDoc("1 0");
                        else
                                PutDoc("0 0");
                        PutDoc("]");
@@ -9962,14 +9966,14 @@
                        imgInfo.ResNum = ResCount;
                        ResCount++;
                        // Avoid a divide-by-zero if width/height are less than 
1 point:
-                       imgInfo.Width  = qMax(1, (int) pagesize.GetWidth());
-                       imgInfo.Height = qMax(1, (int) pagesize.GetHeight());
-                       imgInfo.xa  = sx * pagesize.GetWidth()/imgInfo.Width;
-                       imgInfo.ya  = sy * pagesize.GetHeight()/imgInfo.Height;
-                       // Width/Height are integers and may not exactly equal 
pagesize.GetWidth()/
-                       // pagesize.GetHeight(). Adjust scale factor to 
compensate for the difference.
-                       imgInfo.sxa = sx * pagesize.GetWidth()/imgInfo.Width;
-                       imgInfo.sya = sy * pagesize.GetHeight()/imgInfo.Height;
+                       imgInfo.Width  = qMax(1, (int) pageRect.GetWidth());
+                       imgInfo.Height = qMax(1, (int) pageRect.GetHeight());
+                       imgInfo.xa  = sx * pageRect.GetWidth() / imgInfo.Width;
+                       imgInfo.ya  = sy * pageRect.GetHeight() / 
imgInfo.Height;
+                       // Width/Height are integers and may not exactly equal 
pageRect.GetWidth()/
+                       // pageRect.GetHeight(). Adjust scale factor to 
compensate for the difference.
+                       imgInfo.sxa = sx * pageRect.GetWidth() / imgInfo.Width;
+                       imgInfo.sya = sy * pageRect.GetHeight() / 
imgInfo.Height;
 
                        return true;
                }


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to