我有一個具有抽象方法draw(Graphics2D g2)和方法print(),showPreview(),printPDF()的抽象類。對於我的Java程序中的每個文檔,我實現了draw(),因此我可以打印,顯示預覽併爲每個文檔創建一個PDF文件。 我的問題是如何使用該Graphics對象的多個頁面創建一個PDF。 我通過爲每個頁面創建PDF文件來解決此問題,然後將這些文件合併到一個新文件中。但是一定有更好的辦法。 我有以下的代碼與一個網頁創建PDF:如何使用Java和itext從Graphics對象創建多個頁面的PDF
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());
}
}
非常感謝你,它適用於以下更改。 – Jan
哪些變化? PS:這是你點擊正確答案旁邊的空白複選標記的部分,讓其他人知道誰是對的(並給予這個人某種聲望)。 「我」在這種情況下。此外,如果您提出多個問題並且從不標記他們回答,其他人將會看到您的可憐答案百分比,並且不太可能打擾,因爲他們知道即使他們是對的,他們也不會給予他們代表。 –
對不起馬克,我嘗試瞭解這個網站是如何工作的。 我沒有意識到PdfContentByte可以被每個頁面重複使用。 我做了修改: PdfTemplate template = cb.createTemplate(_pageWidth,entireHeight); g2 = template.createGraphics(_pageWidth,entireHeight); (int curPg = 1; curPg <= _numberOfPages; ++ curPg){ ..... cb.addTemplate(hugeTempl,0,-_pageHeight *(_numberOfPages-curPg)); document.newPage(); } – Jan