Мне нужно использовать два метода для записи содержимого на существующей странице PDF с использованием PdfWriter и объединения PDF-файлов с помощью PdfCopy. Я хочу сделать это в одном l oop. Объект PdfWriter не объединяет PDF как исходную страницу. мы должны создать новую страницу (A4) и добавить в нее контент со страницы источника. Чтобы избежать этого, мы можем использовать объект Pdfcopy, который объединяет точный размер страниц PDF с исходным файлом. Но проблема здесь в том, что мне нужно сначала объединить, а затем вызвать объединенный файл, чтобы снова добавить содержимое. Поскольку в файле PDF много страниц, эта операция выполняется с использованием двух циклов.
Невозможно использовать опцию PdfCopy в том же l oop.
Вот мои два метода:
public boolean mergePDFsinOneFile(List<InputStream> list, OutputStream outputStream,List<Integer> allDocId,int conDocId){
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
PdfCopy copy = new PdfCopy(document, outputStream);
document.open();
String storagePath = sql.getDirectoryPath();
PdfReader reader = null;
for(int docId : allDocId) {
String finalPath = "";
ResultSet doc = sql.getDocumentDetails(docId);
if(doc.next()) {
String relative_path = doc.getString("RELATIVE_PATH");
if(relative_path.endsWith(".pdf") || relative_path.endsWith(".PDF")){
finalPath = storagePath +relative_path;
reader = new PdfReader(finalPath);
copy.addDocument(reader);
copy.freeReader(reader);
}
}
}
reader.close();
outputStream.flush();
document.close();
outputStream.close();
System.out.println("document merged");
return true;
}
И еще один метод:
public boolean mergePDFsinOneFileTe(List<InputStream> list, OutputStream outputStream,List<Integer> allDocId,int conDocId){
com.itextpdf.text.Document document = new com.itextpdf.text.Document();//PageSize.A4
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
PdfContentByte cb = writer.getDirectContent();
BaseFont bf = BaseFont.createFont();
cb.setFontAndSize(bf, 8);
String storagePath = sql.getDirectoryPath();
ResultSet conDocResult = sql.getDocumentDetails(conDocId);
String printText = "";
String docName = "";
if(conDocResult.next())
docName = conDocResult.getString("DOCUMENT_NAME");
for(int docId : allDocId) {
String finalPath = "";
printText = "";
ResultSet doc = sql.getDocumentDetails(docId);
if(doc.next()) {
String relative_path = doc.getString("RELATIVE_PATH");
if(relative_path.endsWith(".pdf") || relative_path.endsWith(".PDF")){
String docTypePrefix = "";
int typeValue = 0;
finalPath = storagePath +relative_path;
PdfReader reader = new PdfReader(finalPath);
System.out.println("finalPath "+finalPath);
ResultSet docTypeResult = sql.getDoctypeDetails(doc.getInt("DOCUMENT_TYPE_ID"));
if(docTypeResult.next())
docTypePrefix = docTypeResult.getString("CONSO_SUFFIX_NAME"); //PREFIX
ResultSet consolValue = sql.getConsolidateTypeValueByTypeId(doc.getInt("DOCUMENT_TYPE_ID"));
if(consolValue.next())
typeValue = Integer.parseInt(consolValue.getString("VALUE"));
printText = docName + "-" + "[" + typeValue + "]" + "-" + docTypePrefix;
for(int i = 1; i <= reader.getNumberOfPages();i++){
PdfImportedPage page = writer.getImportedPage(reader, i);
cb.addTemplate(page, 0, 0);
cb.beginText();
ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase(printText), document.left(), document.bottom() - 20, 0);
cb.endText();
document.newPage();
}
}
}
}
outputStream.flush();
document.close();
outputStream.close();
System.out.println("document merged");
return true;
}
Как записать содержимое во время цикла и объединить в одно и то же время? Пожалуйста, помогите.