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