2

可以在使用 Java/JSP 检查打印使用 itext 创建“仅打印”PDF中找到此问题的一些背景

我已经能够使用 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();

我还能够使用飞碟使用以下代码从 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 并显示一个打印对话框?

4

3 回答 3

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);

希望这可以帮助。

于 2013-05-08T06:36:52.407 回答
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();
    }
}
于 2012-03-12T18:08:05.953 回答
0

修改飞碟文件。

PDDocument document = ...;

PDPage firstPage = document.getPage(0);
PDPageAdditionalActions actions = firstPage.getActions();
actions.setO(new PDActionJavaScript("this.print(true);\r")); // O for open
于 2017-04-18T18:38:06.583 回答