我需要制作一个看起来像这样的PDF页面:
我在制作适合小尺寸页面的两列时遇到问题。
这是我的代码:
public void createSizedPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.setMargins(5,5,5,5);
Rectangle one = new Rectangle(290,100);
one.setBackgroundColor(Color.YELLOW);
document.setPageSize(one);
document.open();
Paragraph consigneeName = new Paragraph("Ahmed");
Paragraph address = new Paragraph("Casa ST 121");
String codeBL = "14785236987541";
PdfContentByte cb = writer.getDirectContent();
Barcode128 code128 = new Barcode128();
code128.setBaseline(9);
code128.setSize(9);
code128.setCode(codeBL);
code128.setCodeType(Barcode128.CODE128);
Image code128Image = code128.createImageWithBarcode(cb, null, null);
Paragraph right = new Paragraph();
right.add(consigneeName);
right.add(address);
right.add(code128Image);
Chunk glue = new Chunk(new VerticalPositionMark());
Paragraph p = new Paragraph();
p.add(right);
p.add(new Chunk(glue));
p.add(code128Image);
document.add(p);
document.close();
}
答案 0 :(得分:0)
解决问题的一种方法是使用AcroForm字段创建模板PDF。您可以手动创建一个漂亮的设计,然后通过将数据(文本,条形码)放在由充当占位符的字段定义的适当位置以编程方式填写表单。
另一种方法是从头开始创建PDF,这是您似乎采用的方法,查看您的代码。
在您分享代码的意义上,您的问题并不完全清楚,但您没有解释您遇到的问题。正如我已经评论过的那样:
你无法缩放图像吗?你不能定义一个更小的 字体大小?您是否无法创建具有特定维度的表格? 你说我在制作两个适合小的柱子方面遇到了问题 大小的页面,但你忘了描述问题。
你没有回答这些问题,这使得某人很难回答你的问题。 Stack Overflow阅读器唯一可以做的就是在你的位置完成你的工作。这不是Stack Overflow的用途。
此外,您的问题的答案非常简单,Stack Overflow读者很难理解您发布问题的原因。
你说你需要在两列中添加数据(文本和条形码),实际上是说你要创建一个表。这是这样一个表的一个例子:
如果查看SmallTable示例,您可以看到它是如何构建的。
您想要一个测量290 x 100个用户单位的PDF,每边的边距为5个用户单位。这意味着您有一个表格空间可容纳280个用户单位。看一下你的屏幕截图,我会说你有一个包含160个用户单元的列和一个包含120个用户单元的列。我还说你有三行,每行30个用户单位。
好的,那你为什么不根据这些尺寸创建一个表呢?
public void createPdf(String dest) throws IOException, DocumentException {
Rectangle small = new Rectangle(290,100);
Font smallfont = new Font(FontFamily.HELVETICA, 10);
Document document = new Document(small, 5, 5, 5, 5);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(new float[]{ 160, 120 });
table.setLockedWidth(true);
PdfContentByte cb = writer.getDirectContent();
// first row
PdfPCell cell = new PdfPCell(new Phrase("Some text here"));
cell.setFixedHeight(30);
cell.setBorder(Rectangle.NO_BORDER);
cell.setColspan(2);
table.addCell(cell);
// second row
cell = new PdfPCell(new Phrase("Some more text", smallfont));
cell.setFixedHeight(30);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
Barcode128 code128 = new Barcode128();
code128.setCode("14785236987541");
code128.setCodeType(Barcode128.CODE128);
Image code128Image = code128.createImageWithBarcode(cb, null, null);
cell = new PdfPCell(code128Image, true);
cell.setBorder(Rectangle.NO_BORDER);
cell.setFixedHeight(30);
table.addCell(cell);
// third row
table.addCell(cell);
cell = new PdfPCell(new Phrase("and something else here", smallfont));
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(cell);
document.add(table);
document.close();
}
在此示例中,
官方文档中解释了所有这些功能。正如我之前所说:你没有解释你问题的本质。文档中有什么不清楚的地方?你有什么问题?