Устранить все пробелы в PDF с помощью iText - PullRequest
0 голосов
/ 23 марта 2011

Я тестирую iText, чтобы сгенерировать PDF-файл, который состоит из 8 изображений в виде мозаики. Я использую 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();

1 Ответ

0 голосов
/ 23 марта 2011

Хорошо, вы устанавливаете поля страницы на 1 пункт в конструкторе Document. 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);
...