View Issue Details

IDProjectCategoryView StatusLast Update
0017518ScribusPrintingpublic2025-05-13 19:10
Reporterjirib Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
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.

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