View Issue Details

IDProjectCategoryView StatusLast Update
0017518ScribusPrintingpublic2025-05-15 06:38
Reporterjirib Assigned Tojghali  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionno change required 
Product Version1.6.5.svn 
Summary0017518: bleed/crop/registration marks and color bar is always added even if bleed area is 0 sized
DescriptionWhen trying to do cover for a book, my goal was to somehow print it.

I created two facing pages starting with left page to have the cover - outside-back and outside-front.

I needed to crop it. Since we do not provide printing it as "spread", I thought I could print it as two
pages where crop marks would be only on top, bottom, outside bleed areas; however, even with
inside bleed set to 0, Scribus always creates the print with marks in inside area, thus preventing
to "merge" cover pages to be delivered to a print shop.

Thus, I tried to cook a diff.
Steps To Reproduce1. two facing pages - starting with left
2. inside bleed set to 0 size
3. enable printing crop marks
4. print

Each pages has crop marks even on "inside".
Additional InformationI haven't compile it, it is just a try. I'm sorry but I'm not really a developer.

---%>---
diff --git a/scribus/scpageoutput.cpp b/scribus/scpageoutput.cpp
index 5143006f9..9f688af64 100644
--- a/scribus/scpageoutput.cpp
+++ b/scribus/scpageoutput.cpp
@@ -1588,7 +1588,7 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
         double bottom = offsetY + height, top = offsetY;
         drawBoxMarks(painter, QRectF(QPointF(left, top), QPointF(right, bottom)), bleedBox, markOffs, markLength);
     }
