С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76

Отрисовка содержимого pdf файла в окне java

17.12.2015, 03:19. Показов 2876. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, вопрос следующего порядка: в сети нашел вроде как бесплатную бибилотеку на java для работы с pdf файлами, но вот теперь вопрос на какую панель или в какой контейнер можно отрисовывать содержимое pdf файлов или любых других графических файлов, чтобы не морочить голову с вытаскиванием содержимого pdf, да еще и сделать этот контейнер универсальным , для просмотра содержимого любого графического файла.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2015, 03:19
Ответы с готовыми решениями:

Вывод содержимого файла .pdf
Уважаемые форумчане, подскажите, пожалуйста, как вывести содержимое файла .pdf в memo без помощи OpenDialog. P.S. Делаю электронный...

Отображение содержимого PDF-файла
Нужно отобразить содержимое pdf файла в VPF. Пытаюсь использовать PDFSharp - но не получается, знает ли кто-то решение этой проблемы?

Плагин отображения содержимого PDF файла в поиске Wordpress
Здравствуйте! Не подскажите бесплатный плагин или какое решение, чтобы реализовать поиск по содержимому PDF документа, находящегося в...

9
53 / 53 / 39
Регистрация: 05.12.2010
Сообщений: 261
17.12.2015, 09:58
разве в мануалах к данной библиотеке не сказано? почитайте к ней доки, там все есть, и с примерами, я уверен.
0
17.12.2015, 10:32

Не по теме:

разве в мануалах к данной библиотеке не сказано? почитайте к ней доки, там все есть, и с примерами, я уверен.
megastriker, это для слабаков. лучше сразу спрашивать на форумах и ничего самому не делать

