itext旋转pdf文档但不旋转图像

时间:2015-11-18 18:38:00

标签: android pdf itext

我正在使用itext库,我必须在横向模式下放置正确缩放的图像。但是,如果我将页面更改为横向模式,则保留在那里的图像也会旋转。我不想那样。如果我旋转图像它会表现不同,它不会从中心旋转。

enter image description here

但是,我想要的图像不应该旋转,它应该如下所示 enter image description here

这是我的代码

Document document=new Document();
            try {
                File file=new File(Environment.getExternalStorageDirectory(),"mypdfimage.pdf");
                PdfWriter.getInstance(document, new FileOutputStream(file));
                document.open();
                Image image = null;
                try {
                    image = Image.getInstance (Environment.getExternalStorageDirectory()+"/image.jpg");
                    int identation=0;
                     //Rectangle rectangle=document.getPageSize();


                     Rotation rotation=new Rotation();

                     pdfwriter.setPageEvent(rotation);

                     //image.scalePercent(scalerX, scalerY);
                     //PdfDictionary pageDict=null;
                    // pageDict.put(PdfName.ROTATE, new PdfNumber(90));
                     //pdfwriter.addPageDictEntry(PdfName.ROTATE, PdfPage.LANDSCAPE);


                     image.scaleToFit(PageSize.A4.getWidth() - document.leftMargin() - document.rightMargin(), PageSize.A4.getHeight() - document.topMargin() - document.bottomMargin());
                     // image.setRotationDegrees(90);
                     // image.setAlignment(Element.ALIGN_CENTER);
                     document.add(image);               
                document.close();


                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }


        public  class Rotation extends PdfPageEventHelper
         {




         @Override
         public void onStartPage(PdfWriter writer, Document document) {
         writer.addPageDictEntry(PdfName.ROTATE,PdfPage.LANDSCAPE);
         }


         }

1 个答案:

答案 0 :(得分:2)

您正在以错误的方式旋转页面。您可能采用了一个示例,该示例是针对询问如何旋转页面其内容的问题而编写的。那是异常。如果您按照正常示例关于如何旋转页面,页面将会旋转,但不会旋转图像。

请查看ImageOnRotatedPage示例:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document(PageSize.A4.rotate());
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    Image img = Image.getInstance(IMAGE);
    img.scaleToFit(770, 523);
    float offsetX = (770 - img.getScaledWidth()) / 2;
    float offsetY = (523 - img.getScaledHeight()) / 2;
    img.setAbsolutePosition(36 + offsetX, 36 + offsetY);
    document.add(img);
    document.close();
}

如您所见,我使用rotate()方法创建了一个旋转的A4页面:

Document document = new Document(PageSize.A4.rotate());

我还缩放图像以使其适合页面,并计算偏移量,使其在页面上很好地居中。见cardiogram.pdf

enter image description here

这看起来与您希望它看起来完全一致,并且您不需要求助于使用页面事件和更改页面字典。