簡體   English   中英

在Java中使用itext對齊PDF中的內容

[英]Align content in PDF using itext in java

我有一段時間會遇到這個問題。 我正在向文檔繪制pie chart並顯示jtable data 我無法align pdf file的內容。 如何將jtable datapie chart與該pdf對齊。 我在下面用image提到了我的code 如您所見,我需要將jtable data稍微對齊到頂部,並且它也必須適合pagewidth

     private void graphical_to_pdf() {

    graph_table.setSize(graph_table.getPreferredSize());

    JTableHeader th = graph_table.getTableHeader();
    th.setSize(th.getPreferredSize());

    PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 800, 800, 0.65f);
    com.itextpdf.text.Font f = new com.itextpdf.text.Font(com.itextpdf.text.Font.FontFamily.TIMES_ROMAN, 18.0f, com.itextpdf.text.Font.NORMAL, BaseColor.BLACK);

    Document doc = new Document(new com.itextpdf.text.Rectangle(900, 900));

    //Creating a paper to store the jtable contents
    Paper paper = new Paper();

    paper.setSize(800, 800);
    paper.setImageableArea(0, 100, 800, 800);

    PageFormat pf = new PageFormat();
    pf.setPaper(paper);
    Printable printable = graph_table.getPrintable(JTable.PrintMode.NORMAL, null, null);

    try {
        PdfWriter writer;
        writer = PdfWriter.getInstance(doc, new FileOutputStream(save_pdf.getSelectedFile().getAbsoluteFile() + ".pdf"));

        writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage);
        doc.open();
        int width = 375;
        int height = 300;

        JFreeChart chart = create_pie_chart_count();

        doc.add(new Paragraph("Some TExt", f));
        doc.add(new Paragraph("Some Text", f));
        doc.add(new Paragraph("Document Generated On - " + generatedDate, f));
        BufferedImage bufferedImage = chart.createBufferedImage(width, height);

        Image image = Image.getInstance(writer, bufferedImage, 1.0f);
        image.scalePercent(100f);
        image.setAlignment(image.MIDDLE);
        doc.add(image);
        PdfAction action = PdfAction.gotoLocalPage(1, pdfDest, writer);
        writer.setOpenAction(action);

            BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);

        Graphics2D g = img.createGraphics();

        int page = 0;

        int result = Printable.NO_SUCH_PAGE;

        PdfContentByte cb = writer.getDirectContent();
        do {
            result = printable.print(g, pf, page);
            if (result == Printable.PAGE_EXISTS) {
                cb.saveState();
                Graphics2D g2 = cb.createGraphics(650, 225);
                result = printable.print(g2, pf, page);
                g2.dispose();
                cb.restoreState();
                page++;
                doc.newPage();

            }

        } while (result == Printable.PAGE_EXISTS);
        g.dispose();
    } catch (Exception e) {
    } finally {
        doc.close();
    }
}

看一下以下問題的答案: 如何在iText中放置PDFGraphis2D對象?

如您所見,通常直接將圖表或表格之類的對象繪制到直接內容上。 相反,您應該創建一個PdfTemplate進行繪制。 使用PdfTemplate的好處之一是可以將其包裝在Image 不用擔心:如果PdfTemplate包含矢量數據,則Image將是矢量圖像; 它不會被光柵化(這會導致分辨率降低)。

一旦有了Image對象,就有許多不同的選項可以調整大小,定位和組織它們。 閱讀以下問題的答案時,您可以了解不同的選擇:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM