我有一个问题,我有一个表(PdfPTable)可能会超出页面的长度.我试过查找如何将一个表"拆分"到一个以上的页面,但iTextSharp在这方面的记录非常糟糕.有没有人知道如何做到这一点,而不是在页面上选择一个任意的Y位置并告诉它如果在那里分开?
我查看了SplitLate和SplitRows属性,但没有关于这些做什么的文档.编辑他们什么都不做.
谢谢!
编辑
我希望在宽度方向上将桌子切成两半,因为桌子总是适合页面的宽度.这就是说我希望垂直不适合的行延伸到它下面的下一页.
EDIT2
这是一些代码:
Public Sub BuildPrintableDocument
Dim doc As New Document(PageSize.LETTER, 0, 0, 0, BOTTOM_MARGIN)
Dim writer As PdfWriter = PdfWriter.GetInstance(doc, _
New FileStream("invoice.pdf", FileMode.Create)
Dim footer As New HeaderFooter(New Phrase("www.columbussupply.com", _
footerFont), False)
footer.Border = Rectangle.NO_BORDER
footer.Alignment = HeaderFooter.ALIGN_CENTER
doc.Footer = footer
doc.Open()
....
Dim items As PdfPTable = NewItemTable()
Dim count As Integer = 0
For Each oi As OrderItem In TheInvoice.Items
If oi.Status <> OrderItem.OrderItemStatus.Cancelled Then
Dim …Run Code Online (Sandbox Code Playgroud) 如何让iTextSharp在生成的PDF的每一页上重复PdfPTable的标题?
我正在使用iTextSharp打印PDF文档.一切顺利,直到我必须在其中打印公司徽标.
首先我注意到徽标的质量很差,但经过几张图片的测试后,我意识到iTextSharp渲染效果不佳.我这样做的测试是使用我的代码打印PDF,然后使用Acrobat 8.0编辑文档并绘制图像.然后打印了两份文件,看到了明显的区别.我的问题是,如果有人知道这是否是由于缩放问题,我没有告诉iTextSharp它必须如何渲染图像或是iTextSharp限制.
呈现图像的代码如下:
Dim para As Paragraph = New Paragraph
para.Alignment = Image.RIGHT_ALIGN
para.Add(text)
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage As Image = Image.GetInstance(imageFile)
thisImage.Alignment = Image.LEFT_ALIGN
para.Add(thisImage)
Run Code Online (Sandbox Code Playgroud)
打印的图像如下: alt text http://img710.imageshack.us/img710/4199/sshot2y.png
使用iTextSharp直接打印图像
alt text http://img231.imageshack.us/img231/3610/sshot1z.png
使用Acrobat 8编辑和打印图像
编辑:这些徽标图像是从上传页面加载的,用户可以在其中上传任何他想要的徽标图像,我使用以下代码缩放该图像:
Dim graph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(newImage)
graph.CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver
graph.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
graph.InterpolationMode = Drawing.Drawing2D.InterpolationMode.Bicubic
graph.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
graph.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality
graph.DrawImage(newImage, 0, 0, newWidth, newHeight)
graph.Dispose()
graph = Nothing
Run Code Online (Sandbox Code Playgroud)
这导致原始图像丢失信息,所以当在pdf中打印时,信息的丢失非常明显,因为不管怎样,iTextSharp都比它更大,无论我放在那里的缩放.因此,我尝试按原样存储图像,防止用户上传大于200K的图像并调整图像大小,以便我可以保持纵横比,并在打印之前使用iTextSharp Image对象调整大小.这解决了我的图像被打印的问题,这些较大的图像质量很差,但导致pdf文档有一个分页符或只是不适合页面,奇怪的是因为图片看起来很好,但它的行为就像它更大.这是新图像的屏幕截图: alt text http://img38.imageshack.us/img38/5756/sshot3tc.png
编辑2: …
我的小组一直在使用itext-sharp库和C#/ .NET来生成自定义的动态PDF.在大多数情况下,这个过程非常适合我们的需求.我们在开发/测试期间可能遇到的一个问题是布局问题,这可能导致PDF无法在Adobe Reader中正确打开/呈现,尤其是.较新版本的Acrobat/Reader.
该文档将正确打开前X页的显示.但是如果出现错误,则不会显示文档中的其余页面.
如上所述,我们通常能够使用C#/ iText代码将此问题跟踪到布局类型问题.我们最终通过使用猜测和检查方法或分而治之来找到错误.它有效,但它不是解决这些问题的最佳方法.
我想知道是否有任何可用的工具可以加快验证PDF文档的过程,并有助于指出文档中的错误?
我想在包含简单文本的现有PDF文档中添加页面.
我尝试过在互联网上找到的以下代码,但到目前为止我还没有工作:
PdfReader reader = new PdfReader("1.pdf");
Document document = new Document(reader.GetPageSize(1));
PdfCopy copier = new PdfCopy(doc, new FileStream("2.pdf", FileMode.Create));
for (int pageCounter = 1; pageCounter < reader.NumberOfPages + 1; pageCounter++)
{
//byte[] page = reader.GetPageContent(pageCounter);
copier.AddPage(copier.GetImportedPage(reader, pageCounter));
}
copier.NewPage();
copier.Add(new Paragraph("This is added text"));
document.Close();
reader.Close();
Run Code Online (Sandbox Code Playgroud)
请让我知道如何做到这一点?
StackOverflow上的以下问题和答案显示了如何生成在没有适当密码的情况下无法打开的PDF.
我想类似地使用这个框架,但略微修改,以允许我的用户"打开"PDF而不需要密码,但只允许他们编写PDF,如果他们有密码.
这可能与iTextSharp有关吗?
如果这很重要,我在WF 4.0自定义活动中使用C#4.0.
我正在获取包含大量数据的巨大PDF文件.当前的PDF为350 MB,大约有40000页.获得较小的PDF当然很不错,但这就是我现在要处理的事情:-(
我可以在acrobat阅读器中打开它,但在加载时有一些延迟,但在那之后acrobat阅读器很快.
现在我需要将大文件拆分成单个页面,然后尝试从pdf页面读取一些收件人数据,然后将每个收件人应该获得的一个或两个页面发送给每个特定收件人.
到目前为止,这是我使用itextsharp的非常小的代码:
var inFileName = @"huge350MB40000pages.pdf";
PdfReader reader = new PdfReader(inFileName);
var nbrPages = reader.NumberOfPages;
reader.Close();
Run Code Online (Sandbox Code Playgroud)
接下来第二行"new PdfReader"会在那里停留大概10分钟,进程大小达到1.7 GB,然后我得到一个OutOfMemoryException.
我认为"新的PdfReader"试图将整个PDF读入内存.
有没有其他/更好的方法来做到这一点?例如,我可以以某种方式只将PDF文件的一部分读入内存而不是一次只读取所有内容吗?使用除itextsharp之外的其他库可以更好地工作吗?
如何使用c#在itextsharp pdf cell ceration中设置单元格宽度和高度.我只是用
cell.width = 200f;
Run Code Online (Sandbox Code Playgroud)
但它应该显示错误消息.
宽度无法设定.
我该怎么办?..
我尝试了3种不同的方式来显示页码, OnCloseDocument内容没有显示在页面中,没有一个工作.
我的目的是显示页码这样
1 of 10
2 0f 10
..............
............
每页10的10
我知道如何展示
1
2
3
4
....
10
但不知道如何显示总页数
我使用 OnCloseDocument 来显示页数计数,但其中的内容未显示.
public class MyPdfPageEventHelpPageNo : iTextSharp.text.pdf.PdfPageEventHelper
{
protected PdfTemplate total;
protected BaseFont helv;
private bool settingFont = false;
public override void OnOpenDocument(PdfWriter writer, Document document)
{
template= writer.DirectContent.CreateTemplate(100, 100);
bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
}
public override void OnCloseDocument(PdfWriter writer, Document document)
{
//See below
}
Run Code Online (Sandbox Code Playgroud)
第一种方式:
public override void OnCloseDocument(PdfWriter writer, Document …Run Code Online (Sandbox Code Playgroud) 我正在制作一个应该显示带密码的PDF的应用程序.这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
try
{
string filePath = Request.QueryString["filePath"];
if (filePath.ToUpper().EndsWith("PDF"))
{
copyPDF(filePath);
}
}
catch
{
string message = "<script language='Javascript'>alert('File Not Found! Call Records Department for verification. ')</script>";
ScriptManager.RegisterStartupScript(Page, this.GetType(), message, message, false);
}
}
}
public void copyPDF(string filePath)
{
iTextSharp.text.pdf.RandomAccessFileOrArray ra = new iTextSharp.text.pdf.RandomAccessFileOrArray(Server.MapPath(ResolveUrl(filePath)));
if (ra != null)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
byte[] password = System.Text.ASCIIEncoding.ASCII.GetBytes("Secretinfo");
iTextSharp.text.pdf.PdfReader thepdfReader = new iTextSharp.text.pdf.PdfReader(ra, password);
int pages = thepdfReader.NumberOfPages; …Run Code Online (Sandbox Code Playgroud) itextsharp ×10
c# ×5
asp.net ×4
pdf ×4
pdfptable ×2
ghostscript ×1
page-break ×1
passwords ×1
repeat ×1
row ×1
split ×1
tableheader ×1
vb.net ×1