Thank you. Your approach to preserving the current negative dpi value behavior makes a lot of sense. It's tricky messing with public APIs!
Would you like me to propose a patch for PDF Debugger as well? On Wed, Dec 4, 2024, 4:56 AM Tilman Hausherr <thaush...@t-online.de> wrote: > Hi, > > I've committed your suggestion with some minor changes, among them this: > I did not use "if (rasterDpi != RASTERIZE_OFF)" and used "if (dpi > 0 || > dpi == RASTERIZE_DPI_AUTO)" because in the past, a negative dpi would be > treated like dpi 0 (i.e. no rastering) and I wanted to keep it that way. > I've corrected the chaining of the constructors (this is cosmetic only) > and added more text for the command line application. > Snapshot available at > > https://repository.apache.org/content/groups/snapshots/org/apache/pdfbox/pdfbox-app/3.0.4-SNAPSHOT/ > Tilman > > On 03.12.2024 16:13, Kevin Day wrote: > > I just tested and the new code works great. Thank you! > > > > One thought on the code changes: It may be beneficial to compute a > > printerDpi variable at the top of the method. My concern is that if > > graphics2D ever has a scale operation before we hit the dpi check, it > could > > cause an unexpected regression when we compute the printer dpi later on. > > This is *not* an issue today (the graphics2D operations are all > > translation) - just thinking to the future. > > > > Here is how I originally implemented it when I was doing my testing (this > > patch also adds constants and updates the javadocs). I'm fine either > way, > > just trying to keep the cyclometric complexity down so it'll be easier to > > maintain. > > > > > > Index: src/main/java/org/apache/pdfbox/printing/PDFPrintable.java > > =================================================================== > > --- src/main/java/org/apache/pdfbox/printing/PDFPrintable.java (revision > > 1922281) > > +++ src/main/java/org/apache/pdfbox/printing/PDFPrintable.java (working > > copy) > > @@ -46,6 +46,8 @@ > > public final class PDFPrintable implements Printable > > { > > private static final Log LOG = > LogFactory.getLog(PDFPrintable.class); > > + public static final float RASTERIZE_OFF = 0f; > > + public static final float RASTERIZE_DPI_AUTO = -1f; > > > > private final PDPageTree pageTree; > > private final PDFRenderer renderer; > > @@ -75,7 +77,7 @@ > > */ > > public PDFPrintable(PDDocument document, Scaling scaling) > > { > > - this(document, scaling, false, 0); > > + this(document, scaling, false, RASTERIZE_OFF); > > } > > > > /** > > @@ -87,7 +89,7 @@ > > */ > > public PDFPrintable(PDDocument document, Scaling scaling, boolean > > showPageBorder) > > { > > - this(document, scaling, showPageBorder, 0); > > + this(document, scaling, showPageBorder, RASTERIZE_OFF); > > } > > > > /** > > @@ -97,7 +99,7 @@ > > * @param document the document to print > > * @param scaling page scaling policy > > * @param showPageBorder true if page borders are to be printed > > - * @param dpi if non-zero then the image will be rasterized at the > > given DPI > > + * @param dpi if non-zero then the image will be rasterized at the > > given DPI. If set to the special value RASTERIZE_DPI_AUTO, the dpi of the > > printer will be used. > > */ > > public PDFPrintable(PDDocument document, Scaling scaling, boolean > > showPageBorder, float dpi) > > { > > @@ -111,7 +113,7 @@ > > * @param document the document to print > > * @param scaling page scaling policy > > * @param showPageBorder true if page borders are to be printed > > - * @param dpi if non-zero then the image will be rasterized at the > > given DPI > > + * @param dpi if non-zero then the image will be rasterized at the > > given DPI. If set to the special value RASTERIZE_DPI_AUTO, the dpi of the > > printer will be used. > > * @param center true if the content is to be centered on the page > > (otherwise top-left). > > */ > > public PDFPrintable(PDDocument document, Scaling scaling, boolean > > showPageBorder, float dpi, > > @@ -127,7 +129,7 @@ > > * @param document the document to print > > * @param scaling page scaling policy > > * @param showPageBorder true if page borders are to be printed > > - * @param dpi if non-zero then the image will be rasterized at the > > given DPI > > + * @param dpi if non-zero then the image will be rasterized at the > > given DPI. If set to the special value RASTERIZE_DPI_AUTO, the dpi of the > > printer will be used. > > * @param center true if the content is to be centered on the page > > (otherwise top-left). > > * @param renderer the document renderer. Useful if {@link > > PDFRenderer} has been subclassed. > > */ > > @@ -202,6 +204,9 @@ > > try > > { > > Graphics2D graphics2D = (Graphics2D)graphics; > > + > > + float rasterDpi = dpi; // capture the DPI that will be used > > for rasterizing the image if rasterizing is specified (i.e. dpi != 0) > > + if (rasterDpi == RASTERIZE_DPI_AUTO) rasterDpi = > > (float)graphics2D.getTransform().getScaleX() * 72.0f; > > > > PDPage page = pageTree.get(pageIndex); > > PDRectangle cropBox = getRotatedCropBox(page); > > @@ -254,21 +259,15 @@ > > // rasterize to bitmap (optional) > > Graphics2D printerGraphics = null; > > BufferedImage image = null; > > - if (dpi > 0 || dpi == -1) > > + if (rasterDpi != RASTERIZE_OFF) > > { > > - float dpiScale; > > - if (dpi == -1) > > - { > > - dpiScale = (float) > > graphics2D.getTransform().getScaleX(); > > - if (LOG.isDebugEnabled()) > > - { > > - LOG.debug("dpi set to " + > > Math.round(graphics2D.getTransform().getScaleX() * 72)); > > - } > > - } > > - else > > + if (LOG.isDebugEnabled()) > > { > > - dpiScale = dpi / 72; > > + LOG.debug("Rasterize dpi set to " + rasterDpi); > > } > > + > > + float dpiScale = rasterDpi / 72; > > + > > image = new BufferedImage((int)(imageableWidth * > dpiScale > > / scale), > > (int)(imageableHeight * > dpiScale > > / scale), > > BufferedImage.TYPE_INT_ARGB); > > > > > > Kevin Day > > > > *trumpet**p| *480.961.6003 x1002 > > *e| *ke...@trumpetinc.com > > *www.trumpetinc.com<http://trumpetinc.com/> | *LinkedIn > > <https://www.linkedin.com/company/trumpet-inc.> > > > > > > On Tue, Dec 3, 2024 at 7:36 AM Kevin Day<ke...@trumpetinc.com> wrote: > > > >> My apologies, I did not see the notice that changes were available. I > will > >> review and test this morning. > >> > >> On Tue, Dec 3, 2024, 2:51 AM Tilman Hausherr<thaush...@t-online.de> > >> wrote: > >> > >>> On 02.12.2024 17:50, Kevin Day wrote: > >>>> Just to capture it, I got the printer model one of our customers is > >>> having > >>>> the problem with: > >>>> > >>>> Konica Minolta bizhubC300i > >>> Have you tested the changes? > >>> > >>> Tilman > >>> > >>> > >>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail:users-unsubscr...@pdfbox.apache.org > >>> For additional commands, e-mail:users-h...@pdfbox.apache.org > >>> > >>> >