iTextpdf - 缩放内容以适应 A4 页面

问题描述 投票:0回答:0

iTextpdf,

我的目标是将 PDF 与不同大小和不同方向/旋转的页面合并,将它们全部放在 A4 页面上。

我创建的代码可以纵向合并和旋转页面,但无法缩放内容以适应 A4 页面。

我编写了另一个例程(使用 itext.kernel),但它引发了一个我无法解决的异常(未找到 CMap com/itextpdf/io/font/cmap/UniJIS-UTF16-H)。

谁能帮我用这段代码来缩放 A4 内的内容?

        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.12</version>
        </dependency>
    public byte[] gerarPDF() throws IOException, DocumentException {

        Document document = new Document();   // PageSize.A4
        //document.setPageSize(PageSize.A4);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PdfCopy writer = new PdfCopy(document, outputStream);

        document.open();

        InputStream inputStream = new FileInputStream("document_46.pdf");
        PdfReader reader = new PdfReader(inputStream);;

        PdfImportedPage pdfImportedPage;
        PdfDictionary pageDict;
        int rotation;  int i = 1;

        while ( i <= reader.getNumberOfPages() ) {

            pdfImportedPage = writer.getImportedPage(reader, i);

            rotation = reader.getPageRotation(i);
            pageDict = reader.getPageN(i);

            // ROTACAO E ORIENTACAO DAS PAGINAS

            // Página em Paisagem, quando a largura é maior que a altura
            // rotaciona para posição em Retrato
            if (pdfImportedPage.getWidth() > pdfImportedPage.getHeight()) {
                pageDict.put(PdfName.ROTATE, new PdfNumber(rotation + 90));
            }
            // Página com a rotação em 90º - voltar para posição em Retrato
            if (rotation == 90) {
                pageDict.put(PdfName.ROTATE, new PdfNumber(rotation - 90));
            }

            // SCALE DAS PAGINAS

//            float widthPage = pdfImportedPage.getWidth();
//            float heightPage = pdfImportedPage.getHeight();
//
//            if( widthPage > heightPage ){
//                pageDict.put(PdfName.MEDIABOX, new PdfRectangle(841.92f,595.32f));
//
//            }else if( widthPage > 595.33 && widthPage < 612.51 ) {
//                pageDict.put(PdfName.MEDIABOX, new PdfRectangle(595.32f, 841.92f));
//
//            }else if( widthPage > 612.51 ) {
//                pageDict.put(PdfName.MEDIABOX, new PdfRectangle(595.32f, 841.92f));
//
//            }else{
//                pageDict.put(PdfName.MEDIABOX, new PdfRectangle(595.32f, 841.92f));
//            }

            pageDict.put(PdfName.MEDIABOX, new PdfRectangle(595.32f, 841.92f));



            PdfCopy.PageStamp stamp = writer.createPageStamp(pdfImportedPage);
            Chunk chunk = new Chunk(String.format("Página %d", i));
            Font font = new Font();
            font.setFamily(Font.FontFamily.HELVETICA.name());
            font.setSize(8);
            font.setStyle(Font.FontStyle.ITALIC.getValue());
            chunk.setFont(font);
            ColumnText.showTextAligned(stamp.getUnderContent(), PdfContentByte.ALIGN_CENTER,
                    new Phrase(chunk), 520, 20, 0);
            stamp.alterContents();
            writer.addPage(pdfImportedPage);
            i++;
        }

        outputStream.flush();
        document.close();
        outputStream.close();

        return outputStream.toByteArray();

    }

用这条线我可以把所有的页面都变成A4大小。好的

pageDict.put(PdfName.MEDIABOX, new PdfRectangle(595.32f, 841.92f));

现在剩下的就是缩放内容以适应 A4。

java pdf itext rotation scale
© www.soinside.com 2019 - 2024. All rights reserved.