对此问道道歉,但我在iText网站上看不到任何明确的内容。
我有几个产品数据表。每个都是一个单独的文件。我想要做的是使用iText根据网络表单的答案生成摘要/推荐的一组操作,然后附加到所有相关的数据表。这样,我只需要在浏览器中打开一个新选项卡来打印所有信息,而不是为摘要打开一个,并为每个数据表打开一个。
那么,是否可以使用iText以编程方式执行此操作?
答案 0 :(得分:6)
是的,您可以使用iText 7合并PDF。查看iText 7 Jump-Start tutorial示例C06E04_88th_Oscar_Combine,关键代码是:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);
//Add pages from the first document
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());
firstSourcePdf.close();
secondSourcePdf.close();
pdf.close();
(C06E04_88th_Oscar_Combine方法createPdf
)
根据您的使用情况,您可能希望在此处使用PdfDenseMerger及其助手类PageVerticalAnalyzer而不是PdfMerger
。它尝试将来自多个源页面的内容放到单个目标页面上,并对应于来自PdfVeryDenseMergeTool的iText 5 this answer。由于PDF文件的性质,这仅适用于没有页眉,页脚和类似工件的PDF。
答案 1 :(得分:0)
该问题未指定语言,因此我使用C#添加了答案;这对我有用。我要创建三个独立但相关的PDF,然后将它们合并为一个。
在创建了三个单独的PDF文档并将数据添加到它们之后,我通过以下方式将它们组合在一起:
PdfDocument pdfCombined = new PdfDocument(new PdfWriter(destCombined));
PdfMerger merger = new PdfMerger(pdfCombined);
PdfDocument pdfReaderExecSumm = new PdfDocument(new PdfReader(destExecSumm));
merger.Merge(pdfReaderExecSumm, 1, pdfReaderExecSumm.GetNumberOfPages());
PdfDocument pdfReaderPhrases = new PdfDocument(new PdfReader(destPhrases));
merger.Merge(pdfReaderPhrases, 1, pdfReaderPhrases.GetNumberOfPages());
PdfDocument pdfReaderUncommonWords = new PdfDocument(new PdfReader(destUncommonWords));
merger.Merge(pdfReaderUncommonWords, 1, pdfReaderUncommonWords.GetNumberOfPages());
pdfCombined.Close();
因此,组合的PDF是PdfDocument的PDFWriter类型,合并的部分是PdfDocuments的PdfReader类型,而PdfMerger是将其绑定在一起的胶水。
答案 2 :(得分:0)
如果要添加两个字节数组并返回一个字节数组作为PDF / A
public static byte[] mergePDF(byte [] first, byte [] second) throws IOException {
// Initialize PDF writer
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(arrayOutputStream);
// Initialize PDF document
PdfADocument pdf = new PdfADocument(writer, PdfAConformanceLevel.PDF_A_1B, new PdfOutputIntent("Custom", "",
"https://www.color.org", "sRGB IEC61966-2.1", new FileInputStream("sRGB_CS_profile.icm")));
PdfMerger merger = new PdfMerger(pdf);
//Add pages from the first document
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(new ByteArrayInputStream(first)));
merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());
//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(new ByteArrayInputStream(second)));
merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());
firstSourcePdf.close();
secondSourcePdf.close();
writer.close();
pdf.close();
return arrayOutputStream.toByteArray();
}
答案 3 :(得分:0)
这是将 file1.pdf 合并到 file2.pdf 创建新的 merge.pdf 所需的最少 C# 代码:
var path = @"C:\Temp\";
var src0 = System.IO.Path.Combine(path, "merged.pdf");
var wtr0 = new PdfWriter(src0);
var pdf0 = new PdfDocument(wtr0);
var src1 = System.IO.Path.Combine(path, "file1.pdf");
var fi1 = new FileInfo(src1);
var rdr1= new PdfReader(fi1);
var pdf1 = new PdfDocument(rdr1);
var src2 = System.IO.Path.Combine(path, "file2.pdf");
var fi2 = new FileInfo(src2);
var rdr2 = new PdfReader(fi2);
var pdf2 = new PdfDocument(rdr2);
var merger = new PdfMerger(pdf0);
merger.Merge(pdf1, 1, pdf1.GetNumberOfPages());
merger.Merge(pdf2, 1, pdf2.GetNumberOfPages());
merger.Close();
pdf0.Close();