在java中预先打印的文具上打印

时间:2014-06-18 09:00:04

标签: java printing

在我基于 web 的应用程序中,我必须在预打印的固定文件中打印报告。

我可以使用 JAVA 中的哪些选项进行打印。还有其他要求,例如如果文本不适合一页,则应使用下一页进行打印。

另外,我想到的其他一些问题是:

  1. 字符宽度会起作用吗?例如,'我'和'w'。需要 不同的字符宽度。
  2. 打印是否还取决于打印机 正在使用哪个?
  3. 此外,我有网络应用程序,打印需要在客户端打印机的客户端计算机上完成。

3 个答案:

答案 0 :(得分:1)

我会使用XSL-FO创建一个布局模板,其中包含与纸质表单上每个字段对应的绝对定位的块容器。这将允许您准确定位文本并限制文本块的范围(使用overflow =" hidden")。

然后,您可以使用Apache FOP从XSL-FO源文件生成PDF文件。

E.g。使用此源文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="EN">
    <fo:layout-master-set>
        <fo:simple-page-master page-width="21cm" page-height="29.7cm" master-name="A4">
            <fo:region-body margin-bottom="0mm" margin-top="0mm"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow reference-orientation="0" border-collapse="collapse" flow-name="xsl-region-body">
            <fo:block-container position="absolute" top="3cm" left="3cm" height="2cm" width="5cm" overflow="hidden">
                <fo:block font-family="Times" font-size="14pt" color="red">
                    Absolute at top=3cm/left=3cm - Lorem ipsum dolor sit amet, consetetur sadipscing elitr
                </fo:block>
            </fo:block-container>
            <fo:block-container position="absolute" top="4cm" left="9cm" height="2cm" width="5cm" overflow="hidden">
                <fo:block font-family="Arial Unicode MS" font-size="14pt" color="blue">
                    Absolute at top=4cm/left=9cm - ನಾಮಪ್ರತ್ಯಯಗಳ ಮೋದಲನೇ ವರ್ಗ
                </fo:block>
            </fo:block-container>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

将生成以下PDF file

打印PDF文件时,您必须确保PDF查看器不会尝试缩放输出以适应可用的打印空间(我认为默认情况下在Adobe Acrobat Reader中启用此选项)。

答案 1 :(得分:0)

有一个类FontMetrics,此类的方法可帮助您计算字符串的宽度(以像素为单位)。

您的应用程序应该知道您正在使用的打印分辨率,DPI,每英寸点数。

因此,您可以通过操作

确定文本的打印宽度(以英寸为单位)
textsizeinpixels/DPI

其中DPI - 是您的打印机分辨率。

答案 2 :(得分:0)

另一种选择是使用JODReports(免费)或Docmosis(非免费)。由于这些工具基于doc或odt文档作为模板,因此您可以在模板中使用属性,例如&#34; keep with next&#34;并且&#34;允许行跨页和#34;确保在生成文档时,它会根据您的需要移动到下一页。请注意我为创建Docmosis的公司工作。

我希望有所帮助。