Oh, one reason to use constants for the check value is that this parameter
is a float - so there could be some ugly floating point comparison issue...

300f-301f != -1f

If we use a constant, then there is no question that only that exact
constant value is allowed.

On Tue, Dec 3, 2024, 8:13 AM Kevin Day <ke...@trumpetinc.com> 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
>>>
>>>

Reply via email to