【发布时间】:2015-04-03 09:37:42
【问题描述】:
我已经使用 iText 创建了账单的 pdf。 我想用 POS 打印机打印这张账单。 POS 打印机纸张尺寸为 58 毫米。 我的 PDF 看起来像 A4 大小。 如何根据 POS 打印机大小调整此页面的大小?
而且,如果产品的平均值超过 100,我必须使用新页面。 所以会有两页。 对于这种情况,我怎样才能在单张纸上打印账单。
或者有没有其他方法可以使用安卓手机或平板电脑创建账单和打印?
【问题讨论】:
我已经使用 iText 创建了账单的 pdf。 我想用 POS 打印机打印这张账单。 POS 打印机纸张尺寸为 58 毫米。 我的 PDF 看起来像 A4 大小。 如何根据 POS 打印机大小调整此页面的大小?
而且,如果产品的平均值超过 100,我必须使用新页面。 所以会有两页。 对于这种情况,我怎样才能在单张纸上打印账单。
或者有没有其他方法可以使用安卓手机或平板电脑创建账单和打印?
【问题讨论】:
当您创建这样的文档时:
Document document = new Document();
创建一个文档,其中所有页面都具有默认大小。默认尺寸为 A4。
有一个名为PageSize 的类包含许多不同的标准尺寸。例如,如果你想创建一个美国字母大小的页面,你可以像这样创建Document:
Document document = new Document(PageSize.LETTER);
你面临两个问题:
解决问题 1 很简单:Document 类接受 Rectangle 参数。您可以像这样创建自己的页面大小:
Rectangle pagesize = new Rectangle(288, 720);
Document document = new Document(pagesize);
在这种情况下,您将拥有 4 x 10 英寸的页面:
288 user units = 288 pt = 4 x 72pt = 4 inch
720 user units = 720 pt = 10 x 72pt = 10 inch
您可以通过将 58 mm 转换为 pt 来解决您的第一个问题:164.409448819 pt
解决第二个问题比较困难。一种方法是创建一个非常长的文档。 PDF 的最大尺寸为 14,400 x 14,400 个用户单位,因此您可以像这样创建矩形:
Rectangle pagesize = new Rectangle(164.41f, 14400);
如果您的帐单长度超过 5.08 米,那真是令人惊讶。如果该 PDF 对您的打印机来说太长,您可以将 y 位置存储在内容的末尾,然后再减小页面大小。
另一种方法是将所有内容添加到ColumnText 对象,然后询问列的高度,并为新创建的文档创建一个新的ColumnText 对象,并使用之前计算的高度。这该怎么做?这在我对这个问题的回答中得到了解释:How to adjust the page height to the content height?
【讨论】:
PageSize.A6 是一个预定义的 Rectangle 对象,所以是的,您可以使用它而不是定义自己的自定义 Rectangle 对象。