栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法在Java中将完整数据生成为PDF文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法在Java中将完整数据生成为PDF文件

好的,这是一个非常基本的示例……

JTable通过各种print方法,已经支持打印了,基本上,这归结为获取JTable Printable
接口实例并将其传递给打印API,该API需要Graphics2D上下文来绘制……

奇怪的是,您具有Graphics2D上下文,因此这里的技巧是“充当”打印机并自己调用JTable的Printable print方法…

DefaultTableModel model = new DefaultTableModel(0, 10);for (int row = 0; row < 400; row++) {    Object[] values = new Object[10];    for (int col = 0; col < 10; col++) {        values[col] = ((char) ('A' + col)) + "x" + row;    }    model.addRow(values);}JTable table = new JTable(model);table.setSize(table.getPreferredSize());JTableHeader tableHeader = table.getTableHeader();tableHeader.setSize(tableHeader.getPreferredSize());document doc = new document(new Rectangle(1350, 1450));PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, 800, 0.50f);SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");java.util.Date date = new java.util.Date();String generatedDate = formatter.format(date);Paper paper = new Paper();paper.setSize(1350, 1450);paper.setImageableArea(10, 10, 1350 - 20, 1450 - 20);PageFormat pf = new PageFormat();pf.setPaper(paper);Printable printable = table.getPrintable(JTable.PrintMode.NORMAL, null, null);try {    PdfWriter writer;    writer = PdfWriter.getInstance(doc, new FileOutputStream("test.pdf"));    writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage);    doc.open();    // Use this to "test" if there is page    // available for printing, otherwise it prints    // a empty page and I can't figure out    // how to remove it :P    BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);    Graphics2D g = img.createGraphics();    Font f = new Font(Font.TIMES_ROMAN, 12f);    int page = 0;    int result = Printable.NO_SUCH_PAGE;    PdfContentByte cb = writer.getDirectContent();    do {        result = printable.print(g, pf, page);        if (result == Printable.PAGE_EXISTS) { cb.saveState(); Graphics2D g2 = cb.createGraphics(1350, 1450); System.out.println(page); result = printable.print(g2, pf, page); g2.dispose(); cb.restoreState(); doc.add(new Paragraph("REPORTS", f)); doc.add(new Paragraph("document Generated On - " + generatedDate, f)); page++; doc.newPage();        }    } while (result == Printable.PAGE_EXISTS);    g.dispose();} catch (documentException | PrinterException | FileNotFoundException e) {    e.printStackTrace();} finally {    doc.close();}

现在,我需要显示表以便显示行标题,但是可能还有其他解决方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446891.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号