- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我几乎(我认为)能够在不先保存的情况下使用 servlet 呈现 PDF。我已经能够成功设置它,但我一直坚持尝试在客户端浏览器中使用打印对话框打开 PDF。
我已经能够通过以下方式成功将我的 PDF 发送给客户:
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
OutputStream os = resp.getOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(os);
os.close();
但是,我不确定如何在打开它时放置一个打印对话框。我已经将此代码用于 physical PDF 文件,但我需要能够读取 OutputStream 的内容作为字节数组输入到 PdfReader(我认为):
PdfReader reader = new PdfReader("a_physical_file.pdf");
PdfStamper stamper = new PdfStamper(reader, os);
stamper.setPageAction(PdfWriter.PAGE_OPEN, new PdfAction(PdfAction.PRINTDIALOG), 1);
stamper.close();
不确定如何使用 OutputStream 而不是实际文件...
如果您想在那里发帖,我还创建了一个 iText 聊天室:https://chat.stackoverflow.com/rooms/8945/itext
最佳答案
警告:我使用的是旧版本的 Itext,因此我的经验可能不适用。
PdfReader 可以使用字节数组。因此您可以使用 ByteArrayOutputStream 作为您的第一个输出流,然后使用它来获取读取器,而不是文件名。
问候
编辑:关于您的问题:
我正在以其他方式进行操作:我正在处理 ByteArrayOutputStream,然后将其写入响应流:
ByteArrayOutputStream out = new ByteArrayOutputStream();
// creating / modifying the pdf
...
byte[] pdfoutput = out.toByteArray();
res.setContentLength(pdfoutput.length);
res.getOutputStream().write(pdfoutput);
编辑 2:最终解决方案(来自聊天室)
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new StringBufferInputStream(buf.toString()));
OutputStream os = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(os);
os.close();
PdfReader reader = new PdfReader(((ByteArrayOutputStream)os).toByteArray());
OutputStream out = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, out);
stamper.setPageAction(PdfWriter.PAGE_OPEN, new PdfAction(PdfAction.PRINTDIALOG), 1);
stamper.close();
resp.getOutputStream().write(((ByteArrayOutputStream)out).toByteArray());
关于java - iText/Flying Saucer PdfStamper 使用 OutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738102/
下面的代码正确地将值“foo”分配给命名字段,但该字段没有被“展平”。我一定是忽略了一个步骤,但我不知道它是什么。请指教。谢谢。 public byte[] FlattenSpecifiedFormF
我正在使用 iTextSharp 通过 C# 将页码添加到 PDF。在运行代码分析时,怀疑输出的 MemoryStream 被处理了不止一次。 See this warning generated b
我正在使用 iTextSharp 填写 PDF 上的一些表单域。 PdfReader pdfReader = new PdfReader(templateFile); //http://stackov
我正在使用 ColdFusion 11 和 Java (com.lowagie.text.pdf.PdfStamper) 来填写 pdf,但是当我输入一个带有单个撇号的值时,例如 32' 它仅在 pd
我现在迷路了。 我试图完成的是在另一个(如水印)上添加一个 PDF。 问题是我似乎不明白使用的坐标系,因为 我的水印表现出乎意料。 这两个 PDF 具有不同的尺寸。 我的目标具有以下维度: 595高度
我使用 iText 5.4 PDFStamper 在我的 PDF 文档上使用以下代码进行数字签名: stamper = PdfStamper.createSignature(reader, os, '
我有下面的iText代码来读取文件并将其添加到主PDF文件中,所以它基本上是在现有PDF的绝对位置添加PDF页面。主 PDF 中的绝对位置和页码将动态确定。有时,它可能位于第 1 页上的 100,10
我正在尝试将新页面添加到 PdfStamper,但此代码不会将模板 pdf 字段添加到压模。 private void InsertNewPage(PdfStamper stamper, int pa
我正在开发一个系统,我必须在其中将一些图像添加到现有的 PDF 文档中。 这适用于 iText 5.1.3,但由于某种原因,在包含扫描图像的 PDF 中,它不会添加任何图像。 这是 PDF Docum
我这里指的是下面的方法。(Link 了解更多详情) public void setEncryption(boolean strength, Stri
我有这个代码 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws Servle
为什么 PdfStamper 会增加我每次使用的签名 pdf 的大小? 这是我的代码: private static void test(String src, String pwd, String
您好,我已经成功地使用 HTMLWorker 使用 asp.NET/C# 转换 gridview。 (1) 我已对生成的表格应用了一些有限的样式,但看不到如何应用表格样式(例如网格线)或应用其他格式样
我正在使用 PdfStamper 在运行时创建 PDF。我的问题是我无法增加 PDF 字段的字体大小。我已经试过了,但没有成功, stamper.AcroFields.SetFieldProperty
我可以使用 PDFStamper 和 PdfContentByte content.AddImage 方法将图像叠加到现有 PDF 文档上。 当现有文档顶部已覆盖图像时,我的问题就出现了。您实际上可以
我几乎(我认为)能够在不先保存的情况下使用 servlet 呈现 PDF。我已经能够成功设置它,但我一直坚持尝试在客户端浏览器中使用打印对话框打开 PDF。 我已经能够通过以下方式成功将我的 PDF
我正在使用 ITextSharp 将多页 PDF 文件拆分为单页文件。我还设法使用 MemoryStream 将这些单页 PDF 添加到 zip 文件中。 现在,我需要使用 PdfStamper 为这
这是我第一次使用 iText5 for .NET,到目前为止,除了一项任务外,一切都相当成功。 我创建了两个 VB.Net 类,每个类都成功返回一个有效的 MemoryStream,其中包含一个单页
我正在使用 iTextSharp 加载现有 PDF 并使用 PdfStamper 添加文本。我想要完全控制文本,这意味着我想要能够控制字体(仅 TrueType)、字体大小和坐标。现在,我正在使用 S
我正在尝试在我的应用程序中使用 iText 2.1.7。我将问题确定为以下代码: InputStream inputFile = ... OutputStream outputStream = ...
我是一名优秀的程序员,十分优秀!