我正在测试iText以生成由平铺格式的8个图像组成的PDF。我使用JFreeChart创建一个图形,然后通过iText将其转换为图像。 PDF生成正常,但是当我打开输出文件时,左侧,右侧和底部仍有大约一英寸的空白区域。我想在打印时利用合法尺寸页面上的所有空间。
我知道PDF中没有“边距”的概念,而且它不是可编辑的格式。必须创建没有空白区域的图像。那么Document构造函数中的额外参数实际上做了什么?
我认为通过向Document对象(LEGAL和1f params)提供必要的参数将消除空白区域,我的表将占用打印页面上的所有8.5x14,但没有运气。
有什么建议吗?提前致谢
原始代码:
// Setup document
Document doc = new Document(PageSize.LEGAL, 1f, 1f, 1f, 1f);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream("c:\\temp\\image_in_chunk.pdf"));
doc.open();
//create the chart, save to file system, and create an iText Image object
ChartUtilities.saveChartAsPNG(new File("C:\\temp\\img.png"), createChart(createDataset()), 240, 240);
Image img1 = Image.getInstance("C:\\temp\\img.png");
PdfPCell cell1 = null;
Paragraph paragraph = new Paragraph();
paragraph.add(new Chunk(img1, 0, 0, true));
PdfPTable table = new PdfPTable(2);
for (int i = 0; i < 8; i++)
{
cell1 = new PdfPCell(paragraph);
table.addCell(cell1);
}
doc.add(table);
doc.close();
更正并正常工作的代码(当然创建自己的JFreeChart为img1。我不能发布不是成员的示例图像输出):
// Setup document
Document doc = new Document(PageSize.LEGAL, 0f, 0f, 0f, 0f);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream("c:\\temp\\image_in_chunk.pdf"));
doc.open();
//create the chart, save to file system, and create an iText Image object
ChartUtilities.saveChartAsPNG(new File("C:\\temp\\img.png"), createChart(createDataset()), 305, 250);
Image img1 = Image.getInstance("C:\\temp\\img.png");
// Create pdf document
for (int i = 0; i < 8; i++)
{
doc.add(new Chunk(img1, 0, 0, true));
}
doc.close();
答案 0 :(得分:0)
好的,您在Document
构造函数中将页边距设置为1磅。 1点是1/72英寸。您应该使用0f
代替,但这并不能解释1英寸的余量。小白色条子?当然......但不是你所描述的。
问题几乎肯定源于你将Image
包裹在Paragraph
中,PdfPTable
又包裹在Image img1 = Image.getInstance(path);
img1.scaleAbsoluteHeight(PageSize.LEGAL.getHeight());
img1.scaleAbsoluteWidth(PageSize.LEGAL.getWidth());
// you might need this, you might not.
img1.setAbsolutePosition(0, 0);
// and add it directly.
document.add(img1);
中。
我建议您缩放图像以匹配页面大小,然后将图像直接添加到文档中,而不是将其包装在表格中:
{{1}}