【发布时间】:2018-09-26 15:42:30
【问题描述】:
我想使用 itextsharp 5 读取 PDF 文件,并使用原始 PDF 的每一页的左半部分创建一个新的 PDF 文件,丢弃右半部分。我编写了以下代码,但结果已损坏,无法使用 Acrobat Reader 打开(尽管使用 Chrome 打开它可以)。如何制作可与 Acrobat Reader 一起使用的 PDF?
private byte[] ObtenerMitadPdf(byte[] Contenido)
{
using (var pdfReader = new PdfReader(Contenido))
{
using (var memoryStream = new MemoryStream())
{
using (var documento = new Document())
using (var pdfWriter = PdfWriter.GetInstance(documento, memoryStream))
{
pdfWriter.CloseStream = false;
documento.Open();
for (int i = 1; i <= pdfReader.NumberOfPages; i++)
{
var pagina = pdfWriter.GetImportedPage(pdfReader, i);
var tamañoPagina = pdfReader.GetPageSizeWithRotation(i);
var nuevoTamaño = new Rectangle(tamañoPagina.Left, tamañoPagina.Bottom,
tamañoPagina.Left + (tamañoPagina.Width / 2), tamañoPagina.Top, tamañoPagina.Rotation);
if (tamañoPagina.Rotation == 90)
{
pdfWriter.DirectContent.AddTemplate(pagina, 0, -1, 1, 0, 0, tamañoPagina.Height);
}
else
{
pdfWriter.DirectContent.AddTemplate(pagina, 0, 0);
}
documento.SetPageSize(nuevoTamaño);
documento.NewPage();
}
}
return memoryStream.ToArray();
}
}
}
【问题讨论】:
-
请不要将
var pdfWriter = PdfWriter.GetInstance(documento, memoryStream)放入using块中。关闭Document将隐式关闭PdfWriter。除了您的方法过于复杂之外,您可以简单地更改PdfReader的裁剪框并使用`PdfStamper` 编写该版本。 -
如何使用 PdfReader 设置裁剪框?是否考虑轮换?