标签: itextsharp

多页上的 ItextSharp 嵌套表导致 NullReferenceException

执行以下代码时,我收到 NullReferenceException。我还注意到,当我添加将单元格写入主表的代码时,嵌套表出现在新页面上。如果我取出将单元格写入主表的两个循环,则不会发生这种情况。

<%@ Page Title="" Language="C#" MasterPageFile="~/Main.master" %>

<%@ Import Namespace="iTextSharp.text" %>
<%@ Import Namespace="iTextSharp.text.pdf" %>

<%@ Import Namespace="System.IO" %>


<script runat="server">

protected void Page_Load(object sender, EventArgs e)
{

    Document doc = new Document(PageSize.LETTER);

    // Here is some stuff needed to put the pdf into the users response stream
    Response.Clear();
    Response.ContentType = "application/pdf";
    MemoryStream memoryStream = new MemoryStream();

    PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);

    writer.CloseStream = false; // This is important, but it may work without it

    doc.SetMargins(20, 20, 36, 10); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net pdf-generation itextsharp nullreferenceexception

2
推荐指数
1
解决办法
6258
查看次数

c#/ asp.net - 如何捕获"System.Web.HttpException:Request timed out"?

在我的asp.net/c#项目中,我使用iTextsharp dll从许多pdf文档中读取文本,但有时我会收到此错误

System.Web.HttpException:请求超时.

