导入PDF时,iTextSharp会在页面顶部添加白色块

时间:2014-12-01 14:01:54

标签: c# pdf itextsharp

我使用iTextSharp和C#。

有一个小问题

上下文: 我下载PDF并将它们合并为一个巨大的。

问题: 在每一页上,前几个厘米只是白色,而pdf I Import在白色块之后开始。

每页的结尾都是正确的。没有重叠或丢失的对象/文本 - 您可以假设它因为它必须处理更少的空间。我认为它可能会被垂直拉伸。

因此导入工作正常,但它总是在每页的顶部添加几个白色的白色。 这感觉就像一个利润空间。但我似乎无法解决它。

有什么想法吗?

感谢您的帮助。非常感谢。

public void method()
{

    // needed variables for the pdf-merging part
    fs = new FileStream(Variables.destinationFile, FileMode.Create);
    writer = PdfWriter.GetInstance(doc, fs);
    doc.Open();
    doc.SetPageSize(PageSize.A4);
    doc.SetMargins(0f, 0f, 0f, 0f);
    pdfContent = writer.DirectContent; 

    byte[] result;
    int numPages;


    foreach (Tuple<string, string, int> currentTuple in someArray)

            try
                {
                    result = client.DownloadData(new Uri(adress + currentTuple.Item1 + ".pdf"));

                    // read and add the pages to the output file
                    reader = new PdfReader(result);
                    numPages = reader.NumberOfPages;

                    for (int i = 1; i < numPages + 1; i++)
                    {
                        doc.NewPage();
                        page = writer.GetImportedPage(reader, i);
                        pdfContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                catch (Exception e)
                {
                }   

        }   

        doc.Close();
        writer.Close();
        fs.Close();
}

P.S。为什么它总是删除我的“你好”? :)

1 个答案:

答案 0 :(得分:0)

您使用错误的方法合并文档。您的方法抛弃了所有交互性,并且不尊重页面大小(这解释了您报告的问题)。请告诉我你在哪里获得了以这种方式合并文档的灵感,这样我就可以去打击那个负责你所用例子的人; - )

chapter 6 of my book中解释了连接文档的正确方法。

您可以在此处找到更多示例:

正如您所看到的,您的问题之前已经在StackOverflow上得到了多次回答,因为许多人一直在使用正确的方法合并文档(使用PdfCopy)而不是以错误的方式执行(使用PdfWriterAddTemplate())。

在评论中,您说AddPage()中的方法PdfCopy并不存在。我们来看看该课程的最新版本:PdfCopy.cs

我清楚地看到:

/**
 * Add an imported page to our output
 * @param iPage an imported page
 * @throws IOException, BadPdfFormatException
 */
public virtual void AddPage(PdfImportedPage iPage) {

请注意,最新版本还有AddDocument()方法:

virtual public void AddDocument(PdfReader reader) {

使用此方法,您不再需要遍历所有页面,但您可以一次添加PdfReader正在阅读的PDF的所有页面。

如果您只想添加一系列页面,可以使用:

virtual public void AddDocument(PdfReader reader, List<int> pagesToKeep) {

不要使用非官方版本!正式版可在此处下载:http://sourceforge.net/projects/itextsharp/files/itextsharp/

iText Group对旧版本的iTextSharp不承担任何责任,也不对我们软件的分支负责。