Ich habe diesen Code gefunden, der ein JPanel zu einem Bild überträgt und es dann in PDF-Datei druckt, aber da ich meine JPanel in einem JScrollPane und kein Layout oder Dimensionen enthält, weil es auf dem hängt JScrollPane-Layout, damit ich es nicht drucken kann. Der Fehler besagt, dass ein Bild mit der Höhe 0 und der Breite 0 nicht gedruckt werden kann. Wenn ich versuche, das JScrollPane selbst zu übergeben, bekomme ich nur den Rahmen des JScrollPane nur ohne den Inhalt JPanel gedruckt.Drucken JScrollPane Inhalt zu pdf
public void printToPDF(java.awt.Image awtImage, String fileName) {
try {
Document d = new Document();
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream(
fileName));
d.open();
Image iTextImage = Image.getInstance(writer, awtImage, 1);
//iTextImage.setAbsolutePosition(100,300);
iTextImage.scalePercent(100);
d.add(iTextImage);
d.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static java.awt.Image getImageFromPanel(Component component) {
BufferedImage image = new BufferedImage(component.getWidth(),
component.getHeight(), BufferedImage.TYPE_INT_RGB);
component.paint(image.getGraphics());
return image;
}
und hier ist die wichtigste Methode:
JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBounds(0, 0, 600, 510);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add(scrollPane);
GridBagConstraints c = new GridBagConstraints();
JPanel borderpanel = new JPanel();
scrollPane.setViewportView(borderpanel);
Color veryLight = new Color(239,230,230);
JPanel container = new JPanel();
borderpanel.add(container, BorderLayout.CENTER);
container.setLayout(new GridLayout(0,1,0,1));
container.setBackground(Color.WHITE);
JPanel test = new JPanel();
test.setLayout(new GridLayout(0,1,0,1));
container.add(test, BorderLayout.CENTER);
JPanel rowPanel = new JPanel();
rowPanel.setPreferredSize(new Dimension(580,50));
test.add(rowPanel, BorderLayout.WEST);
rowPanel.setLayout(null);
JLabel auctionTitle = new JLabel("Auction Title");
auctionTitle.setForeground(Color.WHITE);
auctionTitle.setFont(new Font("Tahoma", Font.PLAIN, 14));
auctionTitle.setBounds(102, 0, 82, 20);
rowPanel.add(auctionTitle);
rowPanel.setBackground(SystemColor.GRAY);
JTextArea textArea = new JTextArea();
textArea.setBackground(veryLight);
textArea.setBounds(191, 0, 386, 50);
rowPanel.add(textArea);
final java.awt.Image image = getImageFromPanel(borderpanel);
String fileName = "C:\\Users\\Test\\Desktop\\newfile.pdf";
printToPDF(image, fileName);
I borderpanel
tun Sie alles eingestellt noch sichtbar? – gpasch
Ich kann alles sehen, wenn ich es ausführen @gpasch – Hussein
ja, aber ich sehe nichts dazwischen: rowPanel.add (textArea); abschließend java.awt.Image image = getImageFromPanel (borderpanel); Ist das borderPanel in dieser Umgebung sichtbar? egal wie du es am Ende siehst. Überprüfen Sie, wo die Dimensionen Null sind. – gpasch