Javax печатает PNG-файл слишком маленький - PullRequest
0 голосов
/ 06 ноября 2018

Этот класс создает PDF и конвертирует его в PNG-файл. Функция print () должна печатать PNG на системном принтере по умолчанию (Canon Shelby CP1300). К сожалению, изображение напечатано очень маленьким (0,5x1 см). Если я печатаю PNG-файл в проводнике Windows, все работает хорошо. На самом деле я создаю файл PNG с разрешением 300, но в конце он имеет только 92 точек на дюйм. Нужно ли мне дополнительные "PrintRequestAttributes", чтобы решить эту проблему? Или я могу подогнать файл png под нужный размер страницы?

public PrintableImage(Photos photos) {
    this.setPageSize(PageSize.ID_1.rotate());
    createPdfWith(photos);
    convertToPNG();
}


private void createPdfWith(Photos photos) {
    try {
        Image img;
        PdfWriter.getInstance(this, new FileOutputStream(Constants.TEMP_PRINTFOLDER + Constants.TMP_PRINT_PDF));
        this.open();
        int offsetPhotos = 0;
        for (int i = photos.size() - 1; i >= 0; i--) {
            String image = photos.get(i).getPath();
            img = Image.getInstance(image);
            img.scaleToFit(Constants.SIZE_IMAGE);
            img.setAbsolutePosition(getPositionForCentering(img), offsetPhotos + 40);
            this.add(img);
            offsetPhotos = 95;
        }
        img = Image.getInstance(Constants.PATH_LOGO);
        img.scaleToFit(Constants.SIZE_LOGO);
        img.setAbsolutePosition(getPositionForCentering(img) + 4, 14);
        this.add(img);
        this.close();
    } catch (Exception e) {
    }

}

private float getPositionForCentering(Image image) {
    return (getPageSize().getWidth() - image.getScaledWidth()) / 2;
}

private void convertToPNG() {
    try {
        PDDocument doc = PDDocument.load(new File(Constants.TEMP_PRINTFOLDER + Constants.TMP_PRINT_PDF), "");
        PDFRenderer pdfRenderer = new PDFRenderer(doc);
        BufferedImage image = pdfRenderer.renderImageWithDPI(0, 300, ImageType.RGB);
        File pngFile = new File(Constants.TEMP_PRINTFOLDER + Constants.TMP_PRINT_PNG);
        ImageIO.write(image, "png",pngFile);
    } catch (IOException e) {
    }
}

/**
 * Prints the last created PNG-Image
 */
public static void print() {
    PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
    attributes.add(OrientationRequested.PORTRAIT);

    try {
        FileInputStream pngFile = new FileInputStream(Constants.TEMP_PRINTFOLDER + Constants.TMP_PRINT_PNG);
        Doc pngDoc = new SimpleDoc(pngFile, DocFlavor.INPUT_STREAM.PNG, null);
        PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
        DocPrintJob printJob = printService.createPrintJob();
        printJob.print(pngDoc, attributes);
        pngFile.close();
    } catch (Exception e) {
        }
}

}

Заранее большое спасибо!

...