0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
17.12.2015, 18:48  [ТС]
to Doctor_ конечно лучше а потом если не поможет наконец спросить у знающих людей. megastriker библиотека называется iText и судя по той информации: itextpdf.com/products(да не сочтут админы данную ссылку за рекламу) которая есть на сайте, она только вытаскивает метаданные из pdf фалов, а отрисовки там нет.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.12.2015, 18:52
я джва года искал такую библиотеку что бы все за меня делала
0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
17.12.2015, 19:22  [ТС]
и как нашел?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
18.12.2015, 13:33
ХреновоПлохо ищете, ребята.

Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
 <dependency>
   <groupId>org.apache.pdfbox</groupId>
   <artifactId>pdfbox</artifactId>
   <version>2.0.0-RC2</version>
 </dependency>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(final String[] args) throws IOException {
    final String docname = "doc.pdf";
    final PDDocument doc = PDDocument.load(new File(docname));
 
    final JFrame jFrame = new JFrame();
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    jFrame.add(new JComponent() {
        PDFRenderer renderer = new PDFRenderer(doc);
 
        @Override
        public void paint(final Graphics g) {
            try {
                final Graphics2D g2 = (Graphics2D) g;
                this.renderer.renderPageToGraphics(0, g2);
            } catch (final IOException ex) {
                Logger.getLogger(ReadPDF.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
 
    jFrame.setVisible(true);
}
1
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
22.12.2015, 20:36  [ТС]
Цитата Сообщение от aleksandy Посмотреть сообщение
ХреновоПлохо ищете, ребята.
не то чтобы Хреново, я нашел другой вариант


Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
import com.google.common.base.CharMatcher;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PagePanel;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
 
import static com.google.common.base.Strings.isNullOrEmpty;
 
public class PdfViewer extends JPanel {
    private static enum Navigation {GO_FIRST_PAGE, FORWARD, BACKWARD, GO_LAST_PAGE, GO_N_PAGE}
 
    private static final CharMatcher POSITIVE_DIGITAL = CharMatcher.anyOf("0123456789");
    private static final String GO_PAGE_TEMPLATE = "%s of %s";
    private static final int FIRST_PAGE = 1;
    private int currentPage = FIRST_PAGE;
    private JButton btnFirstPage;
    private JButton btnPreviousPage;
    private JTextField txtGoPage;
    private JButton btnNextPage;
    private JButton btnLastPage;
    private PagePanel pagePanel;
    private PDFFile pdfFile;
 
    public PdfViewer() {
        initial();
    }
 
    private void initial() {
        setLayout(new BorderLayout(0, 0));
        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        add(topPanel, BorderLayout.NORTH);
        btnFirstPage = createButton("|<<");
        topPanel.add(btnFirstPage);
        btnPreviousPage = createButton("<<");
        topPanel.add(btnPreviousPage);
        txtGoPage = new JTextField(10);
        txtGoPage.setHorizontalAlignment(JTextField.CENTER);
        topPanel.add(txtGoPage);
        btnNextPage = createButton(">>");
        topPanel.add(btnNextPage);
        btnLastPage = createButton(">>|");
        topPanel.add(btnLastPage);
        JScrollPane scrollPane = new JScrollPane();
        add(scrollPane, BorderLayout.CENTER);
        JPanel viewPanel = new JPanel(new BorderLayout(0, 0));
        scrollPane.setViewportView(viewPanel);
 
        pagePanel = new PagePanel();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        pagePanel.setPreferredSize(screenSize);
        viewPanel.add(pagePanel, BorderLayout.CENTER);
 
        disableAllNavigationButton();
 
        btnFirstPage.addActionListener(new PageNavigationListener(Navigation.GO_FIRST_PAGE));
        btnPreviousPage.addActionListener(new PageNavigationListener(Navigation.BACKWARD));
        btnNextPage.addActionListener(new PageNavigationListener(Navigation.FORWARD));
        btnLastPage.addActionListener(new PageNavigationListener(Navigation.GO_LAST_PAGE));
        txtGoPage.addActionListener(new PageNavigationListener(Navigation.GO_N_PAGE));
    }
 
    private JButton createButton(String text) {
        JButton button = new JButton(text);
        button.setPreferredSize(new Dimension(55, 20));
 
        return button;
    }
 
    private void disableAllNavigationButton() {
        btnFirstPage.setEnabled(false);
        btnPreviousPage.setEnabled(false);
        btnNextPage.setEnabled(false);
        btnLastPage.setEnabled(false);
    }
 
    private boolean isMoreThanOnePage(PDFFile pdfFile) {
        return pdfFile.getNumPages() > 1;
    }
 
    private class PageNavigationListener implements ActionListener {
        private final Navigation navigation;
 
        private PageNavigationListener(Navigation navigation) {
            this.navigation = navigation;
        }
 
        public void actionPerformed(ActionEvent e) {
            if (pdfFile == null) {
                return;
            }
 
            int numPages = pdfFile.getNumPages();
            if (numPages <= 1) {
                disableAllNavigationButton();
            } else {
                if (navigation == Navigation.FORWARD && hasNextPage(numPages)) {
                    goPage(currentPage, numPages);
                }
 
                if (navigation == Navigation.GO_LAST_PAGE) {
                    goPage(numPages, numPages);
                }
 
                if (navigation == Navigation.BACKWARD && hasPreviousPage()) {
                    goPage(currentPage, numPages);
                }
 
                if (navigation == Navigation.GO_FIRST_PAGE) {
                    goPage(FIRST_PAGE, numPages);
                }
 
                if (navigation == Navigation.GO_N_PAGE) {
                    String text = txtGoPage.getText();
                    boolean isValid = false;
                    if (!isNullOrEmpty(text)) {
                        boolean isNumber = POSITIVE_DIGITAL.matchesAllOf(text);
                        if (isNumber) {
                            int pageNumber = Integer.valueOf(text);
                            if (pageNumber >= 1 && pageNumber <= numPages) {
                                goPage(Integer.valueOf(text), numPages);
                                isValid = true;
                            }
                        }
                    }
 
                    if (!isValid) {
                        JOptionPane.showMessageDialog(PdfViewer.this, format("Invalid page number '%s' in this document", text));
                        txtGoPage.setText(format(GO_PAGE_TEMPLATE, currentPage, numPages));
                    }
                }
            }
        }
 
        private void goPage(int pageNumber, int numPages) {
            currentPage = pageNumber;
            PDFPage page = pdfFile.getPage(currentPage);
            pagePanel.showPage(page);
            boolean notFirstPage = isNotFirstPage();
            btnFirstPage.setEnabled(notFirstPage);
            btnPreviousPage.setEnabled(notFirstPage);
            txtGoPage.setText(format(GO_PAGE_TEMPLATE, currentPage, numPages));
            boolean notLastPage = isNotLastPage(numPages);
            btnNextPage.setEnabled(notLastPage);
            btnLastPage.setEnabled(notLastPage);
        }
 
        private boolean hasNextPage(int numPages) {
            return (++currentPage) <= numPages;
        }
 
        private boolean hasPreviousPage() {
            return (--currentPage) >= FIRST_PAGE;
        }
 
        private boolean isNotLastPage(int numPages) {
            return currentPage != numPages;
        }
 
        private boolean isNotFirstPage() {
            return currentPage != FIRST_PAGE;
        }
    }
 
    public PagePanel getPagePanel() {
        return pagePanel;
    }
 
    public void setPDFFile(PDFFile pdfFile) {
        this.pdfFile = pdfFile;
        currentPage = FIRST_PAGE;
        disableAllNavigationButton();
        txtGoPage.setText(format(GO_PAGE_TEMPLATE, FIRST_PAGE, pdfFile.getNumPages()));
        boolean moreThanOnePage = isMoreThanOnePage(pdfFile);
        btnNextPage.setEnabled(moreThanOnePage);
        btnLastPage.setEnabled(moreThanOnePage);
    }
}
    }
    
}
Tester
 
public static void main(String[] args) {
        try {
            long heapSize = Runtime.getRuntime().totalMemory();
            System.out.println("Heap Size = " + heapSize);
 
            JFrame frame = new JFrame("PDF Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
            //load a pdf from a byte buffer
            File file = new File("/Users/Sean/Documents/test-pdf.pdf");
            RandomAccessFile raf = new RandomAccessFile(file, "r");
            FileChannel channel = raf.getChannel();
            ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
            final PDFFile pdffile = new PDFFile(buf);
            PdfViewer pdfViewer = new PdfViewer();
            pdfViewer.setPDFFile(pdffile);
            frame.add(pdfViewer);
            frame.pack();
            frame.setVisible(true);
 
            PDFPage page = pdffile.getPage(0);
            pdfViewer.getPagePanel().showPage(page);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


но к сожалению мне нужно сделать возможность увеличивать изображение, как это реализовано в pdfReader, а как это сделать не пойму, может подскажет кто-то?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
25.12.2015, 08:08
В предложенном мною решении достаточно добавить 1 аргумент в вызов отрисовки.
0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
27.12.2015, 14:02  [ТС]
aleksandy, в предложенном Вами варианте на сколько я понял первый параметр это номер страницы для отображения - если я передаю туда ноль, нулевая страница отрисовывается нормально, если 1 то выводится все равно нулевая страница, и еще как я не пытался не получается сделать скороллинг при увеличении страницы, и не пойму как сделать навигацию по страницам, это скорее всего нужно как-то перегружать метод paint, и туда передавать номер страницы и увеличение, но с перегрузками я не очень дружу, так что спасибо большое за совет, но пока у меня больше вопросов чем ответов для данной реализации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2015, 14:02
Помогаю со студенческими работами здесь

В новом окне вывести текст, а затем содержимое файла pdf
Задача. В новом окне вывести текст, ниже этой строки напечатать PDF-файл в виде картинки, а не кода-текста. Щелчок по ссылке ...

Инструментарий Java для считывания PDF файла в программу
Как прочитать pdf файл в программу?? Какие есть для этого инструменты java?? Можете привести фрагмент кода или пример чтения данных из pdf...

Видимость формы PDF файла средствами Java. Как сделать?
Коллеги, приветствую! Совершенно не силен в Java, но есть задача, которую нужно решить, в свете чего обращаюсь к вам за помощью. ...

Вывод текста в окне и запуск Java файла на платформах
import javax.swing.*; public class main { public static void main(String args) { JFrame Game = new JFrame(&quot;Games&quot;); ...

Отрисовка на многослойном окне
Здравствуйте! Создаю многослойное окно с полупрозрачным фоном с помощью следующего кода: HBITMAP hbmp; Form1-&gt;BorderStyle =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru