执行以下代码时,我收到 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) 在我的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应该捕获所有内容?
我正在使用由单个 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) 我需要用另一个单词替换现有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
我一直在尝试使用 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)
上面的代码只在最后一页插入了一张图片。有没有办法在所有页面中以相同的方式插入图像?
我正在使用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)
任何帮助将受到高度赞赏.
提前致谢
我必须创建一个圆角的桌子,类似于:

我可以用iTextSharp做到吗?
我构建了一种方法,尝试查看给定 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) 我将 iTextSharp 用于 PDF 文档创建器。我想添加标题,它是一个文本和它下面的一行,然后是要出现的表格。页脚应包含右下角的页码。我能够创建表格,但页眉和页脚似乎是一个问题。有人可以给出一个示例代码来解决这个问题。我还想为表格中的标题列着色,即只有第一行的标题列具有背景颜色。我是新手,所以请帮帮我。提前致谢。
我想改变我的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) itextsharp ×10
c# ×8
pdf ×5
asp.net ×3
.net ×1
httprequest ×1
image ×1
itext ×1
pdf-writer ×1
pdfptable ×1
razor ×1
tridion ×1
tridion-2011 ×1