但是这样做的代码是:

    public static bool does_pdf_have_keyword(string keyword, string pdf_src) 
    {
        try
        {
            PdfReader pdfReader = new PdfReader(pdf_src);
            string currentText;
            int count = pdfReader.NumberOfPages;
            for (int page = 1; page <= count; page++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
                if (currentText.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) != -1) return true;
            }
            pdfReader.Close();
            return false;
        }
        catch
        {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

那么为什么页面在try catch中遇到未处理的异常并且catch应该捕获所有内容?

c# asp.net httprequest itextsharp

2
推荐指数
1
解决办法
7205
查看次数

如何减少具有多个单元格的 PdfPTable 的内存消耗

我正在使用由单个 PdfTable 组成的 ITextSharp 创建 PDF。不幸的是,对于特定数据集,由于创建了大量 PdfPCell,我遇到了内存不足异常(我已经分析了内存使用情况 - 我有近 1/2 百万个单元格!)

在这种情况下,有没有办法减少内存使用?我试过在不同点(每行之后)冲洗和完全压缩

PdfWriter 基于 FileStream

代码看起来很像这样:

Document document = Document();
FileStream stream = new FileStream(fileName,FileMode.Create);                                   
pdfWriter = PdfWriter.GetInstance(document, stream);
document.Open();
PdfPTable table = new PdfPTable(nbColumnToDisplay);
foreach (GridViewRow row in gridView.Rows)
{
    j = 0;
    for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
    {
        PdfPCell cell = new PdfPCell( new Phrase( text) );
        table.AddCell(cell);
    }   
}
document.Add(table);
document.Close();
Run Code Online (Sandbox Code Playgroud)

c# itextsharp pdfptable pdf-writer

2
推荐指数
1
解决办法
2851
查看次数

如何在不创建新PDF的情况下更新PDF?

我需要用另一个单词替换现有PDF AcroField中的单词.我正在使用iTEXTSHARP的PDFStamper来做同样的事情并且工作正常.但是,这样做需要创建一个新的PDF,我希望这些更改能够反映在现有的PDF本身中.如果我将目标文件名设置为与原始文件名相同,则不会反映任何更改.我是iTextSharp的新手,有什么我做错了吗?请帮助..我正在提供我正在使用的代码

  private void ListFieldNames(string s)
    {
        try
        {
            string pdfTemplate = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf";
            string newFile = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf";
            PdfReader pdfReader = new PdfReader(pdfTemplate);

            for (int page = 1; page <= pdfReader.NumberOfPages; page++)
            {
                PdfReader reader = new PdfReader((string)pdfTemplate);
                using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite)))
                {
                    AcroFields form = stamper.AcroFields;
                    var fieldKeys = form.Fields.Keys;
                    foreach (string fieldKey in fieldKeys)
                    {
                        //Replace Address Form field with my custom data
                        if (fieldKey.Contains("Address"))
                        {
                            form.SetField(fieldKey, s);
                        }    
                    }
                    stamper.FormFlattening = true; …
Run Code Online (Sandbox Code Playgroud)

asp.net itextsharp tridion tridion-2011 tridion-core-services

2
推荐指数
1
解决办法
3391
查看次数

如何将图像添加到 PDF 的所有页面?

我一直在尝试使用 itextsharp 将图像添加到所有页面。图像需要覆盖每个页面的所有内容。我在所有其他代码下面使用了以下代码doc.add()

Document doc = new Document(iTextSharp.text.PageSize.A4, 10, 10, 30, 1);
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/pdf/" + fname), FileMode.Create));
doc.Open();
Image image = Image.GetInstance(Server.MapPath("~/images/draft.png"));
image.SetAbsolutePosition(12, 300);
writer.DirectContent.AddImage(image, false);
doc.Close();
Run Code Online (Sandbox Code Playgroud)

上面的代码只在最后一页插入了一张图片。有没有办法在所有页面中以相同的方式插入图像?

pdf image image-processing itextsharp razor

2
推荐指数
1
解决办法
1万
查看次数

iTextSharp RegionTextRenderFilter在宽度的情况下不起作用

我正在使用iTextSharp从特定矩形内的pdf中获取数据

在高度的情况下获取的数据工作正常但在宽度的情况下,它返回整行而不是矩形中的单词.

我使用的代码如下:

  PdfReader reader = new PdfReader(Home.currentInstance.Get_PDF_URL());
            iTextSharp.text.Rectangle pageRectangle = reader.GetPageSize(currentPage);
            float selection_x = ((float)(selectionRectangle.RenderTransform.Value.OffsetX) / (float)canvas.Width) * pageRectangle.Width;
            float selection_y = pageRectangle.Height - (((float)(selectionRectangle.RenderTransform.Value.OffsetY) / (float)canvas.Height) * pageRectangle.Height);
            float selection_height = ((float)(selectionRectangle.Height) / (float)canvas.Height) * pageRectangle.Height;
            float selection_width = ((float)(selectionRectangle.Width) / (float)canvas.Width) * pageRectangle.Width;
            selection_y -= selection_height;
            RectangleJ rect = new RectangleJ(selection_x,selection_y,selection_width,selection_height);
            RenderFilter[] filter = { new RegionTextRenderFilter(rect) };
            ITextExtractionStrategy strategy;
            strategy = new FilteredTextRenderListener(
           new LocationTextExtractionStrategy(), filter
         );
String pageText = PdfTextExtractor.GetTextFromPage(reader, currentPage, strategy);
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.

提前致谢

.net c# itextsharp

2
推荐指数
1
解决办法
2062
查看次数

如何使用iText\iTextSharp创建圆角桌?

我必须创建一个圆角的桌子,类似于:

在此输入图像描述

我可以用iTextSharp做到吗?

c# pdf pdf-generation itext itextsharp

2
推荐指数
1
解决办法
4444
查看次数

如何使用 ITextSharp 获取 PDF 中嵌入图像的分辨率

我构建了一种方法,尝试查看给定 pdf 中所有嵌入图像的分辨率是否至少为 300 PPI(适合打印)。它所做的是循环浏览页面上的每个图像,并将其宽度和高度与艺术框的宽度和高度进行比较。如果每页只有一个图像,它会成功运行,但是当有多个图像时,艺术盒大小包括所有图像,从而将数字丢掉。

我希望有人可能对如何获取绘制图像的矩形大小有所了解,以便我可以正确比较,或者是否有更简单的方法来获取图像对象的 PPI(因为它将在其矩形,而不是原始形式)。

这是上述方法的代码

    private static bool AreImages300PPI(PdfDictionary pg)
    {
        var res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
        var xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
        if (xobj == null) return true;
        foreach (PdfName name in xobj.Keys)
        {
            PdfObject obj = xobj.Get(name);
            if (!obj.IsIndirect()) continue;
            var tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
            var type = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
            var width = float.Parse(tg.Get(PdfName.WIDTH).ToString());
            var height = float.Parse(tg.Get(PdfName.HEIGHT).ToString());
            var artbox = (PdfArray) pg.Get(PdfName.ARTBOX);
            var pdfRect = new PdfRectangle(float.Parse(artbox[0].ToString()), float.Parse(artbox[1].ToString()),
                float.Parse(artbox[2].ToString()), float.Parse(artbox[3].ToString()));

            if (PdfName.IMAGE.Equals(type) && (width < pdfRect.Width*300/72 || height < pdfRect.Height*300/72) …
Run Code Online (Sandbox Code Playgroud)

c# pdf itextsharp

2
推荐指数
1
解决办法
2169
查看次数

为 iTextSharp 中的 pdf 单元格添加页眉、页脚和背景颜色

我将 iTextSharp 用于 PDF 文档创建器。我想添加标题,它是一个文本和它下面的一行,然后是要出现的表格。页脚应包含右下角的页码。我能够创建表格,但页眉和页脚似乎是一个问题。有人可以给出一个示例代码来解决这个问题。我还想为表格中的标题列着色,即只有第一行的标题列具有背景颜色。我是新手,所以请帮帮我。提前致谢。

c# pdf itextsharp

2
推荐指数
1
解决办法
2万
查看次数

如何设置basefont颜色?

我想改变我的basefont颜色.

我用一个矩形来设置背景颜色,但我无法弄清楚如何让我的字体变成白色,因为我正在使用PdfContentByte对象.

我尝试使用Chunk来设置字体颜色,但SetFontAndSize会覆盖它.

BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);

iTextSharp.text.Font titreProgFont = FontFactory.GetFont("Times", 12, BaseColor.WHITE);

string nomProgramme, codeProgramme;
nomProgramme = "PROGRAMMEUR ANALYSTE";
codeProgramme = "LEA.1A";

Chunk titreProgChunk = new Chunk(nomProgramme + " (" + codeProgramme + ")", titreProgFont);

PdfContentByte cb2 = writer.DirectContent;
cb2.SaveState();
cb2.SetColorFill(BaseColor.GRAY);
cb2.Rectangle(200, 200, 200, 200);
cb2.Fill();
cb2.RestoreState();
cb2.BeginText();
cb2.SetFontAndSize(bfTimes, 12);
cb2.ShowTextAligned(PdfContentByte.ALIGN_CENTER, titreProgChunk.ToString(), 200, 200, 0);
cb2.EndText();
Run Code Online (Sandbox Code Playgroud)

c# pdf itextsharp

2
推荐指数
1
解决办法
3851
查看次数