【问题标题】:Split part of the PDF horizontally水平拆分 PDF 的一部分
【发布时间】:2018-03-16 11:34:37
【问题描述】:

我正在使用 iTextG 5.5.8 和 Android。我必须将部分 pdf 拆分为两个水平视图。我不能使用 PdfPTable 因为我想要左侧完全是图像,右侧完全是表格。另外,我必须以 25mm*12mm 的尺寸呈现图像。任何人都可以将我隐藏在正确的道路上以实现这一目标吗?

【问题讨论】:

  • 我不明白你为什么不能使用 PdfPTable
  • @mkl 如果我使用 pdf 表格(单元格),则表示第一个单元格将在右侧打印图像和一行文本。然后剩下的行会出现在图片的右下角。
  • 如何将左侧单元格仅用于图像,将右侧单元格用于表格?还是一个表格,左侧单元格的行跨度跨越所有行,图像和右侧表格的剩余单元格?
  • @mkl 左侧如果我在单元格中使用图像,右侧我只能使用一行,然后其他行将仅出现在图像的底部。但我想将所有 4 行放在图像的右侧。你对此有什么想法吗?

标签: java android image pdf itext


【解决方案1】:

有两种简单的方法可以实现:

一个使用行跨度的表

假设您已将图像加载到 Image image 并添加到 Document document

PdfPTable table = new PdfPTable(new float[]{2,1,1});

PdfPCell imageCell = new PdfPCell(image);
imageCell.setRowspan(4);
imageCell.setVerticalAlignment(PdfPTable.ALIGN_CENTER);
table.addCell(imageCell);

PdfPCell cell = new PdfPCell(new Phrase("Address1"));
cell.setBorder(Rectangle.TOP | Rectangle.LEFT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Contact Number"));
cell.setBorder(Rectangle.TOP | Rectangle.RIGHT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Address2"));
cell.setBorder(Rectangle.LEFT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Fax"));
cell.setBorder(Rectangle.RIGHT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Address3"));
cell.setBorder(Rectangle.LEFT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Pin Code"));
cell.setBorder(Rectangle.RIGHT);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Address4"));
cell.setBorder(Rectangle.BOTTOM | Rectangle.LEFT);
table.addCell(cell);
cell = new PdfPCell(new Phrase(""));
cell.setBorder(Rectangle.BOTTOM | Rectangle.RIGHT);
table.addCell(cell);

document.add(table);

(CreateTable 测试testSureshOneTableRowspan)

两张桌子

再次假设您已将图像加载到 Image image 并添加到 Document document

PdfPTable innerTable = new PdfPTable(2);

PdfPCell cell = new PdfPCell(new Phrase("Address1"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Contact Number"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Address2"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Fax"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Address3"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Pin Code"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase("Address4"));
cell.setBorder(0);
innerTable.addCell(cell);
cell = new PdfPCell(new Phrase(""));
cell.setBorder(0);
innerTable.addCell(cell);

PdfPTable table = new PdfPTable(2);

PdfPCell imageCell = new PdfPCell(image);
imageCell.setVerticalAlignment(PdfPTable.ALIGN_CENTER);
table.addCell(imageCell);

table.addCell(innerTable);

document.add(table);

(CreateTable 测试testSureshTwoTables)

【讨论】:

  • 感谢您的回答。刚才我也从我哥哥那里得到了这个确切的方法,并正在努力。我有一个疑问,如果我使用单元格中的图像,图像会填满整个单元格(图像变大),但我想将图像保持在原始大小。有可能吗?
  • 您可以使用例如限制图像大小image.scaleToFit(110,110).
  • 是否可以将图像转换为特定的毫米(米)尺寸,例如 30 毫米(宽)* 12.2 毫米(高)
  • @Suresh 只需使用与 30mm 或 12.2mm 对应的点数。看例如here on stack overflow.
  • 感谢您的回答。是否有任何计算可以得到 30mm(w) * 12.2mm(H) 的精确点?还是手动我们必须使用点(image.scaleToFit(x,y)) 并测试以获得确切的大小?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2018-02-26
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多