`
wnzz95391511
  • 浏览: 124671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

itext生成PDF时生成图片的问题

阅读更多
最近需要做一个报告生成,需要生成PDF格式,就采用了itext。
在网上也学习了许多itext的使用,报告生成的程序也能跑起来了,却发现了一个问题:
在报告生成的过程中,生成的图片与段落文章并不是按照所调用的顺序生成的。
例如,我期望生成的格式:
标题一
图片一
标题二
图片二
标题三
图片三

由于图片二比较大,无法与上面的内容共用一个页面,那么图片二就自动被切割到下一页了。而上一页剩余的空白,由于标题三可以被容纳下,就把标题三放入了上一页。
生成结果如下:

标题一
图片一
标题二
标题三
图片二
图片三

在网上寻找了很久,可能用这的人也不多,也很多没有用到存储图片,没有找到这方面的问题。IT人,就要执着。凭着这份执着,我先是在itext的API中寻找有没有设置顺序的方法,找了Image类,Document类,PdfWriter类,没有寻找到结果。
我也想试试能不能把图片放入到Paragraph中,这样按照段落的形式,就不会出现逆序了。没有这样的方法。
只能到itext官方网站上,下载所有关于Image的例子看,终于发现了这个方法:
利用PdfWriter类的setStrictImageSequence(boolean ) 方法,便能解决问题。  苦难啊,一个小方法,找了那么久!
例子:摘自itext官方
public static void main(String[] args) {
        
        System.out.println("ImageSequence");
        
        // step 1: creation of a document-object
        Document document = new Document();
        
        try {
            // step 2:
            // we create a writer that listens to the document
            // and directs a PDF-stream to a file
            PdfWriter.getInstance(document, new FileOutputStream("notInSequence.pdf"));
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("inSequence.pdf"));
            writer.setStrictImageSequence(true);
            
            // step 3: we open the document
            document.open();
            
            // step 4:
            document.add(new Paragraph("1st image"));
            Image jpg = Image.getInstance("otsoe.jpg");
            document.add(jpg);
            document.add(new Paragraph("2nd image"));
            Image gif= Image.getInstance("getacro.gif");
            document.add(gif);
            document.add(new Paragraph("3rd image"));
            document.add(jpg);
            document.add(new Paragraph("4th image"));
            document.add(gif);
            document.add(new Paragraph("5th image"));
            document.add(jpg);
            document.add(new Paragraph("6th image"));
            document.add(gif);
            document.add(new Paragraph("7th image"));
            document.add(jpg);
        }
        catch(DocumentException de) {
            System.err.println(de.getMessage());
        }
        catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        
        // step 5: we close the document
        document.close();
    }

2
0
分享到:
评论
3 楼 java_base 2010-11-10  
谢谢了 郁闷了两天,顿悟了~
2 楼 wnzz95391511 2009-05-27  
sfh 写道

我觉得这个应该默认就为true,不然真叫人郁闷!

我也同意~
按照普通的思维应该也是顺序排列
1 楼 sfh 2009-05-27  
我觉得这个应该默认就为true,不然真叫人郁闷!

相关推荐

Global site tag (gtag.js) - Google Analytics