- if (options.bleedMarks)
+ if (options.bleedMarks && (bleedTop > 0.0 || bleedBottom > 0.0 || bleedLeft > 0.0 || bleedRight > 0.0))
     {
         double left = offsetX - bleedLeft, right = offsetX + width + bleedRight;
         double bottom = offsetY + height + bleedBottom, top = offsetY - bleedTop;
@@ -1596,33 +1596,47 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
     }
     if (options.registrationMarks)
     {
- double posX = (2* offsetX + width) / 2.0 - 7.0;
- double posY = (offsetY + height + bleedBottom + markOffs + 3.0);
- painter->save();
- painter->translate(posX, posY);
- drawRegistrationCross(painter);
- painter->restore();
- posX = (2 * offsetX + width) / 2.0 - 7.0;
- posY = (offsetY - bleedTop - markOffs - 17);
- painter->save();
- painter->translate(posX, posY);
- drawRegistrationCross(painter);
- painter->restore();
-
- posX = (offsetX - bleedLeft - markOffs - 17);
- posY = (2 * offsetY + height) / 2.0 - 7.0;
- painter->save();
- painter->translate(posX, posY);
- drawRegistrationCross(painter);
- painter->restore();
- posX = (offsetX + width + bleedRight + markOffs + 3.0);
- posY = (2 * offsetY + height) / 2.0 - 7.0;
- painter->save();
- painter->translate(posX, posY);
- drawRegistrationCross(painter);
- painter->restore();
- }
- if (options.colorMarks)
+ if (bleedBottom > 0.0)
+ {
+ double posX = (2 * offsetX + width) / 2.0 - 7.0;
+ double posY = offsetY + height + bleedBottom + markOffs + 3.0;
+ painter->save();
+ painter->translate(posX, posY);
+ drawRegistrationCross(painter);
+ painter->restore();
+ }
+
+ if (bleedTop > 0.0)
+ {
+ double posX = (2 * offsetX + width) / 2.0 - 7.0;
+ double posY = offsetY - bleedTop - markOffs - 17;
+ painter->save();
+ painter->translate(posX, posY);
+ drawRegistrationCross(painter);
+ painter->restore();
+ }
+
+ if (bleedLeft > 0.0)
+ {
+ double posX = offsetX - bleedLeft - markOffs - 17;
+ double posY = (2 * offsetY + height) / 2.0 - 7.0;
+ painter->save();
+ painter->translate(posX, posY);
+ drawRegistrationCross(painter);
+ painter->restore();
+ }
+
+ if (bleedRight > 0.0)
+ {
+ double posX = offsetX + width + bleedRight + markOffs + 3.0;
+ double posY = (2 * offsetY + height) / 2.0 - 7.0;
+ painter->save();
+ painter->translate(posX, posY);
+ drawRegistrationCross(painter);
+ painter->restore();
+ }
+ }
+ if (options.colorMarks && bleedTop > 0.0)
     {
         int shade = 100;
         double startX = offsetX + 6.0;
@@ -1686,33 +1700,49 @@ void ScPageOutput::drawBoxMarks(ScPainterExBase* painter, const QRectF& box, con
     double bleedBottom = bleedBox.bottom();
     double bleedTop = bleedBox.top();
     // Top Left
- start.setXY(bleedLeft - offset, top);
- end.setXY (bleedLeft - offset - markSize, top);
- painter->drawLine(start, end);
- start.setXY(left, bleedTop - offset);
- end.setXY (left, bleedTop - offset - markSize);
- painter->drawLine(start, end);
+ if (bleedTop > 0.0 && bleedLeft > 0.0)
+ {
+ start.setXY(bleedLeft - offset, top);
+ end.setXY(bleedLeft - offset - markSize, top);
+ painter->drawLine(start, end);
+
+ start.setXY(left, bleedTop - offset);
+ end.setXY(left, bleedTop - offset - markSize);
+ painter->drawLine(start, end);
+ }
     // Top Right
- start.setXY(bleedRight + offset, top);
- end.setXY (bleedRight + offset + markSize, top);
- painter->drawLine(start, end);
- start.setXY(right, bleedTop - offset);
- end.setXY (right, bleedTop - offset - markSize);
- painter->drawLine(start, end);
+ if (bleedTop > 0.0 && bleedRight > 0.0)
+ {
+ start.setXY(bleedRight + offset, top);
+ end.setXY(bleedRight + offset + markSize, top);
+ painter->drawLine(start, end);
+
+ start.setXY(right, bleedTop - offset);
+ end.setXY(right, bleedTop - offset - markSize);
+ painter->drawLine(start, end);
+ }
     // Bottom Left
- start.setXY(bleedLeft - offset, bottom);
- end.setXY (bleedLeft - offset - markSize, bottom);
- painter->drawLine(start, end);
- start.setXY(left, bleedBottom + offset);
- end.setXY (left, bleedBottom + offset + markSize);
- painter->drawLine(start, end);
+ if (bleedBottom > 0.0 && bleedLeft > 0.0)
+ {
+ start.setXY(bleedLeft - offset, bottom);
+ end.setXY(bleedLeft - offset - markSize, bottom);
+ painter->drawLine(start, end);
+
+ start.setXY(left, bleedBottom + offset);
+ end.setXY(left, bleedBottom + offset + markSize);
+ painter->drawLine(start, end);
+ }
     // Bottom Right
- start.setXY(bleedRight + offset, bottom);
- end.setXY (bleedRight + offset + markSize, bottom);
- painter->drawLine(start, end);
- start.setXY(right, bleedBottom + offset);
- end.setXY (right, bleedBottom + offset + markSize);
- painter->drawLine(start, end);
+ if (bleedBottom > 0.0 && bleedRight > 0.0)
+ {
+ start.setXY(bleedRight + offset, bottom);
+ end.setXY(bleedRight + offset + markSize, bottom);
+ painter->drawLine(start, end);
+
+ start.setXY(right, bleedBottom + offset);
+ end.setXY(right, bleedBottom + offset + markSize);
+ painter->drawLine(start, end);
+ }
 }
 
 void ScPageOutput::drawRegistrationCross(ScPainterExBase* painter)
---%<---
TagsNo tags attached.
PatchNo

Activities

jirib

2025-05-13 14:02

reporter  

marks.diff (5,617 bytes)   
diff --git a/scribus/scpageoutput.cpp b/scribus/scpageoutput.cpp
index 5143006f9..9f688af64 100644
--- a/scribus/scpageoutput.cpp
+++ b/scribus/scpageoutput.cpp
@@ -1588,7 +1588,7 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
 		double bottom = offsetY + height, top = offsetY;
 		drawBoxMarks(painter, QRectF(QPointF(left, top), QPointF(right, bottom)), bleedBox, markOffs, markLength);
 	}
-	if (options.bleedMarks)
+	if (options.bleedMarks && (bleedTop > 0.0 || bleedBottom > 0.0 || bleedLeft > 0.0 || bleedRight > 0.0))
 	{
 		double left = offsetX - bleedLeft, right = offsetX + width + bleedRight;
 		double bottom = offsetY + height + bleedBottom, top = offsetY - bleedTop;
@@ -1596,33 +1596,47 @@ void ScPageOutput::drawMarks(ScPage* page, ScPainterExBase* painter, const Marks
 	}
 	if (options.registrationMarks)
 	{
-		double posX = (2* offsetX + width) / 2.0 - 7.0;
-		double posY = (offsetY + height + bleedBottom + markOffs + 3.0);
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-		posX = (2 * offsetX + width) / 2.0 - 7.0;
-		posY = (offsetY - bleedTop - markOffs - 17);
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-
-		posX = (offsetX - bleedLeft - markOffs - 17);
-		posY = (2 * offsetY + height) / 2.0 - 7.0;
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-		posX = (offsetX + width + bleedRight + markOffs + 3.0);
-		posY = (2 * offsetY + height) / 2.0 - 7.0;
-		painter->save();
-		painter->translate(posX, posY);
-		drawRegistrationCross(painter);
-		painter->restore();
-	}
-	if (options.colorMarks)
+	        if (bleedBottom > 0.0)
+		  {
+		    double posX = (2 * offsetX + width) / 2.0 - 7.0;
+		    double posY = offsetY + height + bleedBottom + markOffs + 3.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedTop > 0.0)
+		  {
+		    double posX = (2 * offsetX + width) / 2.0 - 7.0;
+		    double posY = offsetY - bleedTop - markOffs - 17;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedLeft > 0.0)
+		  {
+		    double posX = offsetX - bleedLeft - markOffs - 17;
+		    double posY = (2 * offsetY + height) / 2.0 - 7.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+
+		if (bleedRight > 0.0)
+		  {
+		    double posX = offsetX + width + bleedRight + markOffs + 3.0;
+		    double posY = (2 * offsetY + height) / 2.0 - 7.0;
+		    painter->save();
+		    painter->translate(posX, posY);
+		    drawRegistrationCross(painter);
+		    painter->restore();
+		  }
+	}
+	if (options.colorMarks && bleedTop > 0.0)
 	{
 		int shade = 100;
 		double startX = offsetX + 6.0;
@@ -1686,33 +1700,49 @@ void ScPageOutput::drawBoxMarks(ScPainterExBase* painter, const QRectF& box, con
 	double bleedBottom = bleedBox.bottom();
 	double bleedTop = bleedBox.top();
 	// Top Left
-	start.setXY(bleedLeft - offset, top);
-	end.setXY  (bleedLeft - offset - markSize, top);
-	painter->drawLine(start, end);
-	start.setXY(left, bleedTop - offset);
-	end.setXY  (left, bleedTop - offset - markSize);
-	painter->drawLine(start, end);
+	if (bleedTop > 0.0 && bleedLeft > 0.0)
+	{
+		start.setXY(bleedLeft - offset, top);
+		end.setXY(bleedLeft - offset - markSize, top);
+		painter->drawLine(start, end);
+
+		start.setXY(left, bleedTop - offset);
+		end.setXY(left, bleedTop - offset - markSize);
+		painter->drawLine(start, end);
+	}
 	// Top Right
-	start.setXY(bleedRight + offset, top);
-	end.setXY  (bleedRight + offset + markSize, top);
-	painter->drawLine(start, end);
-	start.setXY(right, bleedTop - offset);
-	end.setXY  (right, bleedTop - offset - markSize);
-	painter->drawLine(start, end);
+	if (bleedTop > 0.0 && bleedRight > 0.0)
+	{
+		start.setXY(bleedRight + offset, top);
+		end.setXY(bleedRight + offset + markSize, top);
+		painter->drawLine(start, end);
+
+		start.setXY(right, bleedTop - offset);
+		end.setXY(right, bleedTop - offset - markSize);
+		painter->drawLine(start, end);
+	}
 	// Bottom Left
-	start.setXY(bleedLeft - offset, bottom);
-	end.setXY  (bleedLeft - offset - markSize, bottom);
-	painter->drawLine(start, end);
-	start.setXY(left, bleedBottom + offset);
-	end.setXY  (left, bleedBottom + offset + markSize);
-	painter->drawLine(start, end);
+	if (bleedBottom > 0.0 && bleedLeft > 0.0)
+	{
+		start.setXY(bleedLeft - offset, bottom);
+		end.setXY(bleedLeft - offset - markSize, bottom);
+		painter->drawLine(start, end);
+
+		start.setXY(left, bleedBottom + offset);
+		end.setXY(left, bleedBottom + offset + markSize);
+		painter->drawLine(start, end);
+	}
 	// Bottom Right
-	start.setXY(bleedRight + offset, bottom);
-	end.setXY  (bleedRight + offset + markSize, bottom);
-	painter->drawLine(start, end);
-	start.setXY(right, bleedBottom + offset);
-	end.setXY  (right, bleedBottom + offset + markSize);
-	painter->drawLine(start, end);
+	if (bleedBottom > 0.0 && bleedRight > 0.0)
+	{
+		start.setXY(bleedRight + offset, bottom);
+		end.setXY(bleedRight + offset + markSize, bottom);
+		painter->drawLine(start, end);
+
+		start.setXY(right, bleedBottom + offset);
+		end.setXY(right, bleedBottom + offset + markSize);
+		painter->drawLine(start, end);
+	}
 }
 
 void ScPageOutput::drawRegistrationCross(ScPainterExBase* painter)
marks.diff (5,617 bytes)   

jirib

2025-05-13 14:03

reporter   ~0052516

PS: I could not figure out how to prevent presence of 'Page Information' :-(

jghali

2025-05-13 18:48

administrator   ~0052520

Last edited: 2025-05-13 19:10

>> Since we do not provide printing it as "spread", I thought I could print it as two
pages where crop marks would be only on top, bottom, outside bleed areas; however, even with
inside bleed set to 0, Scribus always creates the print with marks in inside area, thus preventing
to "merge" cover pages to be delivered to a print shop.

Professional do not layout covers using spreads or facing pages. Facing pages simply do not work if spine width is several mm. Covers are layouted using single page documents. In this context, there is no "inside bleed", just left bleed and right bleed.

jirib

2025-05-14 08:45

reporter   ~0052526

I compiled this and it did not solve it :/

jirib

2025-05-14 15:26

reporter   ~0052531

I put qDebug() "print" into ScPageOutput::drawMarks() and it is not visible on scribus stdout, so it seem it never ends this function ???

jghali

2025-05-14 18:24

administrator   ~0052533

Last edited: 2025-05-14 18:29

I made a test with Adobe Indesign and it always add bleed marks even when bleed is set to 0. So from our perspective, this issue is a "No change required". as not adding bleed marks on either side when requested would fail meeting professional requirements. Which means I will not accept any patch for this "issue".

As I already wrote, you are using an incorrect method for layouting your cover : covers must be layouted using single page documents, ie "facing pages" must no be used for covers.

jirib

2025-05-14 20:23

reporter   ~0052535

OK, close it; however it is confusing that one can set it to 0 but it is still present :)

Issue History

Date Modified Username Field Change
2025-05-13 14:02 jirib New Issue
2025-05-13 14:02 jirib File Added: marks.diff
2025-05-13 14:03 jirib Note Added: 0052516
2025-05-13 18:48 jghali Note Added: 0052520
2025-05-13 19:10 jghali Note Edited: 0052520
2025-05-14 08:45 jirib Note Added: 0052526
2025-05-14 15:26 jirib Note Added: 0052531
2025-05-14 18:24 jghali Note Added: 0052533
2025-05-14 18:29 jghali Note Edited: 0052533
2025-05-14 20:23 jirib Note Added: 0052535
2025-05-15 06:38 jghali Assigned To => jghali
2025-05-15 06:38 jghali Status new => resolved
2025-05-15 06:38 jghali Resolution open => no change required
2025-05-15 06:38 jghali Status resolved => closed