如何将图形的大小调整为pdf页面的大小java



我正在尝试使用以下代码将图形保存为pdf文件:

if (jRadioButton1.isSelected()) {
    Document document = new Document(PageSize.A4, 50, 50, 50, 50);
    PdfWriter writer = null;
    try {
        writer = PdfWriter.getInstance(document, new FileOutputStream("C:\Simulation_Report.pdf"));
    } catch (FileNotFoundException | DocumentException ex) {
        Logger.getLogger(Reports.class.getName()).log(Level.SEVERE, null, ex);
    }
    document.open();
    try {
        document.add(new Paragraph("Simulation Report"));
    } catch (DocumentException ex) {
        Logger.getLogger(Reports.class.getName()).log(Level.SEVERE, null, ex);
    }
    document.newPage();
    try {
        document.add(new Paragraph("Simulation"));
        PdfContentByte cb = writer.getDirectContent();
        cb.saveState();
        PdfTemplate pdfTemplate = cb.createTemplate(750,750);
        Graphics2D g2 = pdfTemplate.createGraphics(750, 750);
        Drawer drawer = new Drawer();
        drawer.setSource(new File(jTextField1.getText()));
        drawer.paintComponent(g2);
        cb.addTemplate(pdfTemplate, 10, 10);
        g2.dispose();
        cb.restoreState();
    } catch (DocumentException ex) {
        Logger.getLogger(Reports.class.getName()).log(Level.SEVERE, null, ex);
    }
    document.close();

但是当我打开保存的文件(pdf文件)时,我看不到全部的图形,我只看到了大约60%的图形,所以如何使图形的大小与pdf页面的大小相适应A4我该怎么修?!

您的代码中存在矛盾。

我看到了:

Document document = new Document(PageSize.A4, 50, 50, 50, 50);

这意味着您正在创建一个大小为595 x 842个用户单位的文档(默认情况下,1个用户单位=1个点)。

然而,我也看到您创建了一个测量750 x 750用户单元的PdfTemplate

PdfTemplate pdfTemplate = cb.createTemplate(750,750);

你添加了这个模板,偏移量为10个用户单位:

cb.addTemplate(pdfTemplate, 10, 10);

如何解决这种矛盾?你有两个选择:

选项1:根据您的图形调整页面:

我假设您希望每侧的边距为10个用户单位,因此页面的尺寸至少应为770 x 770个用户单位(750个用户单位可容纳图像,每侧边距为10乘以2)。在这种情况下,您应该创建这样的文档:

Document document = new Document(new Rectangle(770, 770));

现在,您正在创建一个文档,该文档的页面与要添加的图形的大小相对应。

选项2:根据页面大小调整图形大小:

扔掉这个代码:

cb.saveState();
PdfTemplate pdfTemplate = cb.createTemplate(750,750);
Graphics2D g2 = pdfTemplate.createGraphics(750, 750);
Drawer drawer = new Drawer();
drawer.setSource(new File(jTextField1.getText()));
drawer.paintComponent(g2);
cb.addTemplate(pdfTemplate, 10, 10);
g2.dispose();
cb.restoreState();

替换为:

PdfTemplate pdfTemplate = cb.createTemplate(750,750);
Graphics2D g2 = pdfTemplate.createGraphics(750, 750);
Drawer drawer = new Drawer();
drawer.setSource(new File(jTextField1.getText()));
drawer.paintComponent(g2);
g2.dispose();
Image img = Image.getInstance(pdfTemplate);
img.scaleToFit(575, 822);
img.setAbsolutePosition(10, 10);
document.add(img);

正如您所看到的,我们缩放图像,使其宽度(和高度)比页面小20个用户单位。这是因为您的代码指示您希望图像的边距为10个用户单位。现在我们确信图像将适合页面(甚至留下至少10点的空白)。

我们定义了(10, 10)的绝对位置,即您在addTemplate()方法中使用的坐标,并将图像添加到文档中。

不要担心:将PdfTemplate封装在Image对象中不会光栅化图像。如果模板包含矢量数据,则矢量数据将被保留。

相关内容

  • 没有找到相关文章

最新更新