Плохо: преобразование PDF в изображения - PullRequest
0 голосов
/ 15 декабря 2018

Преобразование класса:

  public void getImage(String pdfFilename) throws Exception{

        List<byte[]> listImg = new ArrayList<>();
        try (final PDDocument document = PDDocument.load(new File(pdfFilename))){
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int page = 0; page < document.getNumberOfPages(); ++page)
            {
                File file = new File("C:\\path1\\"+page+".png");

                BufferedImage bim = pdfRenderer.renderImage(page);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(bim, "png",file);


                System.out.println("!!!!");
              //  System.out.println(Arrays.toString(listImg.get(page)));



            }
            document.close();
        } catch (IOException e){
            System.err.println("Exception while trying to create pdf document - " + e);
        }

    }

Все работает хорошо .Все PDF-файлы преобразуются, но , если Я использую класс shw (это очень необходимо для моего проекта):

 PdfDocument srcDoc = new PdfDocument(new PdfReader(DEST1));
        Rectangle rect = srcDoc.getFirstPage().getPageSize();
        System.out.println(rect);
        Rectangle pageSize = new Rectangle(rect.getWidth(), rect.getHeight());

        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
        pdfDoc.setDefaultPageSize(new PageSize(pageSize));
        System.out.println(srcDoc.getNumberOfPages());
        PdfCanvas content = new PdfCanvas(pdfDoc.addNewPage());

        int n = 0;
        for (int i =1 ; i <= srcDoc.getNumberOfPages(); i++) {

            PdfFormXObject page = srcDoc.getPage(i).copyAsFormXObject(pdfDoc);
            content.clip();
            content.newPath();


               content.addXObject(page,MainPdf.right_Margin-MainPdf.left_Margin,0);
           content = new PdfCanvas(pdfDoc.addNewPage());

                for (double y = 4.251969f; y <= 595; y += 14.1732) {
                    content.moveTo(0, y);
                    content.lineTo(420, y);
                }
                for (double x = 0; x <= 420; x += 14.1732) {
                    content.moveTo(x, 0);
                    content.lineTo(x, 595);
                }
                content.closePathStroke();


        }

        srcDoc.close();
        pdfDoc.close();
    }

Те изображения, которые были преобразованы в пустые (ничего не содержат внутрисами по себе, просто белый фон).PDF не пусто.pdf: https://dropmefiles.com/UXedd

[enter image description here изображения:

enter image description here

1 Ответ

0 голосов
/ 16 декабря 2018

Причиной был вызов

content.clip();

в сегменте itext.Это клипы с пустым путем.Adobe Reader игнорирует это, а PDFBox - нет, поэтому текущий путь отсечения пуст, так что ничего не видно.

В одном из комментариев удаление этого вызова решает проблему.(Я подозреваю, что content.newPath(); тоже не нужен)

Я также пробовал другие программы просмотра: PDF.js и GhostScript не отображают его, Chrome и Edge отображают его.

...