我需要将N个PDF文件合并成一个。我先创建一个空白文件
byte[] pdfBytes = null;
var ms = new MemoryStream();
var doc = new iTextSharp.text.Document();
var cWriter = new PdfCopy(doc, ms);
稍后,我将遍历html字符串数组
foreach (NBElement htmlString in someElement.Children())
{
byte[] msTempDoc = getPdfDocFrom(htmlString.GetString(), cssString.GetString());
addPagesToPdf(cWriter, msTempDoc);
}
private byte[] getPdfDocFrom(string htmlString, string cssString)
{
var tempMs = new MemoryStream();
byte[] tempMsBytes;
var tempDoc = new iTextSharp.text.Document();
var tempWriter = PdfWriter.GetInstance(tempDoc, tempMs);
tempDoc.Open();
using (var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssString)))
{
using (var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(htmlString)))
{
//Parse the HTML
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(tempWriter, tempDoc, msHtml, msCss);
tempMsBytes = tempMs.ToArray();
}
}
tempDoc.Close();
return tempMsBytes;
}
private static void addPagesToPdf(PdfCopy mainDocWriter, byte[] sourceDocBytes)
{
using (var msOut = new MemoryStream())
{
PdfReader reader = new PdfReader(new MemoryStream(sourceDocBytes));
int n = reader.NumberOfPages;
PdfImportedPage page;
for (int i = 1; i <= n; i++)
{
page = mainDocWriter.GetImportedPage(reader, i);
mainDocWriter.AddPage(page);
}
}}
我不太明白PdfWriter和PDFCopy之间的区别。
您的代码中有一个逻辑错误。当您像在getpdfdocfrom()
方法中那样从头开始创建文档时,直到您触发了close()
方法,文档才会完整。在这个close()
方法中,将创建一个拖尾和一个交叉引用(xref)表。错误会告诉您这些都丢失了。
实际上,您确实调用了close()
方法:
tempDoc.Close();
但是当您close()
文档时,已经太晚了:您已经创建了tempmsbytes
数组。您需要在关闭文档后创建该数组。
备注:通过将pdfimportedPage
实例添加到pdfwriter
来合并文件是一个糟糕的例子。如果您使用的是iTextSharp5或更早版本,则应该使用pdfcopy
或pdfsmartcopy
来执行此操作。如果使用pdfwriter
,则会丢弃大量信息(例如链接注释)。
首先,抱歉的低努力的问题…我曾用这些问题作为参考: 如果有人有任何线索,那就太神奇了!如果不是,请随意为我的一个低努力的问题生气…当我自己弄清楚的时候,我会发布一个更新!
问题内容: 如何将多个PDF文件合并/转换为一个大PDF文件? 我尝试了以下操作,但是目标文件的内容不符合预期: 我需要一个非常简单/基本的命令行(CLI)解决方案。最好的办法是,如果我可以将合并/转换的输出直接传送到管道中(就像我之前在这里提出的问题中最初尝试的那样:Linux管道(convert->pdf2ps-> lp)。 问题答案: 抱歉,我设法使用Google自己找到了答案,还有些运气:
我想合并几个pdf文件。我该怎么做? 到目前为止,我得到的是这个。 我正在尝试使用这个程序包myokyawhtun/PDFMerger。 根据我尝试合并的文件的不同,错误也会有所不同。 如果我尝试合并同一个pdf两次,则会生成该文件,但全部为空 如果我尝试上面的代码,就会得到HTTP错误500 如果我尝试使用更多文件,就会出现tcpdi_解析器内存不足错误 底线是它似乎不起作用。 我已经尝试了其他
如果我有一些文件,每个文件都有一个页面,我想使用 我在这里读到了几十个关于相同的问题,但大多数问题都已经过时或不再适用于
在java Web应用程序中使用PDFBox。我有一个代表多页绘图或蓝图的PDF文件。还有其他PDF文件表示对父文件的修改。我想将这些页面插入到第1页和第2页之间的父PDF文件中。 我找到了关于合并和添加页面的文章,但不完全是我需要的。 一些指导会很有帮助。 到目前为止我的代码:
我正在使用Apache PdfBox来预设几个非PDF/A表单,并使用将这些PDF合并在一起,并创建新PDF的字节数组。 是否有一种方法可以告诉创建一个不能再修改的有效PDF/A文档?