在我基于 web 的应用程序中,我必须在预打印的固定文件中打印报告。
我可以使用 JAVA 中的哪些选项进行打印。还有其他要求,例如如果文本不适合一页,则应使用下一页进行打印。
另外,我想到的其他一些问题是:
此外,我有网络应用程序,打印需要在客户端打印机的客户端计算机上完成。
答案 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的公司工作。
我希望有所帮助。