当前位置: 首页 > 知识库问答 >
问题:

C#ITextSharp将现有PDF复制到新PDF

苍嘉澍
2023-03-14

我读了很多关于SO的帖子,并搜索了很多解决方案,所有这些似乎都回避了我的特定问题。

是否有一种方法可以使用正确的页面大小将现有的PDF复制到新文档中?

谢谢。

更新

接受了布鲁诺的建议,我仔细检查了剪裁框和媒体框。我正在使用的PDF两者都有。裁剪框数组为

[28.008, 38.016, 640.008, 830.016]
[0, 0, 668.016, 848.016]
[28.008, 38.016, 612, 792]
[0, 0, 612, 792]

但是这样做会使“文本”向右和顶部移动太多,留下不均匀的边距。

我发现通过改变左下角的坐标,裁剪框,我可以移动文本。事实上,将裁剪框设置为40、40、612、792工作,但顶部和底部的边距非常窄。

我需要媒体盒是0,0,612,792。在那里不是问题。但是,我如何缩小裁剪框并使文本在页面上居中呢?我一定是漏掉了什么。

共有1个答案

汤飞
2023-03-14

谢谢。布鲁诺·洛瓦吉和MKL。在你的帮助下,我得以达成这个解决方案。

private void ResizeForm ( string path, string fileName )
{
    string src = path + @"\" + fileName + "_pre.pdf";
    string dest = path + @"\" + fileName + ".pdf";

    File.Move ( dest, src );

    using ( PdfReader pdf = new PdfReader ( src ) )
    {
        PdfDictionary pageDict;
        PdfArray cropBox;
        PdfArray mediaBox;

        float letterWidth = PageSize.LETTER.Width;
        float letterHeight = PageSize.LETTER.Height;

        int pageCount = pdf.NumberOfPages;

        for ( int i = 1; i <= pageCount; i++ )
        {
            pageDict = pdf.GetPageN ( i );
            cropBox = pageDict.GetAsArray ( PdfName.CROPBOX );
            mediaBox = pageDict.GetAsArray ( PdfName.MEDIABOX );

            cropBox [ 0 ] = new PdfNumber ( 30 );
            cropBox [ 1 ] = new PdfNumber ( 40 );
            cropBox [ 2 ] = new PdfNumber ( letterWidth + 30 );
            cropBox [ 3 ] = new PdfNumber ( letterHeight + 40 );

            mediaBox [ 0 ] = new PdfNumber ( 30 );
            mediaBox [ 1 ] = new PdfNumber ( 40 );
            mediaBox [ 2 ] = new PdfNumber ( letterWidth + 30 );
            mediaBox [ 3 ] = new PdfNumber ( letterHeight + 40 );

            pageDict.Put ( PdfName.CROPBOX, cropBox );
            pageDict.Put ( PdfName.MEDIABOX, mediaBox );
        }

        PdfStamper stamper = new PdfStamper ( pdf, new FileStream ( dest, FileMode.Create ) );
        stamper.Close ( );
    }
}

这可能有点矫枉过正,但它对我的目的是有效的。

希望这能帮助其他人。

 类似资料:
  • 我用的是iTextSharp。dll将我的页面打印为pdf。我唯一的问题是pdf显示了我在页面上的CSS和JavaScript。有没有一种方法可以将iTextSharp设置为不显示CSS/JS? 是的,我把我的CSS/JS直接输入到. aspx页面——因为这是一个小项目。当然,对于一个大项目,我会把它分开。 编辑 这是我当前写入页面的语法

  • 我用从GlobalSign收到的通用串行总线令牌签署了一个PDF文件。但是我看不到Adobe的任何图标表明证书是有效的。 我从GlobalSign收到的USB令牌是一个可信任(安全/信任)证书。但我不确定为什么看不到可信/安全证书图标。 签名PDF如下所示: 我还可以从Adobe Acrobat DC看到这个图标的签名:

  • 我想使用iTextSharp和rectangle(0,100,600,155)裁剪PDF文件。一切都很好,当你打开创建的*.pdf文件时,你只能看到裁剪的内容,但是!如果你解析那个pdf,仍然有信息和文本来自不可见的文档部分,我不能接受。如何完全删除该数据? 不幸的是,如果我想在不支付许可证的情况下将我的应用程序商业化,我就不能使用这些代码,所以我不得不考虑不同的库...

  • 我正在尝试使用iTextSharp循环浏览PDF文档并删除所有空白页。我有代码检查每个页面是否为空,并将其写入新的PDF,但在关闭新文档时,我收到错误“文档没有页面”。但是,在文件夹中创建的文件确实具有我所期望的文件大小。 这是我目前的代码:

  • 我正在尝试向PDF文档的第一页添加一些内容。这样做的合适方式是什么? 目前,我的代码可以工作,但它会在文档的第一页之前添加(插入)一个新页面。这里可以用什么来代替 因此,我正在阅读的文档中的内容将作为内容而不是新页面添加到现有的第一页

  • 我在用iTextVB。net将一些背景(即其他单页pdf)打印到另一个pdf上。 所以我有一个5页的“空白”pdf,我在第一页上盖上一个名为page1的文件的第一页。pdf,然后我把第2页的第一页。pdf作为第2页等的背景。 到目前为止,它运行良好,但我遇到了一个问题,在我的“空白”上打上一个特定的pdf文件——问题似乎与我称之为“page4”的文件有关。这似乎是因为第4页。pdf被设计成一个可填