Author: tilman
Date: Thu Apr 16 14:02:15 2026
New Revision: 1933107
Log:
PDFBOX-6191: fix transform, by Valery Bokov
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
Thu Apr 16 14:02:11 2026 (r1933106)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
Thu Apr 16 14:02:15 2026 (r1933107)
@@ -274,15 +274,18 @@ public final class PDFPrintable implemen
}
}
+ AffineTransform printerBorderTransform =
printerGraphics.getTransform();
+ double borderScale = scale;
+
// rasterize to bitmap (optional)
BufferedImage image = null;
if (rasterDpi > 0)
{
+ float dpiScale = rasterDpi / 72;
if (LOG.isDebugEnabled())
{
- LOG.debug("dpi set to " + rasterDpi);
+ LOG.debug("rasterDpi: " + rasterDpi + ", dpiScale: " +
dpiScale);
}
- float dpiScale = rasterDpi / 72;
image = new BufferedImage((int)(imageableWidth * dpiScale /
scale),
(int)(imageableHeight * dpiScale /
scale),
BufferedImage.TYPE_INT_ARGB);
@@ -295,23 +298,11 @@ public final class PDFPrintable implemen
}
// draw to graphics using PDFRender
- AffineTransform transform = graphics2D.getTransform();
graphics2D.setBackground(Color.WHITE);
renderer.setSubsamplingAllowed(subsamplingAllowed);
renderer.setRenderingHints(renderingHints);
renderer.renderPageToGraphics(pageIndex, graphics2D, (float)
scale, (float) scale, RenderDestination.PRINT);
- // draw crop box
- if (showPageBorder)
- {
- graphics2D.setTransform(transform);
- graphics2D.setClip(0, 0, (int)imageableWidth,
(int)imageableHeight);
- graphics2D.scale(scale, scale);
- graphics2D.setColor(Color.GRAY);
- graphics2D.setStroke(new BasicStroke(0.5f));
- graphics2D.drawRect(0, 0, (int)cropBox.getWidth(),
(int)cropBox.getHeight());
- }
-
// draw rasterized bitmap (optional)
if (image != null)
{
@@ -320,6 +311,18 @@ public final class PDFPrintable implemen
printerGraphics.drawImage(image, 0, 0, null);
}
+ // draw crop box on the printer graphics (always, whether
rasterizing or not).
+ // Drawing after the blit avoids losing the thin stroke during
raster scale-down.
+ if (showPageBorder)
+ {
+ printerGraphics.setTransform(printerBorderTransform);
+ printerGraphics.setClip(0, 0, (int) imageableWidth, (int)
imageableHeight);
+ printerGraphics.scale(borderScale, borderScale);
+ printerGraphics.setColor(Color.GRAY);
+ printerGraphics.setStroke(new BasicStroke(0.5f));
+ printerGraphics.drawRect(0, 0, (int) cropBox.getWidth(), (int)
cropBox.getHeight());
+ }
+
return PAGE_EXISTS;
}
catch (IOException e)