空白PDF生成时,WriteCompatiblePdf方法调用ITextSharp

本文关键字:WriteCompatiblePdf 方法 调用 ITextSharp PDF 空白 | 更新日期: 2023-09-27 18:04:14

你好,我使用下面的代码。当我上传一些包含一些内容的PDF文件时,上传后,上传的PDF文件上没有内容。上传的PDf为空白。我正在使用下面的ItextSharp方法将原始PDF版本更改为定义版本。

private int WriteCompatiblePdf(string fileName, FileUpload filePath)
        {
            string sNewPdf = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["InterfaxPath"]) + fileName;
            iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(filePath.FileBytes);
            // we retrieve the total number of pages
            int n = reader.NumberOfPages;
            // step 1: creation of a document-object
            iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
            // step 2: we create a writer that listens to the document
            iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(sNewPdf, FileMode.Create, FileAccess.ReadWrite));
            //write pdf that pdfsharp can understand
            writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4);
            // step 3: we open the document
            document.Open();
            iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
            iTextSharp.text.pdf.PdfImportedPage page;
            int rotation;
            int i = 0;
            while (i < n)
            {
                i++;
                document.SetPageSize(reader.GetPageSizeWithRotation(i));
                document.NewPage();
                page = writer.GetImportedPage(reader, i);
                rotation = reader.GetPageRotation(i);                    
                cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);                    
            }
            // step 5: we close the document
            document.Close();
            return n;
        }

建议吗?

空白PDF生成时,WriteCompatiblePdf方法调用ITextSharp

OP提供了一个示例"blank"文件。

事实证明,这个"空白"文件确实包含所需的内容,它只是偏离了页面。

详细信息

文档的页面有这样的媒体框定义:

/MediaBox[0 7072 612 7864]

可见区域的x坐标在0..612和y坐标在7072…7864。但是,在添加导入的页面内容时,OP显式地将它们锚定在坐标0,0:

上。
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
因此,前一页的内容被添加到y坐标为0..792的区域中。所以,它们是不可见的。

的决议

有不同的方法来解决这个问题:

  1. 在坐标正确的位置添加内容,即使用

    cb。AddTemplate(page, 1f, 0, 0, 1f, x, y);

    式中,xy分别为reader.GetPageSizeWithRotation(1)LeftBottom (a Rectangle);或者

  2. 规范Document构造函数的页面大小矩形,使其基于0,0;或者

  3. 使用PdfStamperPdfReader而不是PdfWriter,并使用它来选择所需的版本。

这是因为你没有设置任何文本写入PDF。这是一个如何编写文本

的简单示例
 string newFile = @"C:'the path'file.pdf";
 Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 10, 42, 35);
 PdfWriter write = PdfWriter.GetInstance(doc, new FileStream(newFile,  
 FileMode.Create));    
 doc.Open(); // open the connection
 Paragraph p1 = new Paragraph("text to be displayed in the first paragraph");
doc.Add(p1); // close the connection

这个链接会告诉你如何从iTextSharp编写更高级的

相关文章:
  • 没有找到相关文章