可以在Check printing with Java/JSP和Create a "print-only" PDF with itext 找到此问题的一些背景信息
我已经能够使用iText-2.0.8和以下代码使用打印对话框成功创建和打开PDF:
String outputFile = "firstdoc.pdf";
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputFile));
writer.setOpenAction(new PdfAction(PdfAction.PRINTDIALOG));
document.open();
document.add(new Paragraph("TEST"));
document.close();
我还可以使用fly-saucer使用以下代码从XHTML生成PDF:
String inputFile = "firstdoc.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
但是,我似乎无法让两者一起工作......
我想使用飞碟创建PDF,如第二个代码块和我想将该PDF的开放动作设置为PdfAction.PRINTDIALOG
。
如何让这两组代码协同工作,以便最初打开飞碟创建PDF并打开对话框?
答案 0 :(得分:3)
您可以实现飞碟的org.xhtmlrenderer.pdf.PDFCreationListener,并在preWrite(ITextRenderer iTextRenderer,int pageCount)方法中编写与打印对话框相关的代码。
@Override
public void preWrite(ITextRenderer iTextRenderer, int pageCount)
{
iTextRenderer.getOutputDevice().getWriter().setOpenAction(new PdfAction(PdfAction.PRINTDIALOG));
}
在ITextRenderer中添加此侦听器
ITextRenderer renderer = new ITextRenderer();
renderer.setListener(PDFCreationListener implemetation class);
renderer.setDocumentFromString(htmlContent);
renderer.layout();
renderer.createPDF(os);
希望这有帮助。
答案 1 :(得分:2)
想出来......
如果其他人将来需要此功能,您可以使用PdfStamper修改已创建的PDF。
以下是适用于我的完整代码:
import java.io.*;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.PdfAction;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.FileOutputStream;
import java.io.IOException;
public class FirstDoc {
public static void main(String[] args) throws IOException, DocumentException {
String inputFile = "firstdoc.xhtml";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
PdfReader reader = new PdfReader(outputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("firstdocprint.pdf"));
stamper.setPageAction(PdfWriter.PAGE_OPEN, new PdfAction(PdfAction.PRINTDIALOG), 1);
stamper.close();
}
}
答案 2 :(得分:0)
对飞碟文件的修改。
PDDocument document = ...;
PDPage firstPage = document.getPage(0);
PDPageAdditionalActions actions = firstPage.getActions();
actions.setO(new PDActionJavaScript("this.print(true);\r")); // O for open