精华内容
下载资源
问答
  • 在这里我我有部分功能是要将一张表格通过java调用打印机打印出来,这里要用到java的Printable接口Printable 接口由当前页面 painter 的 print 方法实现...调用实现 Printable 的实例,以打印页面的图形。在 Printer...

    在这里我我有部分功能是要将一张表格通过java调用打印机打印出来,这里要用到java的Printable接口

    Printable 接口由当前页面 painter 的 print 方法实现,该方法由打印系统调用,以呈现页面。构建 Pageable 时,使用 PageFormat 实例和实现此接口的实例构成的实例用于描述每个页面。调用实现 Printable 的实例,以打印页面的图形。

    在 PrinterJob 上可以设置 Printable(..)。当客户端随后通过调用 PrinterJob.print(..) 启动打印时,控制被传送到打印系统,直到所有的页面完成打印。这是通过在文档中所有页面打印完成前一直调用 Printable.print(..) 来实现的。使用 Printable 接口时,只要打印系统请求,该打印就将页面内容提交给图像。

    Printable.print(..) 的参数包括描述该页面可打印区域(计算适合该页面的内容所需要的区域)的 PageFormat 和页面索引(它指定请求页面的从 0 开始的打印流索引)。

    在这里我通过链表来获取表格内容,以实现动态改变要打印出来的表格的大小,而我在打印方法中是用二维数组来实现打印和定位的,

    因此有了个蛋痛的将链表转化为一维数组,然后又将一维数组转化为二维数组的过程。

    链表转化为一维数组可以直接用toarray()方法

    而一维数组转化为二维数组,int n = 4;//列

    int m = osf.getInfoStrings().length/n;//行

    String[][] data1 = new String[m][n];

    int num = -1;

    for (int i = 0; i < m; i++) {

    for (int j = 0; j < n; j++) {

    num++;

    data1[i][j] = (String)osf.getInfoStrings()[num];

    }

    }

    重要的实现部分就是,画出表格然后打印

    为了使打印窗口显示在最前面,这里是在JDialog上画的表格

    jdialog = new JDialog();

    jdialog.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);}});

    TableModel dataModel = new AbstractTableModel() {

    public int getColumnCount() {

    return headers.length; }

    public int getRowCount() { return data.length;}

    public Object getValueAt(int row, int col) {

    return data[row][col];}

    public String getColumnName(int column) {

    return headers[column];}

    public Class getColumnClass(int col) {

    return getValueAt(0,col).getClass();}

    public boolean isCellEditable(int row, int col) {

    return (col==1);}

    };

    tableView = new JTable(dataModel);

    JScrollPane scrollpane = new JScrollPane(tableView);

    scrollpane.setPreferredSize(new Dimension(500, 80));

    jdialog.getContentPane().setLayout(new BorderLayout());

    jdialog.getContentPane().add(BorderLayout.CENTER,scrollpane);

    jdialog.pack();

    printButton= new JButton();

    printButton.setText("打印");

    jdialog.getContentPane().add(BorderLayout.SOUTH,printButton);

    RepaintManager.currentManager(jdialog).setDoubleBufferingEnabled(false);

    printButton.addActionListener(this);

    jdialog.setBounds(300, 100, 650, 500);

    jdialog.setVisible(true);

    }

    public void actionPerformed(ActionEvent e)

    {

    if(e.getSource()== printButton)

    {

    PrinterJob pj=PrinterJob.getPrinterJob();

    pj.setPrintable(TablePrint.this);

    pj.printDialog();

    try{

    pj.print();

    }

    catch (Exception PrintException) {}

    }

    jdialog.dispose();

    }

    public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {

    Graphics2D  g2 = (Graphics2D) g;

    g2.setColor(Color.black);

    int fontHeight=g2.getFontMetrics().getHeight();

    int fontDesent=g2.getFontMetrics().getDescent();

    //leave room for page number

    double pageHeight = pageFormat.getImageableHeight()-fontHeight;

    double pageWidth =  pageFormat.getImageableWidth();

    double tableWidth = (double)

    tableView.getColumnModel().getTotalColumnWidth();

    double scale = 1;

    if (tableWidth >= pageWidth) {

    scale =  pageWidth / tableWidth;

    }

    double headerHeightOnPage= tableView.getTableHeader().getHeight()*scale;

    double tableWidthOnPage=tableWidth*scale;

    double oneRowHeight=(tableView.getRowHeight()+ tableView.getRowMargin())*scale;

    int numRowsOnAPage= (int)((pageHeight-headerHeightOnPage)/ oneRowHeight);

    double pageHeightForTable=oneRowHeight* numRowsOnAPage;

    int totalNumPages= (int)Math.ceil(((double)tableView.getRowCount())/ numRowsOnAPage);

    if(pageIndex>=totalNumPages) {

    return NO_SUCH_PAGE;

    }

    g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

    //bottom center

    g2.drawString("Page: "+(pageIndex+1), (int)pageWidth/2-35, (int)(pageHeight+fontHeight-fontDesent));

    g2.translate(0f,headerHeightOnPage);

    g2.translate(0f,-pageIndex*pageHeightForTable);

    //If this piece of the table is smaller

    //than the size available,

    //clip to the appropriate bounds.

    if (pageIndex + 1 == totalNumPages) {

    int lastRowPrinted = numRowsOnAPage * pageIndex;

    int numRowsLeft = tableView.getRowCount() - lastRowPrinted;

    g2.setClip(0, (int)(pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage), (int) Math.ceil(oneRowHeight *  numRowsLeft));

    }

    //else clip to the entire area available.

    else{

    g2.setClip(0, (int)(pageHeightForTable*pageIndex), (int) Math.ceil(tableWidthOnPage), (int) Math.ceil(pageHeightForTable));

    }

    g2.scale(scale,scale);

    tableView.paint(g2);

    g2.scale(1/scale,1/scale);

    g2.translate(0f,pageIndex*pageHeightForTable);

    g2.translate(0f, -headerHeightOnPage);

    g2.setClip(0, 0, (int) Math.ceil(tableWidthOnPage), (int)Math.ceil(headerHeightOnPage));

    g2.scale(scale,scale);

    tableView.getTableHeader().paint(g2);

    //paint header at top

    return Printable.PAGE_EXISTS;

    }

    编程依旧博大精深,在此还是略窥皮毛

    在这留个脚印,以后继续踩踩...

    展开全文
  • #re: Web表格打印页面的生成2008-01-24 14:25msungamp@java 你好,我遇到这个问题很久,由于数据太多,一个td里的东西在一个页面下根本放不下,就会分开俩页打,这就造成tr分成俩页,特别难看,下面是我的代码。...

    # re: Web表格打印页面的生成

    2008-01-24 14:25

    msung

    amp@java 你好,我遇到这个问题很久,由于数据太多,一个td里的东西在一个页面下根本放不下,就会分开俩页打,这就造成tr分成俩页,特别难看,下面是我的代码。你有什么好方法。能避免这准分页。

    计划信息打印

    function fReturn(){

    history.go(-1);

    }

    function select(key){

    //alert(document.getElementById('PM').style.display);

    findObj(key).style.display='';

    }

    //直接打印

    function doPrint() {

    //alert(findObj('antable').clientHeight);

    //alert(document.all.table.rows(0).cells(0).offsetHeight) //这个也是查询指定对象的高度。

    bdhtml=window.document.body.innerHTML;

    sprnstr="";

    eprnstr="";

    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);

    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));

    window.document.body.innerHTML=prnhtml;

    var table1=document.all.tags("table") //找出所有table

    //alert(table1);

    var tabnumber=table1.length; //table的个数

    //alert(tabnumber);

    for(var i=0;i<=tabnumber;i++){ //循环遍历table

    //alert(table1[i].id); //输出table的id

    //下面是找出table的id为table的table,并且查出table的高度,如果他的高度高于899,就给它里面的id为‘one’的对象的高度赋值为850

    //并且给id为pp的对象插入pageEnd的样式,然后跳出循环。

    if(table1[i].id=="table"){

    //var frameheight=table1[i].rows(0).cells(0).offsetHeight

    var frameheight = findObj('table').clientHeight;

    if(frameheight>899){

    document.getElementById('one').height='850'

    //alert(document.getElementById('one').height);

    //alert(document.getElementById('PP').className);

    document.getElementById('PP').className='pageEnd'; //插入pageEnd样式,用于俩个table的分页。

    document.getElementById('two').height='850'

    //alert(document.getElementById('PP').className);

    }

    continue;

    }

    if(table1[i].id=="antable"){

    var frameheight = findObj('antable').clientHeight;

    if(frameheight>899){

    document.getElementById('three').height='850'

    document.getElementById('QQ').className='pageEnd';

    document.getElementById('four').height='850'

    }

    break;

    }

    }

    window.print();

    }

    ${(plan.month)?default('')}月份工作月报
    部门:  ${(plan.department)?default('')}日期: ${(plan.mitTime)?default('')}
    填报人  ${(plan.realName)?default('')}签发人  ${(plan.checkUserid)?default('')}
    上月计划${(plan.summarize)?default('')} 
    本月计划${(plan.program)?default('')} 
    展开全文
  • 在2005年11月,AlistApart.com发表了一篇关于他们如何使用HTML和CSS发表一本书的文章 .... 样式表可以设置页面大小及其边距... 页面模板可以给出名称,元素可以说明要打印页面 . 此外,源文档中的元素可以强制分页 . ...

    在2005年11月,AlistApart.com发表了一篇关于他们如何使用HTML和CSS发表一本书的文章 . 见:http://alistapart.com/article/boom

    这是该文章的摘录:

    CSS2有分页媒体的概念(想想纸张),而不是连续媒体(想想滚动条) . 样式表可以设置页面大小及其边距 . 页面模板可以给出名称,元素可以说明要打印的页面 . 此外,源文档中的元素可以强制分页 . 以下是我们使用的样式表的摘录:@page {

    尺寸:7英寸9.25英寸;

    边距:27mm 16mm 27mm 16mm;

    }

    有了一个美国的出版商,我们得到了以英寸为单位的页面大小 . 作为欧洲人,我们继续进行公制测量 . CSS接受两者 . 设置页面大小和页边距后,我们需要确保在正确的位置有分页符 . 以下摘录显示了如何在章节和附录之后生成分页符:div.chapter,div.appendix {

    page-break-after:always;

    }

    此外,我们使用CSS2声明命名页面:div.titlepage {

    页面:空白;

    }

    也就是说, Headers 页将打印在名称为“空白”的页面上.CSS2描述了命名页面的概念,但只有当页眉和页脚可用时,它们的值才会变得明显 .

    无论如何…

    由于您要打印A4,当然需要不同的尺寸:

    @page {

    size: 21cm 29.7cm;

    margin: 30mm 45mm 30mm 45mm;

    /* change the margins as you want them to be. */

    }

    本文深入研究设置分页符等内容,因此您可能希望完全阅读 .

    在您的情况下,诀窍是首先创建打印CSS . 大多数现代浏览器(> 2005)支持缩放,并且已经能够基于打印CSS显示网站 .

    现在,您将希望使Web显示看起来有点不同,并使整个设计适应大多数浏览器(包括2005年之前的旧版本) . 为此,您必须创建一个Web CSS文件或覆盖打印CSS的某些部分 . 在为Web显示创建CSS时,请记住浏览器可以具有任何大小(想想:“移动”到“大屏幕电视”) . 含义:对于Web CSS,您的页面宽度和图像宽度最好使用可变宽度(%)设置,以支持尽可能多的显示设备和Web浏览客户端 .

    EDIT (26-02-2015)

    今天,我偶然发现了另一个更近期的article at SmashingMagazine,它也潜入了用HTML和CSS进行打印的设计......以防万一你可以使用另一个教程 .

    EDIT (30-10-2018)

    它引起了我的注意,因为 size 是无效的CSS3,这确实是正确的 - 我只是重复了文章中引用的代码(如上所述)是好的旧CSS2(当你看一年的文章时这是有道理的这个答案首次发表) . 无论如何,这是您的复制和粘贴方便的有效CSS3代码:

    @media print {

    body{

    width: 21cm;

    height: 29.7cm;

    margin: 30mm 45mm 30mm 45mm;

    /* change the margins as you want them to be. */

    }

    }

    如果您认为您确实需要像素( you should actually avoid using pixels ),则必须注意选择正确的DPI进行打印:

    72 dpi(网页)= 595 X 842像素

    300 dpi(打印)= 2480 X 3508像素

    600 dpi(高质量打印)= 4960 X 7016像素

    然而,我会避免麻烦,只需使用 cm (厘米)或 mm (毫米)进行大小调整,因为这样可以避免出现根据您使用的客户端而产生的故障 .

    展开全文
  • 【实例简介】使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作。包解压后导入MyEclipse就可以使用,在...

    【实例简介】

    使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作。包解压后导入MyEclipse就可以使用,在TestCrawTable中右键运行就能看到抓取到的数据。其他的调试可以自行修改。

    【实例截图】

    【核心代码】

    63fc0890-e6e2-4709-ac6b-6fc4f2fee386

    └── PanChongTest

    ├── bin

    │   ├── chardet.jar

    │   ├── com

    │   │   └── panchong

    │   │   └── test

    │   │   ├── DataTableUtil.class

    │   │   ├── PropertyInfo.class

    │   │   ├── SimFeatureUtil.class

    │   │   ├── StringUtil.class

    │   │   ├── TableElement.class

    │   │   ├── TableUtil.class

    │   │   └── TestCrawTable.class

    │   ├── commons-lang.jar

    │   ├── commons-logging.jar

    │   ├── cpdetector.jar

    │   ├── httpclient-4.2.5.jar

    │   ├── httpcore-4.2.4.jar

    │   └── jsoup-1.7.2.jar

    ├── lib

    │   ├── chardet.jar

    │   ├── commons-lang.jar

    │   ├── commons-logging.jar

    │   ├── cpdetector.jar

    │   ├── httpclient-4.2.5.jar

    │   ├── httpcore-4.2.4.jar

    │   └── jsoup-1.7.2.jar

    └── src

    └── com

    └── panchong

    └── test

    ├── DataTableUtil.java

    ├── PropertyInfo.java

    ├── SimFeatureUtil.java

    ├── StringUtil.java

    ├── TableElement.java

    ├── TableUtil.java

    └── TestCrawTable.java

    10 directories, 28 files

    展开全文
  • java打印表格到打印机

    千次阅读 2011-12-12 00:07:27
    在这里我我有部分功能是要将一张表格通过java调用打印机打印出来,这里要用到java的Printable接口 Printable 接口由当前页面 painter 的 print 方法实现,该方法由打印系统...Printable 的实例,以打印页面的图形。
  • 我正在为我的项目工作开发一个Java桌面应用程序.我需要打印一张包含子总计和总...只需使用内置的java打印服务.请指导我.我想要的打印格式: 下图显示了GUI 下图显示了我到目前为止的报告.它的格式不正确.请帮忙 代...
  • 转载至程式先锋技术维客[url]www.javabiz.cn[/url]1. 在Word或Excel中制作报表的样式。Excel的行高和列宽单位无法用mm或...在Excel中设置“文件——页面设置——工作表——打印标题”。3. 另存为网页,改后缀名“htm...
  • JAVA打印

    2009-06-09 12:06:12
    小弟,想寻求一段java 打印代码(类似 我们去银行取钱时的那种打印),即 把一个本子放在打印机上(这个本子的页面 类似一个表格 里面有些东西是固定的,比如姓名 ,出生日期 打印的东西 就是从数据库中读出的姓名 ...
  • 打印表格

    2020-10-05 15:25:32
    Java Web自学笔记—3.2.6打印表格 题目:在游览器中输出大小为10 x 10的表格页面效果如下图 jsp代码: addrow按钮可以增加一行 addcol按钮可以增加一列 display按钮直接增加15列10行,输出作业要求的表格 <%@...
  • 前言之前写过一篇表格分页打印的实践,其基本思路是按照一比一还原打印宽高,然后根据页面高度内容以及内容长度进行粗略计算,针对不能显示的进行内容分割。相比上次逻辑稍微繁琐一点,今天分享的方式是更加简单的,...
  • 横向打印页面会出现行转列以及列转行的情况,因此在设置页面大小的时候一定要宽度设置的宽一些,表格的maxWidth设置在500到600之间就行了,不然会打印表格就会不是太全或者很少。如果你是纵向打印,那么...
  • IE 打印动态表格

    2010-10-14 10:20:47
    在设计IE动态表格页面打印时,在需要进行分割的位置设定加入style="page-break-after:always"后还会出现某行打印不全的现象,显示很难看。经过研究,使用函数 [code="java"][/code] .box{...
  • 3.打印标题行想在打印的时候,每一页都打印标题,在页面布局-打印标题-首端标题行:选取要显示的行4.查找重复值数据对比-标记重复数据效果图5.删除重复值6.防止重复录入选择要防止重复录入的单元格区域,数据-有效性...
  • JSP打印\JAVA的JSP打印代码 ... 在Excel中设置“文件——页面设置——工作表——打印标题”。  3. 另存为网页,改后缀名“htm”为“jsp”。  4. Word报表文件头为: ;charset=GBK" language="java"%>
  • java的PDF纵横向打印

    2019-10-02 21:06:14
    横向打印页面会出现行转列以及列转行的情况,因此在设置页面大小的时候一定要宽度设置的宽一些,表格的maxWidth设置在500到600之间就行了,不然会打印表格就会不是太全或者很少。如果你是纵向打印,那么...
  • 我有一个动态pdf表单,它使用iText API以编程方式从xml输入数据填充 . 但是当我们打印填充的动态pdf表单时,会打印空白页 ....我的表格填写代码:PdfReader reader=new PdfReader(src);PdfStamper stamper = new Pdf...
  • 做网站时为了方便统计分析数据,将页面上显示的数据生产自动excle表格,可以随时打印供分析传阅。这里更大家共享一个很好用的生成excel报表的方法。实现方法很简单,附有需要的jar包,希望可以帮到大家
  • 学了JAVA WEB应用,补充一下HTML的标签,常用的,不然页面都画不出来了~~test 标题,h1h2h3 3个字号test 段落 link 链接 使用 Target 属性,你可以定义被链接的文档在何处显示。下面的这行会在新窗口打开文档:Visit...
  • 这里还要用到外部的接口给用户进行签章,这里的需求那么就不能使用 Window print() 方法去实现,因为不会在是一个html表格了,而是一个pdf文件,这样子其实也没什么,我们只要把文件放也页面中显示那么也还
  •  这是一个快速方便的web打印解决方案,用户将要打印的数据装入一个表格,然后调用此打印工具将表格中的数据按预定格式打印。 详细使用文档和示例见 webgrid\index.html 3、eprint for dotnet  这是可以自定义打印...
  • 一、HTML的规范:1、一个html文件开始标签和结束的标签: 2、html包含两部分内容(1) 设置相关信息(2) 显示在页面上的内容都写在body里面3、html的标签有开始标签,也要有结束标签 4、html的代码不区分大小写5、有些...
  • java生成word文档,需要生产table,打印出来裁剪。如果用poi怎么控制表格单元格的间距。 如果用html转word文档。怎么控制页面边距?
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     [TablePanel.java] 日历表格面板  [ConfigLine.java] 控制条类  [RoundBox.java] 限定选择控件  [MonthMaker.java] 月份表算法类  [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件...
  • 【其它】1、设计一个名为Student 的类 ,具有属性:姓名,java成绩 2、新建一个集合(可以用数组),往里面添加5个学生 3、用JSTL 以表格形式输出集合数据,并在第一列增加序号列 4、成绩大于80分的数据行用红色填充显示 ...
  • Echarts 由百度研发的开源软件,是一个纯 JS 的图表库。Echarts 是 web 端的技术,前端展现,其在 J2EE 项目中经常被集成使用,图形类型多且直观、生动、可交互...比如我们把 Echarts 和报表结合,报表中既有表格内容,

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 130
精华内容 52
关键字:

java打印页面表格

java 订阅