我正在使用 iTextSharp 创建一个 List<PdfReader> _documents
有几个 PDF 文档。
在此列表上使用合并创建单页文档并将其发送给客户端后,我发现 PDF 在 Adobe Reader 中看起来被剪切了。
当我像这样突出显示图片时,我可以看到它就在那里:
如果我保存它,它就会完成。
如果我保存 PdfReader
之一在列表中作为单个 PDF 文档 - 没有合并 - 它看起来不错。
合并函数是:
public void Merge(Stream outputStream)
{
Document newDocument = null;
try
{
newDocument = new Document();
// Set margins and page size for the document
newDocument.SetMargins(50, 50, 50, 50);
// There are a huge number of possible page sizes, including such sizes as
// EXECUTIVE, LEGAL, LETTER_LANDSCAPE, and NOTE
newDocument.SetPageSize(PageSize.A3 );
PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, outputStream);
newDocument.Open();
PdfContentByte pdfContentByte = pdfWriter.DirectContent;
if (EnablePagination)
{
_documents.ForEach(delegate(PdfReader doc)
{
_totalPages += doc.NumberOfPages;
});
}
int currentPage = 1;
foreach (PdfReader pdfReader in _documents)
{
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
newDocument.NewPage();
PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, page);
pdfContentByte.AddTemplate(importedPage, 0, 0);
if (EnablePagination)
{
pdfContentByte.BeginText();
pdfContentByte.SetFontAndSize(_baseFont, 9);
pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER,
string.Format("{0} of {1}", currentPage++, _totalPages), 520, 5, 0);
pdfContentByte.EndText();
}
}
}
}
finally
{
outputStream.Flush();
if (newDocument != null)
newDocument.Close();
outputStream.Close();
}
}
我怀疑它与 newDocument.SetPageSize(PageSize.A3);
有关
但我不确定,到目前为止我找不到解决方案。
最佳答案
只是一些可以尝试的想法。该问题可能与缩放或调整大小有关。比较两个文档的水平缩放比例。此外,importedPage.PdfDocument.PageSize 需要与 pdfContentByte.PdfDocument.PageSize 进行比较,并且可能会缩小。
关于c# - 使用 itextsharp.text.pdf 合并多个 itextsharp.text.pdf.PdfReader 对象后文档看起来被剪切了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739061/