r20009 by jghali - #13014: PDF export creates XObject for every group on every page
scribus-commit
scribus-commit at lists.scribus.net
Thu Apr 16 21:56:50 UTC 2015
Author: jghali
Date: Thu Apr 16 21:56:50 2015
New Revision: 20009
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=20009
Log:
#13014: PDF export creates XObject for every group on every page
Modified:
branches/Version14x/Scribus/scribus/pdflib_core.cpp
branches/Version14x/Scribus/scribus/pdflib_core.h
Modified: branches/Version14x/Scribus/scribus/pdflib_core.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=20009&path=/branches/Version14x/Scribus/scribus/pdflib_core.cpp
==============================================================================
--- branches/Version14x/Scribus/scribus/pdflib_core.cpp (original)
+++ branches/Version14x/Scribus/scribus/pdflib_core.cpp Thu Apr 16 21:56:50 2015
@@ -2868,6 +2868,8 @@
ite = PItems.at(a);
if (ite->LayerNr != ll.LNr)
continue;
+ if (!PDF_ItemIsOnPage(ite, pag, PItems))
+ continue;
QString grcon = "";
if (ite->isGroupControl)
{
@@ -3059,6 +3061,56 @@
retString += "/"+name+" Do\n";
retString += "Q\n";
return retString;
+}
+
+bool PDFLibCore::PDF_ItemIsOnPage(PageItem* item, const Page* page, const QList<PageItem*>& itemList)
+{
+ PageItem* topItem = item;
+
+ if ((!page->pageName().isEmpty()) &&
+ (item->OwnPage != page->pageNr()) &&
+ (item->OwnPage != -1))
+ {
+ return false;
+ }
+
+ int groupID = -1;
+ if (item->isGroupControl && item->Groups.count() > 1)
+ groupID = topItem->Groups.first();
+ if (!item->isGroupControl && item->Groups.count() > 0)
+ groupID = topItem->Groups.first();
+
+ if (groupID >= 0)
+ {
+ for (int i = 0; i < itemList.count(); ++i)
+ {
+ PageItem* pageItem = itemList.at(i);
+ if (pageItem->Groups.count() <= 0)
+ continue;
+ if (pageItem->Groups.first() == groupID)
+ {
+ topItem = pageItem;
+ break;
+ }
+ }
+ }
+
+ topItem->setRedrawBounding();
+ double bLeft, bRight, bBottom, bTop;
+ getBleeds(page, bLeft, bRight, bBottom, bTop);
+ double x = page->xOffset() - bLeft;
+ double y = page->yOffset() - bTop;
+ double w = page->width() + bLeft + bRight;
+ double h1 = page->height()+ bBottom + bTop;
+ double ilw= topItem->lineWidth();
+ double x2 = topItem->BoundingX - ilw / 2.0;
+ double y2 = topItem->BoundingY - ilw / 2.0;
+ double w2 = qMax(topItem->BoundingW + ilw, 1.0);
+ double h2 = qMax(topItem->BoundingH + ilw, 1.0);
+
+ if (!( qMax( x, x2 ) <= qMin( x+w, x2+w2 ) && qMax( y, y2 ) <= qMin( y+h1, y2+h2 )))
+ return false;
+ return true;
}
QString PDFLibCore::PDF_ProcessTableItem(PageItem* ite, const Page* pag)
Modified: branches/Version14x/Scribus/scribus/pdflib_core.h
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=20009&path=/branches/Version14x/Scribus/scribus/pdflib_core.h
==============================================================================
--- branches/Version14x/Scribus/scribus/pdflib_core.h (original)
+++ branches/Version14x/Scribus/scribus/pdflib_core.h Thu Apr 16 21:56:50 2015
@@ -147,7 +147,9 @@
// QString PDFEncode(const QString & in);
QByteArray ComputeMD5(const QString& in);
QByteArray ComputeRC4Key(int ObjNum);
-
+
+ bool PDF_ItemIsOnPage(PageItem* item, const Page* page, const QList<PageItem*>& itemList);
+
bool PDF_ProcessItem(QString& output, PageItem* ite, const Page* pag, uint PNr, bool embedded = false, bool pattern = false);
QString PDF_ProcessTableItem(PageItem* ite, const Page* pag);
QString drawArrow(PageItem *ite, QMatrix &arrowTrans, int arrowIndex);
More information about the scribus-commit
mailing list