我是第一次使用iText,我有这个问题。
我创建了这个stampaFattureMultiple()方法,它连接了在ArrayList listaFatture集合中检索到的一些PDF文档。如您所见,PDF文档存储在Listafatture.get(i).getPDF()表示的Blob字段中。好的,这工作很好,PDFs文档是正确连接的。
public void stampaFattureMultiple(ArrayList<Fattura> listaFatture) {
ByteArrayOutputStream docPDF = null;
ByteArrayOutputStream currentPdfBAOS = null;
InputStream blobinstream = null;
/** The resulting PDF file: */
String result = "D:/XYZ/fatture-concatenate.pdf";
// STEP 1 Creazione del documento in formato A4 e senza margini:
com.itextpdf.text.Document document = new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4, 0, 0, 0, 0);
try {
// STEP 2: Make copies of PDF documents. Documents can be edited after reading and before writing them out
//PdfCopy copy = new PdfCopy(document, pdfResult);
docPDF = new ByteArrayOutputStream();
//PdfCopy copy = new PdfCopy(document, docPDF);
PdfCopy copy = new PdfCopy(document, new FileOutputStream(result));
// STEP 3:
document.open();
// Concatena tutti i PDF delle fatture reperite:
for (int i = 0; i < listaFatture.size(); i++) {
// Obtain the current Blob object representing the PDF:
Blob currentPdfBlob = listaFatture.get(i).getPdf();
// Put the current PDF Blob content into the current ByteArrayOutputStream:
if(currentPdfBlob!=null){
blobinstream = currentPdfBlob.getBinaryStream();
int chunk = 1024;
byte[] buffer = new byte[chunk];
int length = -1;
currentPdfBAOS = new ByteArrayOutputStream();
while ((length = blobinstream.read(buffer)) != -1) {
currentPdfBAOS.write(buffer, 0, length);
}
currentPdfBAOS.flush();
}
ByteArrayOutputStream currentFatturaTestataBasos = stampaTestataFatturaPdf(listaFatture.get(i));
//document.newPage();
// STEP 4: reader for the i document:
ByteArrayInputStream currentPdfBAIS = new ByteArrayInputStream(currentPdfBAOS.toByteArray());
PdfReader currentPdfReader = new PdfReader(currentPdfBAIS);
PdfImportedPage page;
PdfCopy.PageStamp stamp;
for (int currentPageIndex = 0; currentPageIndex < currentPdfReader.getNumberOfPages(); ) {
page = copy.getImportedPage(currentPdfReader, ++currentPageIndex);
copy.addPage(page);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
document.close();
}
}
正如你所看到的,为了完成这个任务,我是以以下方式完成的:
>
我迭代listaFatture集合中的所有文档,并从Blob对象开始构建相关的PDF文档:
Blob currentPdfBlob = listaFatture.get(i).getPdf();
然后通过以下方式创建此文档的阅读器:
PdfReader currentPdfReader = new PdfReader(currentPdfBAIS);
所以我阅读这个阅读器,然后复制文档中的页面。
好的,很好用。问题是,在每个文档之前,我必须插入一个特殊的页面,该页面是由stampaTestataFatturaPdf()方法生成的,该方法返回一个表示单个页面文档的ByteArrayOutputStream。
所以我在复制当前PDF页面之前插入了这一行:
ByteArrayOutputStream currentFatturaTestataBasos = stampaTestataFatturaPdf(listaFatture.get(i));
你能给我一些帮助和一些建议吗?
TNX
您可以打开任何数量的PDFReader
。您已经有一个带有CurrentPDFReader
的PdfReader了,只需用新PdfReader(CurrentFatturateStatabasos.TobyteArray())
打开另一个PdfReader
并将一个页和另一个页添加到PDFCopy
中。
假设我有两份文件。 一个是有大约2-3页的主模板。第二个只有一段文字与各种风格(粗体,斜体,下划线,字体大小等)。 我想用第二个文档中的段落替换模板中的一个参数。 null
喂 我有一个文档,看起来像这样: 我尝试使用$push添加另一个街道文档,它错误地出现: pymongo.errors。WriteError:字段“地址”必须是数组,但在文档{_id:ObjectId('6049e88657e43d8801197c72')}中属于object类型 我正在使用的代码: 没有制作地址簿或任何东西,只是编辑它,这样它对没有上下文的人来说更有意义。 我想要的输出是文档如下
问题内容: 将节点从一个文档复制到另一个文档时遇到问题。我已经使用了Node中的acceptNode和importNode方法,但是它们不起作用。我也尝试了appendChild,但是抛出了异常。我正在使用Xerces。那里没有实现吗?还有另一种方法吗? 问题答案: 问题在于,节点的上下文包含许多内部状态,其中包括其父项和拥有它们的文档。无论是也将目标文档,这就是为什么你的代码是没有的新节点的任何
我正在尝试将多个pdf页面合并为一个pdf页面。有很多iText的例子展示了如何将pdf页面合并到一个文件中,但是我需要所有的页面都放在一个页面中(一路上缩小它们的宽度和高度) 编辑:尝试从这里这个代码,但它只是合并成一个文件的pdf页面,我需要他们收缩成一个单一的页面
我已经很多年没有使用VB了,所以如果这是显而易见的,请原谅我。我正在尝试编写一个word vba宏,以便在模板中使用,该模板将显示一个userform,然后导入fileA的内容。docx,fileB。docx或fileC。docx取决于用户表单。(之后我将使用书签填写一些表单数据,我不知道这是否相关)。文件A、B和C将包含一些基本格式(如列表)的文本,但没有什么特别之处。 我在网上看到的解决方案可
目前,我只能阅读一个excel文档,并用我得到的代码编写相同的文档。现在我想读取多个excel文档并将数据写入其中。现在我得到了一个清晰的代码,这样做到一个文档,但这不是我想要的。我理解我目前得到的代码的结构,所以我更喜欢继续使用它。如何使用函数和函数来实现这一点? 这是我到目前为止所拥有的: 不是很好的编码...但它有效...