Mam klasę abstrakcyjną z abstrakcyjnym rysunkiem metod (Graphics2D g2) i metodami print(), showPreview(), printPDF(). Dla każdego dokumentu w moim programie Java implementuję funkcję draw(), dzięki czemu mogę drukować, wyświetlać podgląd i tworzyć pliki PDF dla każdego dokumentu. Mój problem polega na tym, jak utworzyć plik PDF z wieloma stronami z tego obiektu Graphics. Rozwiązałem go, tworząc plik PDF dla każdej strony, a następnie scalając pliki w jeden nowy plik. Ale musi być lepszy sposób. Mam następujący kod do tworzenia PDF z jednej strony:Tworzenie pliku PDF z wieloma stronami z obiektu Graphics za pomocą Javy i itextu
public void printPDF1(){
JFileChooser dialog = new JFileChooser();
String filePath = "";
int dialogResult = dialog.showSaveDialog(null);
if (dialogResult==JFileChooser.APPROVE_OPTION){
filePath = dialog.getSelectedFile().getPath();
}
else return;
try {
Document document = new Document(new Rectangle(_pageWidth, _pageHeight));
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(filePath));
document.open();
PdfContentByte cb = writer.getDirectContent();
g2 = cb.createGraphics(_pageWidth, _height);
g2.translate(0, (_numberOfPages - _pageNumber) * _pageHeight);
draw(g2);
g2.dispose();
document.close();
}
catch (Exception e2) {
System.out.println(e2.getMessage());
}
}
Dziękuję bardzo, działa z następującymi zmianami. – Jan
Jakie zmiany? PS: jest to część, w której klikasz ten pusty znacznik obok poprawnej odpowiedzi, pozwalając innym znać, kto miał rację (i dawać tej osobie jakąś reputację). "Ja" w tym przypadku. Ponadto, jeśli zadasz wiele pytań i nigdy nie oznaczysz ich odpowiedzi, inni będą widzieć twój niski procent odpowiedzi i będą mniej skłonni do kłopotów, ponieważ wiedzą, że nie dasz im powtórzenia, nawet jeśli mają rację. –
Przykro nam, Mark, próbuję zrozumieć, jak działa ta strona. Nie zdawałem sobie sprawy, że PdfContentByte może być ponownie użyty dla każdej strony. Wprowadziłem zmiany: Pdf Szablon szablonu = cb.createTemplate (_pageWidth, wholeHeight); g2 = template.createGraphics (_pageWidth, wholeHeight); ..... dla (int curPg = 1; curPg <= _numberOfPages; ++ curPg) { cb.addTemplate (hugeTempl, 0, -_pageHeight * (_numberOfPages - curPg)); document.newPage(); } – Jan