我正在尝试使用iText7扩展PDF的第一页。网其余的页面应该保持不变。
如果PDF包含一个页面,下面的方法是有效的,但是如果有多个页面,第一个页面(应该缩放)是空白的,而剩余的页面被正确添加。
我错过了什么?
public byte[] ScaleFirstPagePdf(byte[] pdf)
{
using (var inputStream = new MemoryStream(pdf))
using (var outputStream = new MemoryStream(pdf))
using (var srcPdf = new PdfDocument(new PdfReader(inputStream)))
using (var destPdf = new PdfDocument(new PdfWriter(outputStream)))
{
for (int pageNum = 1; pageNum <= srcPdf.GetNumberOfPages(); pageNum++)
{
var srcPage = srcPdf.GetPage(pageNum);
var srcPageSize = srcPage.GetPageSizeWithRotation();
if (pageNum == 1)
{
var destPage = destPdf.AddNewPage(new PageSize(srcPageSize));
var canvas = new PdfCanvas(destPage);
var transformMatrix = AffineTransform.GetScaleInstance(0.5f, 0.5f);
canvas.ConcatMatrix(transformMatrix);
var pageCopy = srcPage.CopyAsFormXObject(destPdf);
canvas.AddXObject(pageCopy, 0, 0);
}
else
{
destPdf.AddPage(srcPage.CopyTo(destPdf));
}
}
destPdf.Close();
srcPdf.Close();
return outputStream.ToArray();
}
}
我不能用这个代码复制空白页问题,但是肯定以这种方式生成的文件会有问题。
问题在于,您在两个内存流之间共享一个字节缓冲区——一个用于读取,另一个用于同时写入。
简单地使用另一个缓冲区或依赖默认的MemoryStream
实现为我解决了这个问题,也应该为您解决这个问题,因为除了我提到的问题之外,您的代码似乎没有任何可疑之处。
以下是您应该如何创建输出流:
using (var inputStream = new MemoryStream(pdf))
using (var outputStream = new MemoryStream())
如果您仍然遇到问题,即使在这个调整之后,那么问题肯定是特定于文件的,我怀疑您可以在不共享文件的情况下获得任何帮助。
我试图创建一个带有页眉和页脚的PDF。页眉和页脚都是图像。由于我的pdf创建了随机数量的页面,我需要自动将其添加到每一页。我知道我需要使用某种eventhandler。不幸的是,我找不到vb.net语言中的任何示例,我只能找到java/C#示例,我真的不擅长阅读/转换这些语言vb.net.我还不是编程专家。 谁能给我指一下正确的方向吗。 Edit4:删除的随机内容不再需要回答我的问题。 下面这段代
我正在将一些PDF编辑工具从iTextSharp更新到iText7。 在iTextSharp中,pdfStamper类中有一个方法:pdfStamper。ReplacePage()。然而,iText7中的pdfStamper类已被删除,我在复制相同的功能时遇到困难。 假设我有文档X,需要用文档Y的第1页替换第4页,但我希望结果保存到一个新的文档Z。 到目前为止,我有3行使用CopyPageTo方法
我需要添加一个HTML块作为使用iText7的所有页面的标题。标题包含一个图像徽标和一些文本。 在关闭文档对象之前,我现在有这样一个问题: 页脚工作正常,但页眉工作正常。 标题是这样加载的: 其中,的定义如下: 当我使用方法,效果很好,但只适用于第一页。所有其他内容都遵循它。 当我尝试使用方法添加它时,所有页面中只呈现图像。 顺便问一下,有没有办法得到标题段落的实际高度?我想,一旦解决了标题定位,
我正在尝试缩放pdf文件,就像复印机中的缩放功能一样,它可以按百分比缩放文档(如下所示:https://inspectapedia.com/graphics/Safari_Page_Setup.jpg),我正在使用pdfbox管理我的pdf文件。我尝试过这个代码,但为什么它不起作用?代码中没有错误。 有人知道为什么该代码不起作用吗? 编辑 我需要它在API 16上工作
我有一个私人钥匙在档案里。“privatekey.pem”并且不知道如何创建谁能帮助我吗?我正在尝试使用IText7签名pdf。
我有一个场景,我需要用iText7库从pdf中获取签名信息。签名可能存在,也可能不存在。当我为没有任何数字签名的PDF实例化一个新的对象时,会出现异常 “没有相关的PdfWriter用于进行间接操作。” .如果有签名,就很好用。我不确定如何纠正这个异常。 更新为包含代码示例